@tmorrow/cre8-wc 2.1.0 → 2.2.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 (200) hide show
  1. package/a2ui/catalog-kg.json +441 -299
  2. package/a2ui/catalog.compact.json +27 -3
  3. package/a2ui/catalog.json +88 -2
  4. package/a2ui/demo.html +11 -2
  5. package/a2ui/generate-catalog-kg.mjs +122 -0
  6. package/a2ui/inert-props.json +1 -1
  7. package/cdn/cre8-wc.esm.js +2081 -1863
  8. package/cdn/cre8-wc.esm.js.map +1 -1
  9. package/cdn/cre8-wc.min.js +275 -257
  10. package/cdn/cre8-wc.min.js.map +1 -1
  11. package/dist/assets/{Changelog-Documentation-CeOetLxK.js → Changelog-Documentation-K_4-eEw_.js} +1 -1
  12. package/dist/assets/{Code-Guidelines-BjdezAjj.js → Code-Guidelines-BEfK4tNO.js} +1 -1
  13. package/dist/assets/{Color-6AOWCN3U-DPFGZitI.js → Color-6AOWCN3U-CgqtjCvc.js} +1 -1
  14. package/dist/assets/{Contributing-Guidelines-B1M2V1hW.js → Contributing-Guidelines-D3izkh_3.js} +1 -1
  15. package/dist/assets/{DocsRenderer-JROSPFPF-BBy8KWNl.js → DocsRenderer-JROSPFPF-BDiztMcx.js} +1 -1
  16. package/dist/assets/{Tokens-Documentation-CdTxFDLe.js → Tokens-Documentation-CLb4TXSM.js} +1 -1
  17. package/dist/assets/{WithTooltip-7X4HQR7L-DZzTNMQ7.js → WithTooltip-7X4HQR7L-tqNV1W_i.js} +1 -1
  18. package/dist/assets/{accordion-item.stories-Bl26JlHp.js → accordion-item.stories-WmzemFi_.js} +9 -1
  19. package/dist/assets/{accordion.stories-DjoLApQw.js → accordion.stories-D9yFH2Hq.js} +22 -14
  20. package/dist/assets/address-form.stories-CAphSi-g.js +71 -0
  21. package/dist/assets/{alert.stories-pO1y3YCQ.js → alert.stories-bMm7rWnS.js} +31 -15
  22. package/dist/assets/{badge-BTxW3bN2.js → badge-D5MyHlf3.js} +11 -3
  23. package/dist/assets/{badge.stories-vqh63RJ2.js → badge.stories-BPFbBOFL.js} +7 -8
  24. package/dist/assets/{band.stories-CjKRppSb.js → band.stories-CA81yMeF.js} +9 -1
  25. package/dist/assets/{blocks-1be_-L6v.js → blocks-DlUWku5n.js} +5 -5
  26. package/dist/assets/{breadcrumbs.stories-Doyfy3V9.js → breadcrumbs.stories-mfUqTE_a.js} +25 -9
  27. package/dist/assets/{button-group-G7qN4MwM.js → button-group-DjFiwkrF.js} +9 -1
  28. package/dist/assets/{button-group.stories-cL3Kay6M.js → button-group.stories-CanLG17w.js} +1 -1
  29. package/dist/assets/{button-CgaWukz0.js → button-rmsX1TVb.js} +9 -1
  30. package/dist/assets/{button.stories-C9HSpxWb.js → button.stories-BvDrcI8Q.js} +1 -1
  31. package/dist/assets/{card.stories-BbU8YymD.js → card-BNXY-4UF.js} +14 -50
  32. package/dist/assets/card.stories-BsHAGXKa.js +45 -0
  33. package/dist/assets/{chart.stories-BL4FxIA_.js → chart.stories-MmiQ9AaE.js} +3 -3
  34. package/dist/assets/{checkbox-field-item-DIMHcWM0.js → checkbox-field-item-C5vdtGYd.js} +9 -1
  35. package/dist/assets/{checkbox-field-item.stories-XbB4x_lO.js → checkbox-field-item.stories-IeHp3Od1.js} +1 -1
  36. package/dist/assets/{checkbox-field.stories-YnqFUI4K.js → checkbox-field.stories-DflhNO0m.js} +20 -12
  37. package/dist/assets/cre8-element-CaOpCq8p.js +1 -0
  38. package/dist/assets/cre8-form-element-Dowz62UX.js +1 -0
  39. package/dist/assets/{danger-button.stories-xh25hmfd.js → danger-button.stories-BMgfVb0A.js} +9 -1
  40. package/dist/assets/{date-picker.stories-DD_ctzEF.js → date-picker.stories-Ctw_UuKt.js} +51 -3
  41. package/dist/assets/{divider-xZ2KARHf.js → divider-CDrocq4F.js} +10 -2
  42. package/dist/assets/{divider.stories-Bk9oF-OV.js → divider.stories-BSNOQGoZ.js} +1 -1
  43. package/dist/assets/{dropdown-BEP5x3CW.js → dropdown-B03mbsrW.js} +25 -9
  44. package/dist/assets/dropdown-item.stories-B6_J9kd6.js +26 -0
  45. package/dist/assets/{dropdown.stories-B0OlKD7h.js → dropdown.stories-CgzAbark.js} +2 -2
  46. package/dist/assets/{f-po-BdPzDRD-.js → f-po-ByatXsWC.js} +1 -1
  47. package/dist/assets/{feature.stories-DYE1Js70.js → feature.stories-BiEVKnSG.js} +9 -1
  48. package/dist/assets/field-BpyhbS2M.js +44 -0
  49. package/dist/assets/{field-note-fccBckVl.js → field-note-B7iNgXW2.js} +11 -3
  50. package/dist/assets/{field-note.stories-BH9AZMbF.js → field-note.stories-nB3JUIfK.js} +1 -1
  51. package/dist/assets/{field.stories-BQPtmziK.js → field.stories-DL6PXwc3.js} +6 -6
  52. package/dist/assets/{field-BpUYyRW1.js → field.styles-DwF2OuJ8.js} +12 -45
  53. package/dist/assets/{footer.stories-DCWEciqD.js → footer.stories-lRkixJ_m.js} +9 -1
  54. package/dist/assets/form-kQUqwepo.js +17 -0
  55. package/dist/assets/form.stories-DdezGU-e.js +75 -0
  56. package/dist/assets/{formatter-L2YTDE3Q-B9u1AOWn.js → formatter-L2YTDE3Q-Ch1Vr_xh.js} +1 -1
  57. package/dist/assets/{global-nav-item-T4htN-yO.js → global-nav-item-Cxq8RcLW.js} +14 -6
  58. package/dist/assets/{global-nav-item.stories-2dWRfCXv.js → global-nav-item.stories-BN2A5owe.js} +1 -1
  59. package/dist/assets/{global-nav.stories-Fh1gScqg.js → global-nav.stories-CQxLq7RO.js} +10 -2
  60. package/dist/assets/{grid-C5CKMXNe.js → grid-item-B260kL-6.js} +573 -557
  61. package/dist/assets/{grid.stories-BLmCNdeA.js → grid.stories-CxastlqY.js} +1 -1
  62. package/dist/assets/{header.stories-BkDrjJtj.js → header.stories-j4U5LNrm.js} +9 -1
  63. package/dist/assets/{heading-Dbka33DK.js → heading-ByebtBvm.js} +10 -2
  64. package/dist/assets/{heading.stories-Be40_bmG.js → heading.stories-DexN19oH.js} +1 -1
  65. package/dist/assets/{hero.stories-vRu7PZG9.js → hero.stories-DeQ_dyTs.js} +9 -1
  66. package/dist/assets/{icon-ChfRWXWy.js → icon-BvsTH4V8.js} +9 -1
  67. package/dist/assets/{icon.stories-Cj4U7L5G.js → icon.stories-BT08w1wj.js} +1 -1
  68. package/dist/assets/if-defined-RYzTvKuT.js +1 -0
  69. package/dist/assets/iframe-CWwoGI65.css +1 -0
  70. package/dist/assets/{iframe-BNJP6ovU.js → iframe-nwd_1gnU.js} +142 -142
  71. package/dist/assets/{inline-alert.stories-CygBYI02.js → inline-alert.stories-B4Q6UW0u.js} +9 -1
  72. package/dist/assets/{layout-container.stories-TMyIJteJ.js → layout-container.stories-B-Jf2Oai.js} +10 -2
  73. package/dist/assets/{layout.stories-ylRM-ANL.js → layout.stories-CKzFqX2b.js} +23 -7
  74. package/dist/assets/light-children-DDjBxt3J.js +1 -0
  75. package/dist/assets/{linelength-container.stories-Br2v8jXE.js → linelength-container.stories-DIF_Sdc1.js} +9 -1
  76. package/dist/assets/{link-list.stories--y-urrVo.js → link-list.stories-CYh9rIaJ.js} +39 -23
  77. package/dist/assets/{link-CRE0Eqdo.js → link-vQ01kiW8.js} +9 -1
  78. package/dist/assets/{link.stories-C3WQOgkY.js → link.stories-Ep9XvcaI.js} +1 -1
  79. package/dist/assets/{list.stories-Bd2bxkxn.js → list.stories-CdDgDNZW.js} +29 -13
  80. package/dist/assets/{loading-spinner-C52KNq6y.js → loading-spinner-B7JDCfNK.js} +12 -4
  81. package/dist/assets/{loading-spinner.stories-DPRGEeHT.js → loading-spinner.stories-n42RNnGQ.js} +1 -1
  82. package/dist/assets/{logo.stories-2LBqqraT.js → logo.stories-BcJXB658.js} +9 -1
  83. package/dist/assets/{main.stories-BQzD7iWD.js → main.stories-B6lL5ks-.js} +10 -2
  84. package/dist/assets/{modal-GglWRNJp.js → modal-Bn53iVj7.js} +3 -3
  85. package/dist/assets/{modal-CCfbY4fF.js → modal-DgnLTA-d.js} +10 -2
  86. package/dist/assets/{modal.stories-CpybCs79.js → modal.stories-CsImmcQy.js} +1 -1
  87. package/dist/assets/{multi-select.stories-BhzEKRui.js → multi-select.stories-D9VO8lGJ.js} +12 -4
  88. package/dist/assets/{nav-container.stories-Be1YlegP.js → nav-container.stories-N7legDVk.js} +11 -3
  89. package/dist/assets/{page-header.stories-BOVLQ0YF.js → page-header.stories-Cm-bhKlB.js} +9 -1
  90. package/dist/assets/{pagination.stories-D62sa_1K.js → pagination.stories-Coox3PDk.js} +28 -12
  91. package/dist/assets/{percent-bar.stories-CYi4El7T.js → percent-bar.stories-DOJJUwvS.js} +11 -3
  92. package/dist/assets/{popover.stories-B9O8F4yv.js → popover.stories-CNa_bU0v.js} +11 -3
  93. package/dist/assets/{primary-nav.stories-Bt-o7h45.js → primary-nav.stories-DkQnXnem.js} +17 -1
  94. package/dist/assets/{progress-meter-Dit59091.js → progress-meter-Ce6ogPi2.js} +9 -1
  95. package/dist/assets/{progress-meter.stories-CYnOCmjo.js → progress-meter.stories-BtH8g8Wo.js} +1 -1
  96. package/dist/assets/{progress-steps-item-CWJsad0s.js → progress-steps-item-Cz0rvvpE.js} +9 -1
  97. package/dist/assets/{progress-steps-item.stories-ePn_6bPn.js → progress-steps-item.stories-D96tf3mT.js} +1 -1
  98. package/dist/assets/{progress-steps.stories-CblrEcXF.js → progress-steps.stories-8BCOIabC.js} +37 -29
  99. package/dist/assets/{radio-field-item-Bm-0RWPe.js → radio-field-item-S4cTjx4A.js} +31 -15
  100. package/dist/assets/{radio-field-item.stories-y_TrTRIW.js → radio-field-item.stories-rvg95_c5.js} +6 -6
  101. package/dist/assets/{radio-field.stories-CSWrbUrn.js → radio-field.stories-Bn2ifEnO.js} +2 -2
  102. package/dist/assets/{remove-tag-lCr57c5r.js → remove-tag-DeV9CojL.js} +10 -2
  103. package/dist/assets/{remove-tag.stories-CDfwCdvZ.js → remove-tag.stories-Cl4iRZe4.js} +1 -1
  104. package/dist/assets/{sample-modal.stories-BZ4N2R2Z.js → sample-modal.stories-iefBJIsu.js} +4 -4
  105. package/dist/assets/{section.stories-D_1InThX.js → section.stories-o84k8ERD.js} +9 -1
  106. package/dist/assets/{select-tile-BqqB3ZtE.js → select-tile-C4vj-veo.js} +10 -2
  107. package/dist/assets/{select-tile-list.stories-Di4ILgV8.js → select-tile-list.stories-BvGfDwQp.js} +9 -1
  108. package/dist/assets/{select-tile.stories-D3h_6zlV.js → select-tile.stories-CAj_RKLu.js} +1 -1
  109. package/dist/assets/{select.stories-BB2phP9A.js → select.stories-DQyvoREf.js} +9 -1
  110. package/dist/assets/sign-in.stories-BKqgyRoA.js +63 -0
  111. package/dist/assets/{skeleton-loader.stories-y4uml_kV.js → skeleton-loader.stories-CksQXuUE.js} +13 -5
  112. package/dist/assets/{split-button.stories-C_82I4ME.js → split-button.stories-DcJIeVfi.js} +12 -4
  113. package/dist/assets/{spread-CnPic3C2.js → spread-D16Rn3WA.js} +1 -1
  114. package/dist/assets/state-DZNbmwHN.js +1 -0
  115. package/dist/assets/{submenu.stories-UDtaREr1.js → submenu.stories-CcUGwoae.js} +18 -2
  116. package/dist/assets/{syntaxhighlighter-T5IQBZDB-D-I_s_yD.js → syntaxhighlighter-T5IQBZDB-JEA9Ib97.js} +1 -1
  117. package/dist/assets/{table-header-2837i43H.js → table-header-B2jlwG0L.js} +81 -33
  118. package/dist/assets/{table-object.stories-D4KoI-wA.js → table-object.stories-DCrrXH-U.js} +11 -3
  119. package/dist/assets/{table.stories-DUJDibEp.js → table.stories-DHNUpWFk.js} +2 -2
  120. package/dist/assets/{tabs.stories-C06SngOF.js → tabs.stories-o9pLUMwX.js} +34 -10
  121. package/dist/assets/{tag-oHGdclJl.js → tag-BDbKYA95.js} +9 -1
  122. package/dist/assets/{tag-list.stories-Du-IoYzu.js → tag-list.stories-BLeM-gma.js} +21 -13
  123. package/dist/assets/{tag.stories-C5D5IbuK.js → tag.stories-hu36S63W.js} +1 -1
  124. package/dist/assets/{tertiary-nav.stories-B1GU8Zi4.js → tertiary-nav.stories-CqratFQw.js} +19 -3
  125. package/dist/assets/{text-link-B3m3KEqY.js → text-link-VO8qilFK.js} +9 -1
  126. package/dist/assets/{text-link.stories-4O6qn82H.js → text-link.stories-Da7lEll4.js} +1 -1
  127. package/dist/assets/{text-passage-xQVosjOr.js → text-passage-C6jDH-er.js} +19 -3
  128. package/dist/assets/{text-passage.stories-Da1nspwG.js → text-passage.stories-dk5c19n9.js} +1 -1
  129. package/dist/assets/{tooltip.stories-DLKyyeKn.js → tooltip.stories-DKVATLuD.js} +16 -8
  130. package/dist/assets/{utility-nav.stories-B6xBFe7z.js → utility-nav.stories-Bru0bzcG.js} +21 -5
  131. package/dist/design-tokens/brands/cre8-a2ui/css/tokens_brand.css +4 -4
  132. package/dist/design-tokens/core/scss/theming/component.css +1 -1
  133. package/dist/design-tokens/core/scss/theming/variables.css +7 -1
  134. package/dist/design-tokens/core/scss/theming/variables.scss +11 -0
  135. package/dist/fonts/PlusJakartaSans-Bold.woff2 +0 -0
  136. package/dist/fonts/PlusJakartaSans-Medium.woff2 +0 -0
  137. package/dist/fonts/PlusJakartaSans-Regular.woff2 +0 -0
  138. package/dist/fonts/PlusJakartaSans-SemiBold.woff2 +0 -0
  139. package/dist/iframe.html +25 -2
  140. package/dist/index.html +82 -26
  141. package/dist/index.json +1 -1
  142. package/dist/logo.svg +1 -0
  143. package/dist/manifests/components.html +766 -0
  144. package/dist/manifests/docs.json +37 -0
  145. package/dist/project.json +1 -1
  146. package/dist/sb-addons/storybook-5/manager-bundle.js +8 -0
  147. package/dist/sb-addons/vitest-4/manager-bundle.js +3 -0
  148. package/lib/cdn-entry.d.ts +2 -1
  149. package/lib/cdn-entry.d.ts.map +1 -1
  150. package/lib/cdn-entry.js +2 -1
  151. package/lib/cdn-entry.js.map +1 -1
  152. package/lib/components/cre8-field.js +1 -1
  153. package/lib/components/cre8-form-element.d.ts +27 -0
  154. package/lib/components/cre8-form-element.d.ts.map +1 -1
  155. package/lib/components/cre8-form-element.js +65 -1
  156. package/lib/components/cre8-form-element.js.map +1 -1
  157. package/lib/components/field/field.styles.d.ts.map +1 -1
  158. package/lib/components/field/field.styles.js +4 -2
  159. package/lib/components/field/field.styles.js.map +1 -1
  160. package/lib/components/form/form.d.ts +87 -0
  161. package/lib/components/form/form.d.ts.map +1 -0
  162. package/lib/components/form/form.js +209 -0
  163. package/lib/components/form/form.js.map +1 -0
  164. package/lib/components/form/form.styles.d.ts +14 -0
  165. package/lib/components/form/form.styles.d.ts.map +1 -0
  166. package/lib/components/form/form.styles.js +31 -0
  167. package/lib/components/form/form.styles.js.map +1 -0
  168. package/lib/{cre8-form-element-BymRdQUC.js → cre8-form-element-CCzBYtDm.js} +85 -32
  169. package/lib/design-tokens/brands/cre8-a2ui/css/tokens_brand.css +4 -4
  170. package/lib/design-tokens/brands/cre8-a2ui/css/tokens_cre8-a2ui.module.d.ts +1 -1
  171. package/lib/design-tokens/brands/cre8-a2ui/css/tokens_cre8-a2ui.module.d.ts.map +1 -1
  172. package/lib/design-tokens/brands/cre8-a2ui/css/tokens_cre8-a2ui.module.js +4 -4
  173. package/lib/design-tokens/brands/cre8-a2ui/css/tokens_cre8-a2ui.module.js.map +1 -1
  174. package/lib/index.d.ts +1 -0
  175. package/lib/index.d.ts.map +1 -1
  176. package/lib/index.js +1 -0
  177. package/lib/index.js.map +1 -1
  178. package/lib/scripts/generate-mcp-manifest.js +1 -0
  179. package/lib/scripts/generate-mcp-manifest.js.map +1 -1
  180. package/lib/scripts/generate-react-wrappers.js +62 -0
  181. package/lib/scripts/generate-react-wrappers.js.map +1 -1
  182. package/lib/toBeAccessible.d.ts +6 -5
  183. package/lib/toBeAccessible.d.ts.map +1 -1
  184. package/lib/toBeAccessible.js +1 -1
  185. package/lib/toBeAccessible.js.map +1 -1
  186. package/mcp-manifest.json +44 -1
  187. package/package.json +18 -13
  188. package/react-manifest.json +40 -2
  189. package/dist/assets/cre8-element-B35i4Lyg.js +0 -1
  190. package/dist/assets/cre8-form-element-Cfc5VeYV.js +0 -1
  191. package/dist/assets/dropdown-item.stories-Iaw_UrEP.js +0 -26
  192. package/dist/assets/example-drug-card.stories-Bp5JIeE_.js +0 -10
  193. package/dist/assets/form-example.stories-9IDC0AgX.js +0 -49
  194. package/dist/assets/icon-description-BBSwDykJ.js +0 -45
  195. package/dist/assets/icon-description.stories-Cg6ekOme.js +0 -3
  196. package/dist/assets/if-defined-Bxnzk64Q.js +0 -1
  197. package/dist/assets/medication-card.stories-Wc-hA0-s.js +0 -165
  198. package/dist/assets/medication-form.stories-DfFOCDaU.js +0 -57
  199. package/dist/assets/request-prescription.stories-O4zqokfb.js +0 -24
  200. package/dist/assets/state-DkQhleoO.js +0 -1
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "contractVersion": 1,
3
- "sourceCatalog": "https://cre8.dev/a2ui/catalogs/cre8-wc/2.0.7",
4
- "libraryVersion": "2.0.7",
5
- "componentCount": 85,
3
+ "sourceCatalog": "https://cre8.dev/a2ui/catalogs/cre8-wc/2.2.0",
4
+ "libraryVersion": "2.2.0",
5
+ "componentCount": 86,
6
6
  "components": [
7
7
  {
8
8
  "name": "cre8-accordion",
@@ -887,6 +887,30 @@
887
887
  "bottom"
888
888
  ]
889
889
  },
