@watt42/a2ui-component-catalog 0.1.0

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.
Files changed (43) hide show
  1. package/README.md +33 -0
  2. package/catalog.json +817 -0
  3. package/dist/catalogCompatibility.d.ts +8 -0
  4. package/dist/catalogCompatibility.d.ts.map +1 -0
  5. package/dist/catalogCompatibility.js +24 -0
  6. package/dist/catalogCompatibility.js.map +1 -0
  7. package/dist/catalogTypes.d.ts +35 -0
  8. package/dist/catalogTypes.d.ts.map +1 -0
  9. package/dist/catalogTypes.js +4 -0
  10. package/dist/catalogTypes.js.map +1 -0
  11. package/dist/contract/index.d.ts +3 -0
  12. package/dist/contract/index.d.ts.map +1 -0
  13. package/dist/contract/index.js +2 -0
  14. package/dist/contract/index.js.map +1 -0
  15. package/dist/contract/sharedSchemas.d.ts +6 -0
  16. package/dist/contract/sharedSchemas.d.ts.map +1 -0
  17. package/dist/contract/sharedSchemas.js +38 -0
  18. package/dist/contract/sharedSchemas.js.map +1 -0
  19. package/dist/contract/types.d.ts +57 -0
  20. package/dist/contract/types.d.ts.map +1 -0
  21. package/dist/contract/types.js +3 -0
  22. package/dist/contract/types.js.map +1 -0
  23. package/dist/contract/validateManifest.d.ts +5 -0
  24. package/dist/contract/validateManifest.d.ts.map +1 -0
  25. package/dist/contract/validateManifest.js +107 -0
  26. package/dist/contract/validateManifest.js.map +1 -0
  27. package/dist/generateCatalog.d.ts +9 -0
  28. package/dist/generateCatalog.d.ts.map +1 -0
  29. package/dist/generateCatalog.js +76 -0
  30. package/dist/generateCatalog.js.map +1 -0
  31. package/dist/index.d.ts +14 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +27 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/validate.d.ts +3 -0
  36. package/dist/validate.d.ts.map +1 -0
  37. package/dist/validate.js +17 -0
  38. package/dist/validate.js.map +1 -0
  39. package/dist/validateProps.d.ts +3 -0
  40. package/dist/validateProps.d.ts.map +1 -0
  41. package/dist/validateProps.js +101 -0
  42. package/dist/validateProps.js.map +1 -0
  43. package/package.json +33 -0
