Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

Commit 610d9ef

Browse files
feat(components,types)!: retire the raw-HTML html node type (objectui#13449) (#13475)
Fixes #13449 Clause-②: no (narrowing) Metadata-protocol: narrowed ## What this does Retires the raw-HTML `html` node type, as the triage grade routed it (comment 6385669346: "Route: retire, as recommended"). Its renderer in `@object-ui/components` wrote the authored `html` string into a `div` through `dangerouslySetInnerHTML` with no sanitiser, and `@objectstack/spec` declares no `html` component. It is removed, not sanitised; no deprecation alias. Breaking for a page that still names it, so the changeset is `minor` with a FROM / TO migration (this repository's version policy forbids `major`). - `@object-ui/components`: the `html.tsx` registration (`ui:html` plus the bare key) and its import in `renderers/basic/index.ts` are gone. - `@object-ui/core`: `html` leaves `PUBLIC_BLOCKS` (it sat there as the curated tier's "escape hatch"), so `getPublicConfigs()` and the published `sdui.manifest.json` no longer carry it. - `@object-ui/types`: `HtmlSchema` leaves the package entry, `DataDisplaySchema` and the `SchemaRegistry` map (so `ComponentType` no longer offers `'html'`). The zod arm becomes `RetiredHtmlNodeSchema`, a `retiredNodeType('html', …)` refusal inside `DataDisplaySchema`, not exported: a `type: "html"` node is refused BY NAME at `type`, with the remedy in the message. This is the shape the maintainer ruled for the bare `kanban` key (objectui#8802) and that objectui#12954 reused for `cloud:plan-status`. - `@object-ui/cli`: `known-schema-types.ts` regenerated (`node scripts/regenerate-known-schema-types.mjs`; its `--check` answers OK), so `objectui check` no longer counts `html` / `ui:html`. - Docs: `content/docs/components/basic/html.mdx` (it said "Render raw HTML content safely", which was false), its `meta.json` row and its index link are gone; `guide/react-pages.md` says there is no raw-HTML block on either page tier. The schema-catalog example `components-basic-html/basic-html.json` is gone and the catalog index regenerated (`scripts/regenerate-catalog-index.py`; `--check` OK). - `@object-ui/fields`: `html` stays in `FIELD_TYPES_SKIP_FALLBACK`, moved from the "bare-name collision" group to a retired-key note. No behaviour change: the field editor still stands down from the bare key, so a stale node draws the unknown-component panel, never a rich-text editor. The `html` FIELD type (`HtmlFieldMetadata`, drawn by `field:html`, value displayed through the rehype-sanitize path objectui#13431 landed) is a different layer and is untouched. ## Reach, measured before and after (not a source-grep claim) A temporary probe rendered both doors through the real `SchemaRenderer` and the full console registration graph (`@object-ui/components` plus `apps/console/src/register-plugins`), with a payload of an `img` element carrying an `onerror` attribute plus a bold element: | door | base `a3c0da9` | this branch | |---|---|---| | JSON node `{ "type": "html", "html": PAYLOAD }` | injected: the `img` with its `onerror` attribute is in the DOM | unknown-component panel (OBJUI-001), payload shown escaped as text | | `kind: 'html'` page whose source writes an `html` tag carrying an `html` attribute | compile reports ZERO diagnostics; the `img` with its `onerror` attribute is in the DOM | compile refuses the tag (`forbidden-tag`, `unknown-component`); the page draws its compile report | | `getPublicConfigs()` names `html` | yes | no | The second row is worse than the card stated: the tier `guide/react-pages.md` documents as "Untrusted OK", parsed and never executed, could inject raw markup, because the page compiler whitelists every registered type. The probe was replaced by a committed pin (below) and deleted. ## Dispatch hypotheses, answered - H1 holds: sink, import, `HtmlSchema` and the zod literal sat where the claim read them at `a3c0da9`. - H2: `content/docs/fields/rich-text.mdx` names `type: 'html'` twice, and both are the FIELD type (`HtmlFieldMetadata` in the `ts` block; "HTML Mode" of the rich-text widget in prose). Both stay. `check:doc-types` had passed the code-block one only because the retired node registered the same bare key, so it now carries a field-vocabulary exemption in `scripts/check-doc-component-types.mjs`, worded like the `richtext` row beside it. - H3: `apps/console/dist` is not tracked, so nothing in-tree to regenerate for the manifest; the two tracked generated files that named the type are regenerated by their own generators (above). objectstack's tracked `sdui.manifest.json` still names `html`: it is generated from objectui's pinned build and its staleness gate forces a regenerate on the next `.objectui-sha` bump (see Acceptance notes). - H4 holds: no product producer. `git grep` for a quoted `html` over every tracked file, read hit by hit: apart from what this PR removes (the docs page, the catalog example, the `data-display-examples.json` entry, tests), every hit is the field type, a `kind: 'html'` page, a report export format, a code-editor language, or an HTML tag name. ## File surface beyond the claim's list The claim named `renderers/basic/**`, the two types files, the docs and tests naming the component, and the changeset. The dispatch's suggested route asked for every other list naming `html` as a component type; those are: `packages/core/src/registry/public-blocks.ts`, `packages/types/src/{registry.ts,index.ts,zod/index.zod.ts,zod/README.md}`, `packages/types/examples/data-display-examples.json`, `packages/cli/src/utils/known-schema-types.ts` (generated), `packages/fields/src/index.tsx` (regroup and comment only), the catalog example and its generated index, `scripts/check-doc-component-types.mjs` (one exemption), `content/docs/guide/react-pages.md`, and count / list pins in `apps/console`, `packages/app-shell`, `packages/cli`, `packages/fields`, `packages/types`. No governed surface: `node scripts/check-governed-queue-guard.mjs --test` over all 31 paths answers "NOT GOVERNED — 31 path(s) checked against 6 governed surface(s); none matched." ## Pins (each red on the pre-fix implementation, see Ablation) - `apps/console/src/__tests__/html-node-retired-13449.test.tsx` — the `kind: 'html'` page refuses the tag and renders no authored markup; the JSON node renders no authored markup; neither registry key survives while `field:html` does; CONTROL: the same page without the tag renders its `p` text. - `packages/types/src/__tests__/html-node-retired-13449.test.ts` — compile-time: no `html` member in `DataDisplaySchema`, no `'html'` in `ComponentType`, with non-vacuity siblings; runtime: a `custom` issue at `type` naming the retired type and both replacements; CONTROLS: a sibling node still parses, an unknown literal takes the generic path without the retirement text, and a form with an `html` FIELD still validates. - `packages/cli/src/__tests__/registered-types-validate-ratchet-10859.test.ts` — the strict face (`objectui validate`) refuses `html` by name; the namespaced refused-at-type pin falls 307 to 306 (`ui:html` left the registry). - `packages/components/src/__tests__/basic-renderers.test.tsx`, `packages/fields/src/__tests__/registry-collision.test.ts` — the old "renders HTML" / "bare html is the display widget" assertions became absence pins with lit controls. - Shifted counts and lists: `zod-mirror-parity` (pair moved to `EXCLUSIONS`, 205 to 204), `content-channel-family-d-9256` (row left, 67 to 66), `arm-named-export-8784` (`ABSENT_BY_DECISION` row), `public-contract` and `html-tier-manifest` in `apps/console`, `widget-dom-leak-sweep` in `app-shell` (target and ledger counts re-derived without `ui:html`). ## Ablation (one-shot, not committed) With the fix committed at `bfd3722`, the nine implementation files were put back from `a3c0da9` (`git checkout a3c0da9 -- …`, which restores `html.tsx` too), landing proved on disk by count (`register('html'` 1, the `import './html';` line 1, the `PUBLIC_BLOCKS` `'html',` row 1, `export const HtmlSchema = BaseSchema.extend` 1, `RetiredHtmlNodeSchema` 0). Tests resolve `@object-ui/*` through the root vitest `resolve.alias` to `src`, so no rebuild is in the path. The five pin files: `Test Files 5 failed (5)`, `Tests 11 failed | 65 passed (76)`: every new assertion red, every control green. Restore leg from `HEAD` inside a trap: `git diff HEAD` 0 bytes, `git status --porcelain` 0 lines, `html.tsx` absent, every restored path's hash equals its `HEAD` blob. ## Local verification Union run at `3c6faea` (the head before the last commit), each exit captured to a file before reading, under the shared verify lock: - `vitest run packages/types/ packages/core/ packages/sdui-parser/ packages/cli/ examples/schema-catalog/`: `Test Files 697 passed (697)`, `Tests 17792 passed | 27 skipped (17819)`. - `vitest run packages/components/ packages/fields/`: `Test Files 705 passed | 2 skipped (707)`, `Tests 8517 passed | 31 skipped (8548)`. - `vitest run apps/console/`: `Test Files 243 passed (243)`, `Tests 2460 passed (2460)`. - 48 reader files outside those packages (every test that names `PUBLIC_BLOCKS`, `getPublicConfigs`, `KNOWN_SCHEMA_TYPES`, `FIELD_TYPES_SKIP_FALLBACK`, the examples file, the catalog, `react-pages.md`, `ui:html`, or the edited doc-types gate, plus `unit-registry-absence-collision`): `Test Files 48 passed (48)`, `Tests 1543 passed | 16 skipped (1559)`. - type-check: `core`, `components`, `fields`, `cli` exit 0; `types` exit 2 on one vacuous compile-time pin in the new test file (`'kbd'` is not a `SchemaRegistry` key), fixed in `bfd3722`. Re-run at the final head `bfd3722` (it changes only that one test file): `type-check` of `types`, `core`, `components`, `fields`, `cli` all exit 0; the changed file `Test Files 1 passed (1)`, `Tests 6 passed (6)`. Gates at `bfd3722`, all exit 0: `check:doc-types`, `check:registry-bare-names`, `check:handler-key-reads`, `check:doc-example-ids`, `check:docs-route-closure`, `check:prompt-keys`, `check:entry-guard`, `check:action-forward-parity`, `check:spec-symbols`, `check:new-line-citations` (VERDICT 0 new citations), `check:control-bytes`, `check:doc-fences`, `check:unreferenced-sources`, `check:side-effects-array`, `check:doc-example-readers`, `check:icon-record-names`, `check:changeset-claims`, `check:pending-changeset-literals`, `check:test-path-roots`, `check:doc-json`, `check-changeset-presence` ("22 source file(s) of 7 released package(s) changed, and this change declares 1 changeset(s)"), `check-changeset-no-major`, `regenerate-catalog-index.py --check`, `regenerate-known-schema-types.mjs --check`. NOT MEASURED locally, left to CI: `check:sdui-registration-pins` (exit 2, needs a console build), `check:readme-exports`, `check:doc-snippets`, `check:doc-examples` (exit 2 / collapsed population, need the wider package build), and the `apps/console` and `packages/app-shell` type-checks (need the whole build closure). ## Acceptance notes - objectstack's repo-root `sdui.manifest.json` names `html` (`"description": "Raw HTML content"`). It is generated from objectui's pinned build by `scripts/gen-sdui-manifest-node.mjs`, and `check-sdui-manifest`'s staleness check forces the regenerate on the next `.objectui-sha` bump, which drops the entry. Carrier: that pin bump. Until then objectstack's server-side `validateJsxPages` still admits the tag, while the console's own compile already refuses it. - objectstack's ADR-0080 table names `renderers/basic/html.tsx` as the "today unsafe" escape hatch the constrained JSX tier "replaces"; this PR completes that replacement. The ADR is a dated decision record and is left as written. - `docs/audits/2026-08-zod-to-json-schema-fidelity.md` still lists `HtmlSchema`: a dated audit, left as written. Session: `https://claude.ai/code/session_01432GBvPzfZ6CsLanp9xzkZ` --- _Generated by [Claude Code](https://claude.ai/code/session_01432GBvPzfZ6CsLanp9xzkZ)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent ee4f1ef commit 610d9ef

31 files changed

Lines changed: 487 additions & 227 deletions
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
'@object-ui/components': minor
3+
'@object-ui/types': minor
4+
'@object-ui/core': minor
5+
'@object-ui/cli': minor
6+
---
7+
8+
The raw-HTML `html` node type is retired (objectui#13449). Its renderer wrote the authored `html` string into the page through `dangerouslySetInnerHTML` with no sanitiser, so anyone who could write metadata could put script-bearing markup in front of every viewer — a `kind: 'html'` page included, which compiled an `html` tag carrying an `html` attribute with no diagnostic. `@objectstack/spec` declares no `html` component, so it is removed rather than sanitised, at once, with no deprecation alias. This is breaking for a page that still names it; it is marked `minor` under this repository's version policy.
9+
10+
- **SDUI node `html`**, also registered as `ui:html`. FROM: `@object-ui/components` registered both keys. TO: neither is registered. A JSON node that still names it draws the unknown-component panel, a `kind: 'html'` page that writes the tag fails to compile with `forbidden-tag` and `unknown-component`, and `objectui check` no longer counts either key among the known component types.
11+
- **Public block `html`** in `PUBLIC_BLOCKS` (`@object-ui/core`). FROM: listed as the curated tier's escape hatch, so `getPublicConfigs()` and the published `sdui.manifest.json` carried it. TO: not listed, so neither names it.
12+
- **Schema `HtmlSchema`** in `@object-ui/types`: the TypeScript interface from the package entry, with its `DataDisplaySchema` member and its `SchemaRegistry` row (so `ComponentType` no longer offers `'html'`), and the zod arm from `@object-ui/types/zod`. FROM: exported, and a `type: "html"` node validated against the arm. TO: there is no such export, so importing it fails to compile. `DataDisplaySchema` keeps a refusal arm for the literal, which is not exported, so `objectui validate` refuses a `type: "html"` node BY NAME at `type`, and the message names the remedy.
13+
14+
The `html` FIELD type (`HtmlFieldMetadata`, drawn by `field:html`) is a different layer and stays: its value displays through the sanitised fields path.
15+
16+
Fix for a page that still names it: in place of `{ "type": "html", "html": "…" }`, declare rich text a user edits as an `html` or `richtext` field on the object, whose value renders sanitised, and write authored page copy as a `kind: 'html'` page.
17+
18+
Clause-②: no (narrowing)
19+
Metadata-protocol: narrowed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
/**
2+
* ObjectUI
3+
* Copyright (c) 2024-present ObjectStack Inc.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*
8+
* objectui#13449 — the raw-HTML `html` node type is retired, and neither
9+
* authoring surface can put unsanitised markup into the page any more.
10+
*
11+
* ## The defect
12+
*
13+
* `@object-ui/components` registered `html` (`ui:html` plus the bare key),
14+
* whose renderer wrote the authored `html` string into a `div` through
15+
* `dangerouslySetInnerHTML` with no sanitiser. `@objectstack/spec` declares no
16+
* `html` component. Two doors reached it:
17+
*
18+
* 1. a JSON node `{ "type": "html", "html": "…" }`;
19+
* 2. a `kind:'html'` page — the tier documented as parsed, never executed,
20+
* and safe for untrusted authors. Its compile whitelists every registered
21+
* type, so `<html html="…" />` compiled with NO diagnostic and the
22+
* renderer injected the string. Measured on the base before the fix: an
23+
* `img` carrying an `onerror` attribute reached the DOM through both doors.
24+
*
25+
* ## What each suite holds
26+
*
27+
* 1. the `kind:'html'` page refuses the tag at compile time and renders no
28+
* authored markup (red on the base: zero diagnostics, the `img` with its
29+
* `onerror` attribute in the DOM);
30+
* 2. the JSON node draws the unknown-component panel and no authored markup
31+
* (red on the base: the markup was injected);
32+
* 3. CONTROL — the same page without the retired tag renders its authored
33+
* content, so suite 1's absence is not a page that renders nothing.
34+
*
35+
* It lives in `apps/console` because the claim is about the whole registration
36+
* graph: `@object-ui/fields` registers a `field:html` editor that must not take
37+
* over the bare key once the display renderer is gone.
38+
*/
39+
import { describe, it, expect } from 'vitest';
40+
import { render, waitFor } from '@testing-library/react';
41+
import { SchemaRenderer, SchemaRendererProvider } from '@object-ui/react';
42+
import { ComponentRegistry } from '@object-ui/core';
43+
import { compile, manifestFromConfigs } from '@object-ui/sdui-parser';
44+
45+
// The full registration graph — the pair `dev/manifest-dump.tsx` builds the
46+
// published artifacts from, and the pair every live-path suite here reads.
47+
import '@object-ui/components';
48+
import '../register-plugins';
49+
50+
const dataSource = {
51+
find: async () => ({ data: [], total: 0, hasMore: false }),
52+
findOne: async () => null,
53+
create: async () => ({}),
54+
update: async () => ({}),
55+
delete: async () => ({}),
56+
count: async () => 0,
57+
getObjectSchema: async (name: string) => ({ name, label: name, fields: {} }),
58+
getObjects: async () => [],
59+
onMutation: () => () => {},
60+
} as any;
61+
62+
/**
63+
* The manifest an html-kind page validates against, built the way the renderer
64+
* builds it — `ComponentRegistry.getKnownTypes()` + each type's declared
65+
* `inputs`, mirroring `page.tsx`'s `getJsxManifest()`.
66+
*/
67+
const livePageManifest = () =>
68+
manifestFromConfigs(
69+
ComponentRegistry.getKnownTypes().map((t) => {
70+
const meta = ComponentRegistry.getMeta(t);
71+
return { type: t, namespace: meta?.namespace, isContainer: meta?.isContainer, inputs: meta?.inputs };
72+
}) as unknown as Parameters<typeof manifestFromConfigs>[0],
73+
);
74+
75+
function renderNode(schema: Record<string, unknown>) {
76+
return render(
77+
<SchemaRendererProvider dataSource={dataSource}>
78+
<SchemaRenderer schema={schema as any} />
79+
</SchemaRendererProvider>,
80+
);
81+
}
82+
83+
/** Script-bearing markup, as an author would write it. Never executed here: happy-dom loads no image. */
84+
const PAYLOAD = '<img src="x" data-probe="img13449" onerror="window.__xss13449=1"><b id="p13449">raw</b>';
85+
86+
/** Did any of the authored markup reach the DOM as elements? */
87+
function injected(container: HTMLElement) {
88+
return {
89+
img: container.querySelector('img[data-probe="img13449"]') !== null,
90+
onerror: container.querySelector('[onerror]') !== null,
91+
bold: container.querySelector('#p13449') !== null,
92+
};
93+
}
94+
95+
const NOTHING_INJECTED = { img: false, onerror: false, bold: false };
96+
97+
describe("suite 1 — a `kind:'html'` page cannot write the retired tag (objectui#13449)", () => {
98+
const SOURCE = `<main><html html='${PAYLOAD}' /></main>`;
99+
100+
it('the live compile refuses `<html>` by name', () => {
101+
const diagnostics = compile(SOURCE, livePageManifest()).diagnostics;
102+
const onTag = diagnostics.filter((d) => (d as { tag?: string }).tag === 'html');
103+
expect(onTag.length).toBeGreaterThan(0);
104+
expect(onTag.every((d) => d.severity === 'error')).toBe(true);
105+
});
106+
107+
it('the rendered page carries none of the authored markup', async () => {
108+
const { container } = renderNode({ type: 'page', kind: 'html', name: 'retired_html_page', source: SOURCE });
109+
// The page settles on its compile report; wait until it has drawn anything.
110+
await waitFor(() => expect(container.textContent ?? '').not.toEqual(''));
111+
expect(injected(container)).toEqual(NOTHING_INJECTED);
112+
});
113+
});
114+
115+
describe('suite 2 — a JSON `html` node draws the unknown-component panel (objectui#13449)', () => {
116+
it('neither registry key survives, and the field editor did not take the bare one', () => {
117+
expect(ComponentRegistry.get('html')).toBeFalsy();
118+
expect(ComponentRegistry.get('ui:html')).toBeFalsy();
119+
// Lit control: the FIELD widget of the same name is still registered.
120+
expect(ComponentRegistry.get('field:html')).toBeTruthy();
121+
});
122+
123+
it('the node renders no authored markup', async () => {
124+
const { container } = renderNode({ type: 'html', html: PAYLOAD });
125+
await waitFor(() => expect(container.querySelector('[role="alert"]')).not.toBeNull());
126+
expect(injected(container)).toEqual(NOTHING_INJECTED);
127+
});
128+
});
129+
130+
describe('suite 3 — CONTROL: the same page without the retired tag renders its content', () => {
131+
it('an html-tier `p` reaches the DOM with its text', async () => {
132+
const { container } = renderNode({
133+
type: 'page',
134+
kind: 'html',
135+
name: 'control_page',
136+
source: '<main><p className="ctl13449">control text</p></main>',
137+
});
138+
await waitFor(() => expect(container.querySelector('p.ctl13449')?.textContent).toBe('control text'));
139+
});
140+
});

‎apps/console/src/__tests__/html-tier-manifest.test.ts‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,12 @@ describe('the curated tier is unmoved — the JSON-surface vocabulary did not gr
202202
expect(curated).toEqual(PUBLIC_BLOCKS.filter((tag) => tag in published.components));
203203
// Anti-vacuity: the curated tier resolved, and to the vocabulary it is.
204204
expect(curated.length).toBeGreaterThan(50);
205-
expect(curated).toEqual(expect.arrayContaining(['object-grid', 'box', 'html']));
205+
expect(curated).toEqual(expect.arrayContaining(['object-grid', 'box', 'text']));
206+
// The raw-HTML `html` block left the curated tier with its node type
207+
// (objectui#13449). Read off the manifest the published artifact is built
208+
// from, not off the roster, so a stray registration would show up here.
209+
expect(curated).not.toContain('html');
210+
expect('html' in published.components).toBe(false);
206211
});
207212

208213
it('the stamped entries are exactly the roster, in roster order, and nothing else', () => {

‎apps/console/src/__tests__/public-contract.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ const EXPECTED_COVERED = [
112112
'badge',
113113
'alert',
114114
'button',
115-
'html',
115+
// `html` left with the raw-HTML node type it named (objectui#13449).
116116
];
117117

118118
/**

‎content/docs/components/basic/html.mdx‎

Lines changed: 0 additions & 17 deletions
This file was deleted.

‎content/docs/components/basic/meta.json‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
"icon",
66
"image",
77
"separator",
8-
"html",
98
"button-group",
109
"pagination",
1110
"navigation-menu",

‎content/docs/components/index.md‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ The foundation of your UI. These are simple, single-purpose components:
4545
- **[Icon](/docs/components/basic/icon)** - Render icons from Lucide React
4646
- **[Image](/docs/components/basic/image)** - Display images with lazy loading
4747
- **[Separator](/docs/components/basic/separator)** - Visual divider between content
48-
- **[HTML](/docs/components/basic/html)** - Render raw HTML content
4948

5049
### Form Components
5150

‎content/docs/guide/react-pages.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,12 @@ look uniform — `<record:related-list>` is not registered, only
350350
The plain wrapper on this tier is `<box>`. `<div>` is deprecated here as it is in
351351
JSON, and the page is refused at compile time with an error that names `box`.
352352
353+
There is no raw-HTML block on this tier, or on any other. The `html` node type,
354+
which wrote an authored HTML string into the page unsanitised, is retired, so an
355+
`<html>` tag is refused at compile time as an unknown component. Rich text a user
356+
edits belongs in an `html` or `richtext` field, whose value renders through the
357+
sanitised fields path.
358+
353359
Use it for anything author- or AI-generated. Expressions are limited to what the
354360
schema supports (`${data.x}`), and there is no local state or event handling
355361
beyond the action system.

‎examples/schema-catalog/src/index.ts‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import components_basic_div_grid_layout from './schemas/components-basic-div/gri
3939
import components_basic_div_nested_divs from './schemas/components-basic-div/nested-divs.json' with { type: 'json' };
4040
import components_basic_div_use_box_instead from './schemas/components-basic-div/use-box-instead.json' with { type: 'json' };
4141
import components_basic_div_use_card_instead from './schemas/components-basic-div/use-card-instead.json' with { type: 'json' };
42-
import components_basic_html_basic_html from './schemas/components-basic-html/basic-html.json' with { type: 'json' };
4342
import components_basic_icon_basic_icon from './schemas/components-basic-icon/basic-icon.json' with { type: 'json' };
4443
import components_basic_icon_colored_icons from './schemas/components-basic-icon/colored-icons.json' with { type: 'json' };
4544
import components_basic_icon_icon_sizes from './schemas/components-basic-icon/icon-sizes.json' with { type: 'json' };
@@ -704,15 +703,6 @@ const REGISTRY: Record<string, Example> = {
704703
},
705704
schema: components_basic_div_use_card_instead,
706705
},
707-
'components-basic-html/basic-html': {
708-
id: 'components-basic-html/basic-html',
709-
meta: {
710-
title: "Basic Html",
711-
description: "",
712-
category: 'components-basic-html',
713-
},
714-
schema: components_basic_html_basic_html,
715-
},
716706
'components-basic-icon/basic-icon': {
717707
id: 'components-basic-icon/basic-icon',
718708
meta: {

‎examples/schema-catalog/src/schemas/components-basic-html/basic-html.json‎

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)