890
+ {
891
+ "name": "cre8-form",
892
+ "category": "Forms",
893
+ "props": {
894
+ "novalidate": {
895
+ "type": "boolean"
896
+ },
897
+ "disabled": {
898
+ "type": "boolean"
899
+ },
900
+ "controls": {
901
+ "type": "string"
902
+ },
903
+ "values": {
904
+ "type": "string"
905
+ }
906
+ },
907
+ "acceptsChildren": true,
908
+ "events": [
909
+ "form-submit",
910
+ "form-reset",
911
+ "form-invalid"
912
+ ]
913
+ },
890
914
  {
891
915
  "name": "cre8-global-nav",
892
916
  "category": "Navigation",
package/a2ui/catalog.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://cre8.dev/a2ui/catalogs/cre8-wc/2.0.7",
3
+ "$id": "https://cre8.dev/a2ui/catalogs/cre8-wc/2.2.0",
4
4
  "title": "cre8-wc A2UI Catalog",
5
5
  "description": "cre8 Web Components is a library of presentational UI web components to be consumed by # web applications.",
6
6
  "x-native-events": [
@@ -54,7 +54,7 @@
54
54
  "x-a2ui": {
55
55
  "catalogId": "cre8-wc",
56
56
  "library": "@tmorrow/cre8-wc",
57
- "libraryVersion": "2.0.7",
57
+ "libraryVersion": "2.2.0",
58
58
  "tagPrefix": "cre8",
59
59
  "framework": "Lit 3.3.1"
60
60
  },
@@ -188,6 +188,9 @@
188
188
  {
189
189
  "$ref": "#/$defs/components/cre8-field-note"
190
190
  },
191
+ {
192
+ "$ref": "#/$defs/components/cre8-form"
193
+ },
191
194
  {
192
195
  "$ref": "#/$defs/components/cre8-multi-select"
193
196
  },
@@ -4102,6 +4105,89 @@
4102
4105
  },
4103
4106
  "additionalProperties": false
4104
4107
  },
