@tmorrow/cre8-wc 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,109 @@
1
+ import { validateSpec } from './registry.js';
2
+ export function render(spec, catalog, options = {}) {
3
+ validateSpec(spec, catalog);
4
+ const doc = options.doc ?? document;
5
+ const el = buildElement(spec, catalog, doc, '$', options.onEvent);
6
+ if (options.root)
7
+ options.root.replaceChildren(el);
8
+ return el;
9
+ }
10
+ function buildElement(spec, catalog, doc, path, onEvent) {
11
+ const def = catalog.components.get(spec.component);
12
+ const propDefs = def.properties?.props?.properties ?? {};
13
+ const el = doc.createElement(spec.component);
14
+ if (spec.props) {
15
+ for (const [key, value] of Object.entries(spec.props)) {
16
+ applyProp(el, key, value, propDefs[key]);
17
+ }
18
+ }
19
+ if (spec.events && onEvent) {
20
+ for (const [evtName, binding] of Object.entries(spec.events)) {
21
+ attachEvent(el, spec.component, path, evtName, binding, onEvent);
22
+ }
23
+ }
24
+ if (spec.children) {
25
+ spec.children.forEach((child, i) => {
26
+ if (typeof child === 'string') {
27
+ el.appendChild(doc.createTextNode(child));
28
+ return;
29
+ }
30
+ el.appendChild(buildElement(child, catalog, doc, `${path}.children[${i}]`, onEvent));
31
+ });
32
+ }
33
+ if (spec.slots) {
34
+ for (const [slotName, children] of Object.entries(spec.slots)) {
35
+ children.forEach((child, i) => {
36
+ if (typeof child === 'string') {
37
+ if (slotName === 'default') {
38
+ el.appendChild(doc.createTextNode(child));
39
+ }
40
+ else {
41
+ const wrap = doc.createElement('span');
42
+ wrap.setAttribute('slot', slotName);
43
+ wrap.textContent = child;
44
+ el.appendChild(wrap);
45
+ }
46
+ return;
47
+ }
48
+ const childEl = buildElement(child, catalog, doc, `${path}.slots.${slotName}[${i}]`, onEvent);
49
+ if (slotName !== 'default')
50
+ childEl.setAttribute('slot', slotName);
51
+ el.appendChild(childEl);
52
+ });
53
+ }
54
+ }
55
+ return el;
56
+ }
57
+ function attachEvent(el, component, path, eventName, binding, onEvent) {
58
+ const handler = typeof binding === 'string' ? binding : binding.handler;
59
+ const stop = typeof binding === 'object' && binding.stopPropagation === true;
60
+ const prevent = typeof binding === 'object' && binding.preventDefault === true;
61
+ el.addEventListener(eventName, (nativeEvent) => {
62
+ if (stop)
63
+ nativeEvent.stopPropagation();
64
+ if (prevent)
65
+ nativeEvent.preventDefault();
66
+ const detail = 'detail' in nativeEvent
67
+ ? nativeEvent.detail
68
+ : undefined;
69
+ onEvent({
70
+ component,
71
+ path,
72
+ event: eventName,
73
+ handler,
74
+ detail,
75
+ nativeEvent,
76
+ });
77
+ });
78
+ }
79
+ function applyProp(el, key, value, schema) {
80
+ if (value === undefined || value === null)
81
+ return;
82
+ if (schema?.['x-kind'] === 'property') {
83
+ el[key] = value;
84
+ return;
85
+ }
86
+ if (typeof value === 'boolean') {
87
+ if (value)
88
+ el.setAttribute(key, '');
89
+ else
90
+ el.removeAttribute(key);
91
+ return;
92
+ }
93
+ if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
94
+ el[key] = value;
95
+ return;
96
+ }
97
+ if (schema && isComplexSchema(schema)) {
98
+ el[key] = value;
99
+ return;
100
+ }
101
+ el.setAttribute(key, String(value));
102
+ }
103
+ function isComplexSchema(schema) {
104
+ const t = schema.type;
105
+ if (Array.isArray(t))
106
+ return t.some((x) => x === 'object' || x === 'array');
107
+ return t === 'object' || t === 'array';
108
+ }
109
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../a2ui/renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ComponentSpec,\n EmittedEvent,\n EventBinding,\n PropSchema,\n RegisteredCatalog,\n} from './types.js';\nimport { validateSpec } from './registry.js';\n\nexport interface RenderOptions {\n root?: HTMLElement;\n doc?: Document;\n onEvent?: (evt: EmittedEvent) => void;\n}\n\nexport function render(\n spec: ComponentSpec,\n catalog: RegisteredCatalog,\n options: RenderOptions = {}\n): HTMLElement {\n validateSpec(spec, catalog);\n const doc = options.doc ?? document;\n const el = buildElement(spec, catalog, doc, '$', options.onEvent);\n if (options.root) options.root.replaceChildren(el);\n return el;\n}\n\nfunction buildElement(\n spec: ComponentSpec,\n catalog: RegisteredCatalog,\n doc: Document,\n path: string,\n onEvent?: (evt: EmittedEvent) => void\n): HTMLElement {\n const def = catalog.components.get(spec.component)!;\n const propDefs = def.properties?.props?.properties ?? {};\n const el = doc.createElement(spec.component);\n\n if (spec.props) {\n for (const [key, value] of Object.entries(spec.props)) {\n applyProp(el, key, value, propDefs[key]);\n }\n }\n\n if (spec.events && onEvent) {\n for (const [evtName, binding] of Object.entries(spec.events)) {\n attachEvent(el, spec.component, path, evtName, binding, onEvent);\n }\n }\n\n if (spec.children) {\n spec.children.forEach((child, i) => {\n if (typeof child === 'string') {\n el.appendChild(doc.createTextNode(child));\n return;\n }\n el.appendChild(buildElement(child, catalog, doc, `${path}.children[${i}]`, onEvent));\n });\n }\n\n if (spec.slots) {\n for (const [slotName, children] of Object.entries(spec.slots)) {\n children.forEach((child, i) => {\n if (typeof child === 'string') {\n if (slotName === 'default') {\n el.appendChild(doc.createTextNode(child));\n } else {\n const wrap = doc.createElement('span');\n wrap.setAttribute('slot', slotName);\n wrap.textContent = child;\n el.appendChild(wrap);\n }\n return;\n }\n const childEl = buildElement(\n child,\n catalog,\n doc,\n `${path}.slots.${slotName}[${i}]`,\n onEvent\n );\n if (slotName !== 'default') childEl.setAttribute('slot', slotName);\n el.appendChild(childEl);\n });\n }\n }\n\n return el;\n}\n\nfunction attachEvent(\n el: HTMLElement,\n component: string,\n path: string,\n eventName: string,\n binding: EventBinding,\n onEvent: (evt: EmittedEvent) => void\n): void {\n const handler = typeof binding === 'string' ? binding : binding.handler;\n const stop = typeof binding === 'object' && binding.stopPropagation === true;\n const prevent = typeof binding === 'object' && binding.preventDefault === true;\n\n el.addEventListener(eventName, (nativeEvent) => {\n if (stop) nativeEvent.stopPropagation();\n if (prevent) nativeEvent.preventDefault();\n const detail = 'detail' in nativeEvent\n ? (nativeEvent as CustomEvent).detail\n : undefined;\n onEvent({\n component,\n path,\n event: eventName,\n handler,\n detail,\n nativeEvent,\n });\n });\n}\n\nfunction applyProp(\n el: HTMLElement,\n key: string,\n value: unknown,\n schema: PropSchema | undefined\n): void {\n if (value === undefined || value === null) return;\n\n if (schema?.['x-kind'] === 'property') {\n (el as unknown as Record<string, unknown>)[key] = value;\n return;\n }\n\n if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n return;\n }\n\n if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {\n (el as unknown as Record<string, unknown>)[key] = value;\n return;\n }\n\n if (schema && isComplexSchema(schema)) {\n (el as unknown as Record<string, unknown>)[key] = value;\n return;\n }\n\n el.setAttribute(key, String(value));\n}\n\nfunction isComplexSchema(schema: PropSchema): boolean {\n const t = schema.type;\n if (Array.isArray(t)) return t.some((x) => x === 'object' || x === 'array');\n return t === 'object' || t === 'array';\n}\n"]}
@@ -0,0 +1,76 @@
1
+ export type SpecChild = ComponentSpec | string;
2
+ export interface ComponentSpec {
3
+ component: string;
4
+ props?: Record<string, unknown>;
5
+ children?: SpecChild[];
6
+ slots?: Record<string, SpecChild[]>;
7
+ events?: Record<string, EventBinding>;
8
+ }
9
+ export type EventBinding = string | {
10
+ handler: string;
11
+ stopPropagation?: boolean;
12
+ preventDefault?: boolean;
13
+ };
14
+ export interface EmittedEvent {
15
+ component: string;
16
+ path: string;
17
+ event: string;
18
+ handler: string;
19
+ detail: unknown;
20
+ nativeEvent: Event;
21
+ }
22
+ export interface CatalogSchema {
23
+ $id?: string;
24
+ $defs?: {
25
+ components?: Record<string, CatalogComponentDef>;
26
+ };
27
+ 'x-a2ui'?: {
28
+ catalogId?: string;
29
+ library?: string;
30
+ libraryVersion?: string;
31
+ tagPrefix?: string;
32
+ framework?: string;
33
+ };
34
+ [key: string]: unknown;
35
+ }
36
+ export interface CatalogComponentDef {
37
+ title?: string;
38
+ description?: string;
39
+ 'x-category'?: string;
40
+ 'x-slot-descriptions'?: Record<string, string>;
41
+ 'x-events'?: Record<string, {
42
+ detail?: unknown;
43
+ }>;
44
+ properties?: {
45
+ component?: {
46
+ const?: string;
47
+ };
48
+ props?: {
49
+ properties?: Record<string, PropSchema>;
50
+ };
51
+ children?: unknown;
52
+ slots?: {
53
+ properties?: Record<string, unknown>;
54
+ };
55
+ };
56
+ }
57
+ export interface PropSchema {
58
+ type?: string | string[];
59
+ enum?: string[];
60
+ const?: unknown;
61
+ default?: unknown;
62
+ description?: string;
63
+ items?: PropSchema;
64
+ properties?: Record<string, PropSchema>;
65
+ required?: string[];
66
+ additionalProperties?: boolean;
67
+ oneOf?: PropSchema[];
68
+ 'x-tsType'?: string;
69
+ 'x-kind'?: 'attribute' | 'property';
70
+ }
71
+ export interface RegisteredCatalog {
72
+ id: string;
73
+ schema: CatalogSchema;
74
+ components: Map<string, CatalogComponentDef>;
75
+ }
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../a2ui/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../a2ui/types.ts"],"names":[],"mappings":"","sourcesContent":["export type SpecChild = ComponentSpec | string;\n\nexport interface ComponentSpec {\n component: string;\n props?: Record<string, unknown>;\n children?: SpecChild[];\n slots?: Record<string, SpecChild[]>;\n events?: Record<string, EventBinding>;\n}\n\nexport type EventBinding =\n | string\n | {\n handler: string;\n stopPropagation?: boolean;\n preventDefault?: boolean;\n };\n\nexport interface EmittedEvent {\n component: string;\n path: string;\n event: string;\n handler: string;\n detail: unknown;\n nativeEvent: Event;\n}\n\nexport interface CatalogSchema {\n $id?: string;\n $defs?: {\n components?: Record<string, CatalogComponentDef>;\n };\n 'x-a2ui'?: {\n catalogId?: string;\n library?: string;\n libraryVersion?: string;\n tagPrefix?: string;\n framework?: string;\n };\n [key: string]: unknown;\n}\n\nexport interface CatalogComponentDef {\n title?: string;\n description?: string;\n 'x-category'?: string;\n 'x-slot-descriptions'?: Record<string, string>;\n 'x-events'?: Record<string, { detail?: unknown }>;\n properties?: {\n component?: { const?: string };\n props?: {\n properties?: Record<string, PropSchema>;\n };\n children?: unknown;\n slots?: {\n properties?: Record<string, unknown>;\n };\n };\n}\n\nexport interface PropSchema {\n type?: string | string[];\n enum?: string[];\n const?: unknown;\n default?: unknown;\n description?: string;\n items?: PropSchema;\n properties?: Record<string, PropSchema>;\n required?: string[];\n additionalProperties?: boolean;\n oneOf?: PropSchema[];\n 'x-tsType'?: string;\n 'x-kind'?: 'attribute' | 'property';\n}\n\nexport interface RegisteredCatalog {\n id: string;\n schema: CatalogSchema;\n components: Map<string, CatalogComponentDef>;\n}\n"]}
package/mcp-manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.0.3",
2
+ "version": "2.0.4",
3
3
  "library": "@tmorrow/cre8-wc",