@@ -0,0 +1,8 @@
1
+ export declare function expectedCatalogIdentity(): {
2
+ catalogId: string;
3
+ catalogVersion: string;
4
+ uiVersion: string;
5
+ };
6
+ /** Return an error message when createSurface identity does not match the canonical catalog. */
7
+ export declare function catalogCompatibilityError(catalogId: string | undefined, catalogVersion?: string): string | undefined;
8
+ //# sourceMappingURL=catalogCompatibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogCompatibility.d.ts","sourceRoot":"","sources":["../src/catalogCompatibility.ts"],"names":[],"mappings":"AAMA,wBAAgB,uBAAuB,IAAI;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAMA;AAED,gGAAgG;AAChG,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,GAAG,SAAS,CAYpB"}
@@ -0,0 +1,24 @@
1
+ import catalogData from "../catalog.json" with { type: "json" };
2
+ const catalog = catalogData;
3
+ export function expectedCatalogIdentity() {
4
+ return {
5
+ catalogId: catalog.catalogId,
6
+ catalogVersion: catalog.catalogVersion,
7
+ uiVersion: catalog.uiVersion,
8
+ };
9
+ }
10
+ /** Return an error message when createSurface identity does not match the canonical catalog. */
11
+ export function catalogCompatibilityError(catalogId, catalogVersion) {
12
+ const expected = expectedCatalogIdentity();
13
+ if (!catalogId) {
14
+ return `createSurface missing catalogId (expected ${expected.catalogId})`;
15
+ }
16
+ if (catalogId !== expected.catalogId) {
17
+ return `Incompatible catalogId "${catalogId}". Renderer expects ${expected.catalogId} (${expected.catalogVersion}).`;
18
+ }
19
+ if (catalogVersion && catalogVersion !== expected.catalogVersion) {
20
+ return `Incompatible catalogVersion "${catalogVersion}". Renderer expects ${expected.catalogVersion}.`;
21
+ }
22
+ return undefined;
23
+ }
24
+ //# sourceMappingURL=catalogCompatibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogCompatibility.js","sourceRoot":"","sources":["../src/catalogCompatibility.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAIhE,MAAM,OAAO,GAAG,WAA0C,CAAC;AAE3D,MAAM,UAAU,uBAAuB;IAKrC,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,yBAAyB,CACvC,SAA6B,EAC7B,cAAuB;IAEvB,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,6CAA6C,QAAQ,CAAC,SAAS,GAAG,CAAC;IAC5E,CAAC;IACD,IAAI,SAAS,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,2BAA2B,SAAS,uBAAuB,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,cAAc,IAAI,CAAC;IACvH,CAAC;IACD,IAAI,cAAc,IAAI,cAAc,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;QACjE,OAAO,gCAAgC,cAAc,uBAAuB,QAAQ,CAAC,cAAc,GAAG,CAAC;IACzG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { EventContract, ImplementationProvenance, PropertyDefinition } from "./contract/types.js";
2
+ export type RendererId = "official" | "surface";
3
+ export type AllowedChildren = "none" | "any" | string[];
4
+ /** Runtime catalog component — generated from `*.manifest.json`. */
5
+ export interface ComponentDefinition {
6
+ name: string;
7
+ description: string;
8
+ version: string;
9
+ implementation: ImplementationProvenance;
10
+ props: Record<string, PropertyDefinition>;
11
+ allowedChildren: AllowedChildren;
12
+ supportedBy: RendererId[];
13
+ actions: Record<string, PropertyDefinition>;
14
+ events: EventContract[];
15
+ dataBindings: Record<string, PropertyDefinition>;
16
+ /** LLM-only authoring hints; included in generated catalog.json for lookup delivery. */
17
+ llmGuidance?: string[];
18
+ /** Prop names that hold nested component specs in UIIntent (e.g. slides). */
19
+ nestedSpecProps?: string[];
20
+ /** Default nested child component types to include in request-scoped lookup. */
21
+ defaultNestedTypes?: string[];
22
+ }
23
+ export interface ComponentCatalog {
24
+ catalogId: string;
25
+ catalogVersion: string;
26
+ uiVersion: string;
27
+ generated?: {
28
+ source: string;
29
+ command: string;
30
+ };
31
+ components: ComponentDefinition[];
32
+ screenTypes: string[];
33
+ }
34
+ export declare function propertyKeys(definition: ComponentDefinition): string[];
35
+ //# sourceMappingURL=catalogTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogTypes.d.ts","sourceRoot":"","sources":["../src/catalogTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,wBAAwB,EACxB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC;AAExD,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,wBAAwB,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACjD,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAEtE"}
@@ -0,0 +1,4 @@
1
+ export function propertyKeys(definition) {
2
+ return Object.keys(definition.props);
3
+ }
4
+ //# sourceMappingURL=catalogTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogTypes.js","sourceRoot":"","sources":["../src/catalogTypes.ts"],"names":[],"mappings":"AA0CA,MAAM,UAAU,YAAY,CAAC,UAA+B;IAC1D,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { A2UIComponentContract, ActionContract, BindingContract, BindingMode, ContractPropType, EventContract, ImplementationProvenance, ImplementationSource, PropertyDefinition, ShadcnBase, } from "./types.js";
2
+ export { ACTION_PROPERTY, BINDING_PROPERTY } from "./sharedSchemas.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ACTION_PROPERTY, BINDING_PROPERTY } from "./sharedSchemas.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PropertyDefinition } from "./types.js";
2
+ /** Shared property schema for `props.action` (ADR 0002). */
3
+ export declare const ACTION_PROPERTY: PropertyDefinition;
4
+ /** Shared property schema for bound `value` (and similar) paths. */
5
+ export declare const BINDING_PROPERTY: PropertyDefinition;
6
+ //# sourceMappingURL=sharedSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharedSchemas.d.ts","sourceRoot":"","sources":["../../src/contract/sharedSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,4DAA4D;AAC5D,eAAO,MAAM,eAAe,EAAE,kBAiB7B,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,EAAE,kBAiB9B,CAAC"}
@@ -0,0 +1,38 @@
1
+ /** Shared property schema for `props.action` (ADR 0002). */
2
+ export const ACTION_PROPERTY = {
3
+ type: "object",
4
+ required: false,
5
+ description: "Action emitted when the user activates the control. Maps to UserActionHandler(name, context).",
6
+ properties: {
7
+ name: {
8
+ type: "string",
9
+ required: true,
10
+ description: "Event name delivered to the application.",
11
+ },
12
+ context: {
13
+ type: "object",
14
+ required: false,
15
+ description: "Optional payload merged into the handler context.",
16
+ },
17
+ },
18
+ };
19
+ /** Shared property schema for bound `value` (and similar) paths. */
20
+ export const BINDING_PROPERTY = {
21
+ type: "object",
22
+ required: false,
23
+ description: "Data-model path binding (not a literal display value).",
24
+ properties: {
25
+ path: {
26
+ type: "string",
27
+ required: true,
28
+ description: "Data-model path, e.g. /form/email.",
29
+ },
30
+ mode: {
31
+ type: "string",
32
+ required: false,
33
+ default: "readWrite",
34
+ enum: ["read", "write", "readWrite"],
35
+ },
36
+ },
37
+ };
38
+ //# sourceMappingURL=sharedSchemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharedSchemas.js","sourceRoot":"","sources":["../../src/contract/sharedSchemas.ts"],"names":[],"mappings":"AAEA,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,KAAK;IACf,WAAW,EACT,+FAA+F;IACjG,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,0CAA0C;SACxD;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,mDAAmD;SACjE;KACF;CACF,CAAC;AAEF,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAuB;IAClD,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,wDAAwD;IACrE,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,oCAAoC;SAClD;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;SACrC;KACF;CACF,CAAC"}
@@ -0,0 +1,57 @@
1
+ /** Machine-readable A2UI component contract (manifest authoring). Phase 6.5.5a. */
2
+ export type ContractPropType = "string" | "number" | "boolean" | "array" | "object";
3
+ export type BindingMode = "read" | "write" | "readWrite";
4
+ export type ImplementationSource = "shadcn" | "echarts" | "a2ui";
5
+ export type ShadcnBase = "base" | "radix" | "aria";
6
+ export interface ActionContract {
7
+ /** Event name delivered to UserActionHandler. */
8
+ name: string;
9
+ /** Optional payload merged into handler context. */
10
+ context?: Record<string, unknown>;
11
+ }
12
+ export interface BindingContract {
13
+ path: string;
14
+ mode?: BindingMode;
15
+ }
16
+ export interface EventContract {
17
+ name: string;
18
+ description?: string;
19
+ }
20
+ export interface ImplementationProvenance {
21
+ source: ImplementationSource;
22
+ /** Required when source is shadcn. A2UI catalog components use "base" (ADR 0001). */
23
+ base?: ShadcnBase;
24
+ /** Underlying library version (shadcn CLI or ECharts engine). */
25
+ sourceVersion: string;
26
+ /** ChartSpec (or other A2UI spec) version — independent of sourceVersion and A2UI `version`. */
27
+ specVersion?: string;
28
+ }
29
+ export interface PropertyDefinition {
30
+ type: ContractPropType;
31
+ required?: boolean;
32
+ default?: unknown;
33
+ enum?: unknown[];
34
+ description?: string;
35
+ items?: PropertyDefinition;
36
+ properties?: Record<string, PropertyDefinition>;
37
+ }
38
+ export type AllowedChildren = "none" | "any" | string[];
39
+ export interface A2UIComponentContract {
40
+ name: string;
41
+ description: string;
42
+ version: string;
43
+ implementation: ImplementationProvenance;
44
+ props: Record<string, PropertyDefinition>;
45
+ allowedChildren: AllowedChildren;
46
+ supportedBy: Array<"surface">;
47
+ actions: Record<string, PropertyDefinition>;
48
+ events: EventContract[];
49
+ dataBindings: Record<string, PropertyDefinition>;
50
+ /** LLM-only authoring hints; included in generated catalog.json for lookup delivery. */
51
+ llmGuidance?: string[];
52
+ /** Prop names that hold nested component specs in UIIntent (e.g. slides). */
53
+ nestedSpecProps?: string[];
54
+ /** Default nested child component types to include in request-scoped lookup. */
55
+ defaultNestedTypes?: string[];
56
+ }
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contract/types.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,qFAAqF;IACrF,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,wBAAwB,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACjD,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B"}
@@ -0,0 +1,3 @@
1
+ /** Machine-readable A2UI component contract (manifest authoring). Phase 6.5.5a. */
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/contract/types.ts"],"names":[],"mappings":"AAAA,mFAAmF"}
@@ -0,0 +1,5 @@
1
+ import type { A2UIComponentContract } from "./types.js";
2
+ /** Validate a per-component manifest before catalog generation (6.5.5c). */
3
+ export declare function validateManifest(contract: A2UIComponentContract): string[];
4
+ export declare function validateManifests(contracts: A2UIComponentContract[]): string[];
5
+ //# sourceMappingURL=validateManifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateManifest.d.ts","sourceRoot":"","sources":["../../src/contract/validateManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAsB,MAAM,YAAY,CAAC;AAgC5E,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,EAAE,CA0D1E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,MAAM,EAAE,CAuB9E"}
@@ -0,0 +1,107 @@
1
+ const PROP_TYPES = new Set(["string", "number", "boolean", "array", "object"]);
2
+ function validateProperty(path, prop, errors) {
3
+ if (!prop || typeof prop !== "object") {
4
+ errors.push(`${path}: property definition is required`);
5
+ return;
6
+ }
7
+ if (!PROP_TYPES.has(prop.type)) {
8
+ errors.push(`${path}: invalid type '${String(prop.type)}'`);
9
+ }
10
+ if (prop.enum && !Array.isArray(prop.enum)) {
11
+ errors.push(`${path}: enum must be an array`);
12
+ }
13
+ if (prop.enum && prop.default !== undefined && !prop.enum.includes(prop.default)) {
14
+ errors.push(`${path}: default is not in enum`);
15
+ }
16
+ if (prop.type === "array" && prop.items) {
17
+ validateProperty(`${path}.items`, prop.items, errors);
18
+ }
19
+ if (prop.type === "object" && prop.properties) {
20
+ for (const [key, nested] of Object.entries(prop.properties)) {
21
+ validateProperty(`${path}.${key}`, nested, errors);
22
+ }
23
+ }
24
+ }
25
+ /** Validate a per-component manifest before catalog generation (6.5.5c). */
26
+ export function validateManifest(contract) {
27
+ const errors = [];
28
+ if (!contract.name)
29
+ errors.push("name is required");
30
+ if (!contract.description)
31
+ errors.push("description is required");
32
+ if (!contract.version)
33
+ errors.push("version is required");
34
+ if (!contract.implementation?.source) {
35
+ errors.push("implementation.source is required");
36
+ }
37
+ if (!contract.implementation?.sourceVersion) {
38
+ errors.push("implementation.sourceVersion is required");
39
+ }
40
+ if (contract.implementation?.source === "shadcn" &&
41
+ !contract.implementation.base) {
42
+ errors.push("implementation.base is required when source is shadcn");
43
+ }
44
+ if (contract.implementation?.source === "echarts" &&
45
+ !contract.implementation.specVersion) {
46
+ errors.push("implementation.specVersion is required when source is echarts");
47
+ }
48
+ if (!contract.supportedBy?.length) {
49
+ errors.push("supportedBy must not be empty");
50
+ }
51
+ if (!contract.props || typeof contract.props !== "object") {
52
+ errors.push("props must be an object");
53
+ }
54
+ else {
55
+ const keys = Object.keys(contract.props);
56
+ if (new Set(keys).size !== keys.length) {
57
+ errors.push("props has duplicate keys");
58
+ }
59
+ for (const [key, prop] of Object.entries(contract.props)) {
60
+ validateProperty(`props.${key}`, prop, errors);
61
+ }
62
+ }
63
+ if (contract.allowedChildren === undefined) {
64
+ errors.push("allowedChildren is required");
65
+ }
66
+ if (!contract.actions || typeof contract.actions !== "object") {
67
+ errors.push("actions must be an object (use {} if none)");
68
+ }
69
+ else {
70
+ for (const [key, prop] of Object.entries(contract.actions)) {
71
+ validateProperty(`actions.${key}`, prop, errors);
72
+ }
73
+ }
74
+ if (!Array.isArray(contract.events)) {
75
+ errors.push("events must be an array (use [] if none)");
76
+ }
77
+ if (!contract.dataBindings || typeof contract.dataBindings !== "object") {
78
+ errors.push("dataBindings must be an object (use {} if none)");
79
+ }
80
+ else {
81
+ for (const [key, prop] of Object.entries(contract.dataBindings)) {
82
+ validateProperty(`dataBindings.${key}`, prop, errors);
83
+ }
84
+ }
85
+ return errors;
86
+ }
87
+ export function validateManifests(contracts) {
88
+ const errors = [];
89
+ const names = contracts.map((c) => c.name);
90
+ const unique = new Set(names);
91
+ if (unique.size !== names.length) {
92
+ errors.push("component names must be unique");
93
+ }
94
+ const nameSet = new Set(names);
95
+ for (const contract of contracts) {
96
+ errors.push(...validateManifest(contract).map((e) => `${contract.name}: ${e}`));
97
+ if (Array.isArray(contract.allowedChildren)) {
98
+ for (const child of contract.allowedChildren) {
99
+ if (!nameSet.has(child)) {
100
+ errors.push(`${contract.name}: allowedChildren references unknown '${child}'`);
101
+ }
102
+ }
103
+ }
104
+ }
105
+ return errors;
106
+ }
107
+ //# sourceMappingURL=validateManifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateManifest.js","sourceRoot":"","sources":["../../src/contract/validateManifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { A2UIComponentContract } from "./contract/types.js";
2
+ import type { ComponentCatalog } from "./catalogTypes.js";
3
+ export declare const GENERATED_CATALOG_ID = "watt42:a2ui:catalog:manifest:v1";
4
+ export declare const GENERATED_CATALOG_VERSION = "manifest/2026.08.24.2";
5
+ export declare const GENERATED_UI_VERSION = "v0.9.1";
6
+ export declare function catalogFromManifests(manifests: A2UIComponentContract[]): ComponentCatalog;
7
+ export declare function loadManifestsFromDir(dir: string): A2UIComponentContract[];
8
+ export declare function writeGeneratedCatalog(catalogDir: string, pythonCopyPath: string): ComponentCatalog;
9
+ //# sourceMappingURL=generateCatalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateCatalog.d.ts","sourceRoot":"","sources":["../src/generateCatalog.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,oBAAoB,oCAAoC,CAAC;AACtE,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AACjE,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAY7C,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,qBAAqB,EAAE,GACjC,gBAAgB,CA4ClB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAQzE;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB,CAOlG"}
@@ -0,0 +1,76 @@
1
+ import { readdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { validateManifests } from "./contract/validateManifest.js";
4
+ export const GENERATED_CATALOG_ID = "watt42:a2ui:catalog:manifest:v1";
5
+ export const GENERATED_CATALOG_VERSION = "manifest/2026.08.24.2";
6
+ export const GENERATED_UI_VERSION = "v0.9.1";
7
+ const SCREEN_TYPES = [
8
+ "dashboard",
9
+ "form",
10
+ "summary",
11
+ "confirmation",
12
+ "details",
13
+ "screen",
14
+ "chart",
15
+ ];
16
+ export function catalogFromManifests(manifests) {
17
+ const errors = validateManifests(manifests);
18
+ if (errors.length) {
19
+ throw new Error(`Invalid manifests:\n${errors.join("\n")}`);
20
+ }
21
+ const components = [...manifests]
22
+ .sort((a, b) => a.name.localeCompare(b.name))
23
+ .map((manifest) => {
24
+ const component = {
25
+ name: manifest.name,
26
+ description: manifest.description,
27
+ version: manifest.version,
28
+ implementation: manifest.implementation,
29
+ props: manifest.props,
30
+ allowedChildren: manifest.allowedChildren,
31
+ supportedBy: manifest.supportedBy,
32
+ actions: manifest.actions,
33
+ events: manifest.events,
34
+ dataBindings: manifest.dataBindings,
35
+ };
36
+ if (manifest.llmGuidance?.length) {
37
+ component.llmGuidance = manifest.llmGuidance;
38
+ }
39
+ if (manifest.nestedSpecProps?.length) {
40
+ component.nestedSpecProps = manifest.nestedSpecProps;
41
+ }
42
+ if (manifest.defaultNestedTypes?.length) {
43
+ component.defaultNestedTypes = manifest.defaultNestedTypes;
44
+ }
45
+ return component;
46
+ });
47
+ return {
48
+ catalogId: GENERATED_CATALOG_ID,
49
+ catalogVersion: GENERATED_CATALOG_VERSION,
50
+ uiVersion: GENERATED_UI_VERSION,
51
+ generated: {
52
+ source: "manifests",
53
+ command: "npm run generate:catalog --workspace=@watt42/a2ui-component-catalog",
54
+ },
55
+ components,
56
+ screenTypes: SCREEN_TYPES,
57
+ };
58
+ }
59
+ export function loadManifestsFromDir(dir) {
60
+ return readdirSync(dir)
61
+ .filter((name) => name.endsWith(".manifest.json"))
62
+ .sort()
63
+ .map((name) => {
64
+ const raw = readFileSync(join(dir, name), "utf8");
65
+ return JSON.parse(raw);
66
+ });
67
+ }
68
+ export function writeGeneratedCatalog(catalogDir, pythonCopyPath) {
69
+ const manifests = loadManifestsFromDir(join(catalogDir, "src/components"));
70
+ const catalog = catalogFromManifests(manifests);
71
+ const json = `${JSON.stringify(catalog, null, 2)}\n`;
72
+ writeFileSync(join(catalogDir, "catalog.json"), json, "utf8");
73
+ writeFileSync(pythonCopyPath, json, "utf8");
74
+ return catalog;
75
+ }
76
+ //# sourceMappingURL=generateCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateCatalog.js","sourceRoot":"","sources":["../src/generateCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type { AllowedChildren, ComponentCatalog, ComponentDefinition, RendererId, } from "./catalogTypes.js";
2
+ export { propertyKeys } from "./catalogTypes.js";
3
+ export { default as catalog } from "../catalog.json";
4
+ import type { ComponentCatalog, ComponentDefinition, RendererId } from "./catalogTypes.js";
5
+ export declare function getCatalog(): ComponentCatalog;
6
+ export declare function getComponent(name: string): ComponentDefinition | undefined;
7
+ export declare function listComponents(renderer?: RendererId): ComponentDefinition[];
8
+ export { validateComponentDefinition } from "./validate.js";
9
+ export { validateComponentProps } from "./validateProps.js";
10
+ export { catalogCompatibilityError, expectedCatalogIdentity, } from "./catalogCompatibility.js";
11
+ export { validateManifest, validateManifests, } from "./contract/validateManifest.js";
12
+ export { ACTION_PROPERTY, BINDING_PROPERTY } from "./contract/sharedSchemas.js";
13
+ export type { A2UIComponentContract, ActionContract, BindingContract, BindingMode, ContractPropType, EventContract, ImplementationProvenance, ImplementationSource, PropertyDefinition as ContractPropertyDefinition, ShadcnBase, } from "./contract/types.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAuB;AAI3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU3F,wBAAgB,UAAU,IAAI,gBAAgB,CAE7C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAE1E;AAED,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,mBAAmB,EAAE,CAQ3E;AAED,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAChF,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,IAAI,0BAA0B,EAChD,UAAU,GACX,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ export { propertyKeys } from "./catalogTypes.js";
2
+ export { default as catalog } from "../catalog.json" with { type: "json" };
3
+ import catalogData from "../catalog.json" with { type: "json" };
4
+ const typedCatalog = catalogData;
5
+ const catalogIndex = new Map(typedCatalog.components.map((component) => [
6
+ component.name,
7
+ component,
8
+ ]));
9
+ export function getCatalog() {
10
+ return typedCatalog;
11
+ }
12
+ export function getComponent(name) {
13
+ return catalogIndex.get(name);
14
+ }
15
+ export function listComponents(renderer) {
16
+ const components = typedCatalog.components;
17
+ if (!renderer) {
18
+ return [...components];
19
+ }
20
+ return components.filter((component) => component.supportedBy.includes(renderer));
21
+ }
22
+ export { validateComponentDefinition } from "./validate.js";
23
+ export { validateComponentProps } from "./validateProps.js";
24
+ export { catalogCompatibilityError, expectedCatalogIdentity, } from "./catalogCompatibility.js";
25
+ export { validateManifest, validateManifests, } from "./contract/validateManifest.js";
26
+ export { ACTION_PROPERTY, BINDING_PROPERTY } from "./contract/sharedSchemas.js";
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE3E,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAIhE,MAAM,YAAY,GAAG,WAA0C,CAAC;AAChE,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;IACzC,SAAS,CAAC,IAAI;IACd,SAAS;CACV,CAAC,CACH,CAAC;AAEF,MAAM,UAAU,UAAU;IACxB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAqB;IAClD,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CACrC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentDefinition } from "./catalogTypes.js";
2
+ export declare function validateComponentDefinition(component: ComponentDefinition): string[];
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,mBAAmB,GAC7B,MAAM,EAAE,CAYV"}
@@ -0,0 +1,17 @@
1
+ export function validateComponentDefinition(component) {
2
+ const errors = [];
3
+ if (!component.name)
4
+ errors.push("name is required");
5
+ if (!component.description)
6
+ errors.push("description is required");
7
+ if (!component.version)
8
+ errors.push("version is required");
9
+ if (!component.props || typeof component.props !== "object" || Array.isArray(component.props)) {
10
+ errors.push("props must be an object");
11
+ }
12
+ if (!component.supportedBy?.length) {
13
+ errors.push("supportedBy must not be empty");
14
+ }
15
+ return errors;
16
+ }
17
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,2BAA2B,CACzC,SAA8B;IAE9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,SAAS,CAAC,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,CAAC,WAAW;QAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC3D,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9F,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComponentDefinition } from "./catalogTypes.js";
2
+ export declare function validateComponentProps(definition: ComponentDefinition, props: Record<string, unknown>): string[];
3
+ //# sourceMappingURL=validateProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateProps.d.ts","sourceRoot":"","sources":["../src/validateProps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA6E7D,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,EAAE,CA6BV"}