4108
+ "cre8-form": {
4109
+ "type": "object",
4110
+ "title": "cre8-form",
4111
+ "x-category": "Forms",
4112
+ "description": "The form component groups form-associated Cre8 controls, aggregates their\nvalidation on submit, and orchestrates submit and reset.\n\n# How to Use\n1. Place any Cre8 form controls inside `cre8-form`. They may be nested inside\n layout components such as `cre8-grid` or `cre8-layout`.\n2. Add a `cre8-button` with `type=\"submit\"` to submit the form.\n3. Listen for `form-submit` to receive the collected `FormData`.\n\nNote: this component renders to light DOM. A form-associated control's form\nowner is the nearest `<form>` in its own node tree, so a shadow-DOM `<form>`\nwould own nothing and `new FormData(form)` would come back empty.",
4113
+ "required": [
4114
+ "component"
4115
+ ],
4116
+ "properties": {
4117
+ "component": {
4118
+ "const": "cre8-form",
4119
+ "description": "Component tag name"
4120
+ },
4121
+ "props": {
4122
+ "type": "object",
4123
+ "additionalProperties": false,
4124
+ "properties": {
4125
+ "novalidate": {
4126
+ "description": "Skips aggregate validation on submit.",
4127
+ "type": "boolean",
4128
+ "x-kind": "attribute"
4129
+ },
4130
+ "disabled": {
4131
+ "description": "Disables every control in the form, for example while submitting.",
4132
+ "type": "boolean",
4133
+ "x-kind": "attribute"
4134
+ },
4135
+ "controls": {
4136
+ "description": "Every form-associated Cre8 control owned by this form, in document order.\nReaches through layout components because slotting does not move nodes\nout of the light-DOM tree.",
4137
+ "type": "string",
4138
+ "x-tsType": "Cre8FormElement[]",
4139
+ "x-kind": "property"
4140
+ },
4141
+ "values": {
4142
+ "description": "The form's current values, derived from FormData.",
4143
+ "type": "string",
4144
+ "x-tsType": "Record<string, FormDataEntryValue | FormDataEntryValue[]>",
4145
+ "x-kind": "property"
4146
+ }
4147
+ }
4148
+ },
4149
+ "children": {
4150
+ "type": "array",
4151
+ "description": "The form's controls and layout.",
4152
+ "items": {
4153
+ "$ref": "#/$defs/Child"
4154
+ }
4155
+ },
4156
+ "events": {
4157
+ "type": "object",
4158
+ "description": "Event bindings. Each key is an event name; the value names the handler to emit.",
4159
+ "propertyNames": {
4160
+ "anyOf": [
4161
+ {
4162
+ "$ref": "#/$defs/NativeEventName"
4163
+ },
4164
+ {
4165
+ "enum": [
4166
+ "form-invalid",
4167
+ "form-reset",
4168
+ "form-submit"
4169
+ ]
4170
+ }
4171
+ ]
4172
+ },
4173
+ "additionalProperties": {
4174
+ "$ref": "#/$defs/EventBinding"
4175
+ }
4176
+ }
4177
+ },
4178
+ "additionalProperties": false,
4179
+ "x-events": {
4180
+ "form-submit": {
4181
+ "detail": {}
4182
+ },
4183
+ "form-reset": {
4184
+ "detail": {}
4185
+ },
4186
+ "form-invalid": {
4187
+ "detail": {}
4188
+ }
4189
+ }
4190
+ },
4105
4191
  "cre8-multi-select": {
4106
4192
  "type": "object",
4107
4193
  "title": "cre8-multi-select",
package/a2ui/demo.html CHANGED
@@ -8,13 +8,22 @@
8
8
  rel="stylesheet"
9
9
  href="../design-tokens/brands/cre8-a2ui/css/tokens_cre8-a2ui.css"
10
10
  />
11
+ <link
12
+ rel="stylesheet"
13
+ href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&family=Plus+Jakarta+Sans:wght@400;600&display=swap"
14
+ />
15
+ <link
16
+ rel="stylesheet"
17
+ href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;600&family=Plus+Jakarta+Sans:wght@400;600&display=swap"
18
+ />
19
+
11
20
  <style>
12
21
  html,
13
22
  body {
14
23
  margin: 0;
15
24
  font-family:
16
- system-ui,
17
- -apple-system,
25
+ 'Plus Jakarta Sans',
26
+ 'Open Sans',
18
27
  sans-serif;
19
28
  height: 100vh;
20
29
  }
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Generates catalog-kg.json - the knowledge-graph projection of the a2ui
3
+ * catalog that cre8-mcp's KG-backed handlers serve.
4
+ *
5
+ * Deterministic: same catalog.json in, same graph out. Runs after
6
+ * generate-catalog.mjs (which derives catalog.json from mcp-manifest.json),
7
+ * so `build:a2ui` keeps manifest -> catalog -> catalog-kg aligned.
8
+ *
9
+ * Graph shape (consumed by packages/cre8-mcp/src/handlers.ts and
10
+ * surface-routes.ts):
11
+ * nodes: category (cat:<Name>), component (<tag>), slot (slot:<tag>:<name>),
12
+ * enum_prop (prop:<tag>:<prop>)
13
+ * edges: BELONGS_TO, HAS_SLOT, HAS_ENUM_PROP
14
+ */
15
+ import { readFileSync, writeFileSync } from 'node:fs';
16
+ import { fileURLToPath } from 'node:url';
17
+ import { dirname, resolve } from 'node:path';
18
+
19
+ const __dirname = dirname(fileURLToPath(import.meta.url));
20
+
21
+ const catalogPath = resolve(__dirname, 'catalog.json');
22
+ const pkgPath = resolve(__dirname, '..', 'package.json');
23
+ const outPath = resolve(__dirname, 'catalog-kg.json');
24
+
25
+ const catalog = JSON.parse(readFileSync(catalogPath, 'utf8'));
26
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
27
+
28
+ const components = catalog.$defs?.components ?? {};
29
+
30
+ /** Collapses whitespace/newlines and truncates with an ellipsis. */
31
+ const summarize = (text, max) => {
32
+ if (text == null) return null;
33
+ const flat = String(text).replace(/\s+/g, ' ').trim();
34
+ return flat.length > max ? `${flat.slice(0, max)}…` : flat;
35
+ };
36
+
37
+ const nodes = [];
38
+ const edges = [];
39
+
40
+ // Category nodes, alphabetical. Components without x-category land in Other.
41
+ const categories = new Set();
42
+ for (const def of Object.values(components)) {
43
+ categories.add(def['x-category'] || 'Other');
44
+ }
45
+ for (const label of [...categories].sort()) {
46
+ nodes.push({ id: `cat:${label}`, type: 'category', label });
47
+ }
48
+
49
+ // Component, slot, and enum-prop nodes in catalog order.
50
+ for (const [tag, def] of Object.entries(components)) {
51
+ const category = def['x-category'] || 'Other';
52
+ const propDefs = def.properties?.props?.properties ?? {};
53
+ const slotNames = Object.keys(def.properties?.slots?.properties ?? {});
54
+ const slotDescriptions = def['x-slot-descriptions'] ?? {};
55
+
56
+ const props = {};
57
+ for (const [name, p] of Object.entries(propDefs)) {
58
+ props[name] = {
59
+ type: p.type ?? null,
60
+ enum: p.enum ?? null,
61
+ default: p.default ?? null,
62
+ description: summarize(p.description, 80),
63
+ 'x-kind': p['x-kind'] ?? null,
64
+ };
65
+ }
66
+
67
+ nodes.push({
68
+ id: tag,
69
+ type: 'component',
70
+ category,
71
+ description: summarize(def.description, 120),
72
+ props,
73
+ slots: slotNames,
74
+ accepts_children: Boolean(def.properties?.children),
75
+ });
76
+ edges.push({ from: tag, to: `cat:${category}`, rel: 'BELONGS_TO' });
77
+
78
+ for (const slotName of slotNames) {
79
+ const id = `slot:${tag}:${slotName}`;
80
+ nodes.push({
81
+ id,
82
+ type: 'slot',
83
+ name: slotName,
84
+ component: tag,
85
+ description: slotDescriptions[slotName] ?? null,
86
+ });
87
+ edges.push({ from: tag, to: id, rel: 'HAS_SLOT' });
88
+ }
89
+
90
+ for (const [propName, p] of Object.entries(propDefs)) {
91
+ if (!Array.isArray(p.enum) || p.enum.length === 0) continue;
92
+ const id = `prop:${tag}:${propName}`;
93
+ nodes.push({
94
+ id,
95
+ type: 'enum_prop',
96
+ name: propName,
97
+ component: tag,
98
+ enum: p.enum,
99
+ description: summarize(p.description, 80),
100
+ });
101
+ edges.push({ from: tag, to: id, rel: 'HAS_ENUM_PROP' });
102
+ }
103
+ }
104
+
105
+ const kg = {
106
+ meta: {
107
+ generated_from: 'catalog.json',
108
+ catalog_id: 'cre8-wc',
109
+ library: pkg.name,
110
+ library_version: pkg.version,
111
+ total_nodes: nodes.length,
112
+ total_edges: edges.length,
113
+ },
114
+ nodes,
115
+ edges,
116
+ };
117
+
118
+ writeFileSync(outPath, `${JSON.stringify(kg, null, 2)}\n`, 'utf8');
119
+ console.log(
120
+ `catalog-kg.json: ${nodes.length} nodes, ${edges.length} edges `
121
+ + `(${Object.keys(components).length} components, ${categories.size} categories)`,
122
+ );
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$comment": "Generated by a2ui/render-audit.mjs. Props that are declared in the catalog but never reach the DOM — confirmed twice, by rendering under jsdom and by reading the component source. Setting one validates cleanly and does nothing.",
3
- "libraryVersion": "2.0.7",
3
+ "libraryVersion": "2.1.1",
4
4
  "components": {
5
5
  "cre8-link-list-item": {
6
6
  "text": {