4
4
  "tagPrefix": "cre8",
5
5
  "description": "cre8 Web Components is a library of presentational UI web components to be consumed by # web applications.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tmorrow/cre8-wc",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "cre8 Web Components is a library of presentational UI web components to be consumed by # web applications.",
5
5
  "license": "BSD-3-Clause",
6
6
  "scripts": {
@@ -10,6 +10,10 @@
10
10
  "build:mcp-manifest": "npx web-component-analyzer analyze \"components/*/*.ts\" --format json --outFile /tmp/wca-raw.json && npx tsx scripts/generate-mcp-manifest.ts",
11
11
  "build:cdn": "rm -rf cdn && vite build --config vite.config.cdn.ts",
12
12
  "build:react": "rm -rf react-wrappers/components react-wrappers/dist react-wrappers/index.ts && npx tsx scripts/generate-react-wrappers.ts && cd react-wrappers && npx tsc",
13
+ "build:a2ui": "pnpm run build:a2ui:catalog && pnpm run build:a2ui:compile",
14
+ "build:a2ui:catalog": "node a2ui/generate-catalog.mjs",
15
+ "build:a2ui:compile": "tsc --module esnext --moduleResolution bundler --target es2022 --lib es2022,dom,dom.iterable --strict --skipLibCheck --declaration --outDir a2ui a2ui/types.ts a2ui/registry.ts a2ui/renderer.ts a2ui/index.ts",
16
+ "a2ui:demo": "python3 -m http.server 8765",
13
17
  "storybook:react": "pnpm run build:react && cd react-wrappers && npx storybook dev -p 9009",
14
18
  "build-storybook:react": "pnpm run build:react && cd react-wrappers && npx storybook build -o dist-storybook",
15
19
  "build:all": "pnpm run build:cdn && pnpm run build",
@@ -44,6 +48,7 @@
44
48
  "dist",
45
49
  "lib",
46
50
  "cdn",
51
+ "a2ui",
47
52
  "mcp-manifest.json"
48
53
  ],
49
54
  "exports": {
@@ -74,6 +79,15 @@
74
79
  },
75
80
  "./global.d.ts": "./global.d.ts",
76
81
  "./mcp-manifest.json": "./mcp-manifest.json",
82
+ "./a2ui": {
83
+ "import": "./a2ui/index.js",
84
+ "types": "./a2ui/index.d.ts"
85
+ },
86
+ "./a2ui/catalog.json": "./a2ui/catalog.json",
87
+ "./a2ui/*": {
88
+ "import": "./a2ui/*",
89
+ "types": "./a2ui/*"
90
+ },
77
91
  "./package.json": "./package.json"
78
92
  },
79
93
  "repository": {