themelia-react-ui 2.0.2 → 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.
Files changed (435) hide show
  1. package/CHANGELOG.md +67 -7
  2. package/README.md +70 -37
  3. package/THIRD_PARTY_NOTICES.md +6 -12
  4. package/dist/{accordion-Cjb6sx0G.js → accordion-96o0pN62.js} +5 -5
  5. package/dist/{accordion-Cjb6sx0G.js.map → accordion-96o0pN62.js.map} +1 -1
  6. package/dist/action-menu-CHgs8vmj.js +281 -0
  7. package/dist/action-menu-CHgs8vmj.js.map +1 -0
  8. package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-B8yGOr8-.js} +7 -1
  9. package/dist/affordance-geometry.generated-B8yGOr8-.js.map +1 -0
  10. package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-BZUGwBq6.js} +277 -276
  11. package/dist/ai-artifact-BZUGwBq6.js.map +1 -0
  12. package/dist/{app-shell-C4FhvCqF.js → app-shell-D63ATkIK.js} +84 -83
  13. package/dist/app-shell-D63ATkIK.js.map +1 -0
  14. package/dist/{attachment-BxDfL2mw.js → attachment-DkoqHPPl.js} +7 -7
  15. package/dist/{attachment-BxDfL2mw.js.map → attachment-DkoqHPPl.js.map} +1 -1
  16. package/dist/{auth-ax2BqjrI.js → auth-D2FVZ1MH.js} +10 -10
  17. package/dist/{auth-ax2BqjrI.js.map → auth-D2FVZ1MH.js.map} +1 -1
  18. package/dist/{avatar-DAPlDvhJ.js → avatar-DWO_HHhB.js} +5 -5
  19. package/dist/{avatar-DAPlDvhJ.js.map → avatar-DWO_HHhB.js.map} +1 -1
  20. package/dist/{badge-HpFqoqSY.js → badge-DErMA7ul.js} +4 -4
  21. package/dist/{badge-HpFqoqSY.js.map → badge-DErMA7ul.js.map} +1 -1
  22. package/dist/base/accordion.js +1 -1
  23. package/dist/base/action-menu.js +1 -1
  24. package/dist/base/attachment.js +1 -1
  25. package/dist/base/avatar.js +1 -1
  26. package/dist/base/badge.js +1 -1
  27. package/dist/base/batch-action-bar.js +1 -1
  28. package/dist/base/buttons.js +1 -1
  29. package/dist/base/cards.js +2 -2
  30. package/dist/base/carousel.js +3 -3
  31. package/dist/base/cascader.js +13 -13
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +2 -2
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +2 -2
  39. package/dist/base/display.js +6 -6
  40. package/dist/base/feedback.js +3 -3
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +3 -3
  43. package/dist/base/inline-edit.js +10 -10
  44. package/dist/base/item.js +1 -1
  45. package/dist/base/media-gallery.js +1 -1
  46. package/dist/base/metadata-list.js +1 -1
  47. package/dist/base/navigation.js +6 -6
  48. package/dist/base/popover-menu.js +1 -1
  49. package/dist/base/popover.js +1 -1
  50. package/dist/base/qr-code.js +1 -1
  51. package/dist/base/repeaters.js +9 -9
  52. package/dist/base/sheet.js +1 -1
  53. package/dist/base/sidebar.js +1 -1
  54. package/dist/base/signature-pad.js +6 -6
  55. package/dist/base/skeleton.js +1 -1
  56. package/dist/base/spinner.js +4 -4
  57. package/dist/base/structure.js +1 -1
  58. package/dist/base/table.js +1 -1
  59. package/dist/base/text-inputs.js +2 -2
  60. package/dist/base/toaster.js +3 -3
  61. package/dist/base/tree.js +1 -1
  62. package/dist/base/upload-queue.js +1 -1
  63. package/dist/base/upload.js +3 -3
  64. package/dist/base/value-inputs.js +1 -1
  65. package/dist/{batch-action-bar-DnUJ21NQ.js → batch-action-bar-CdfIkCsV.js} +4 -4
  66. package/dist/{batch-action-bar-DnUJ21NQ.js.map → batch-action-bar-CdfIkCsV.js.map} +1 -1
  67. package/dist/blocks/admin.js +20 -20
  68. package/dist/blocks/admin.js.map +1 -1
  69. package/dist/blocks/ai.js +15 -15
  70. package/dist/blocks/analytics/usage-card.js +1 -1
  71. package/dist/blocks/analytics.js +17 -17
  72. package/dist/blocks/analytics.js.map +1 -1
  73. package/dist/blocks/collaboration.js +1 -1
  74. package/dist/blocks/commerce/receipt.js +1 -1
  75. package/dist/blocks/commerce.js +570 -567
  76. package/dist/blocks/commerce.js.map +1 -1
  77. package/dist/blocks/data-display.js +2 -2
  78. package/dist/blocks/onboarding.js +5 -5
  79. package/dist/blocks/planning.js +11 -11
  80. package/dist/blocks/timelines.js +1 -1
  81. package/dist/{breadcrumbs-C-oqs1sQ.js → breadcrumbs-B-WFKecD.js} +4 -4
  82. package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-B-WFKecD.js.map} +1 -1
  83. package/dist/{button-DVzspB_G.js → button-DkmK-z8E.js} +2 -2
  84. package/dist/{button-DVzspB_G.js.map → button-DkmK-z8E.js.map} +1 -1
  85. package/dist/{buttons-DPZekJFu.js → buttons-BbfzgczK.js} +8 -8
  86. package/dist/{buttons-DPZekJFu.js.map → buttons-BbfzgczK.js.map} +1 -1
  87. package/dist/{cards-BaBZR-AU.js → cards-4JTWqvVe.js} +10 -10
  88. package/dist/cards-4JTWqvVe.js.map +1 -0
  89. package/dist/{chart-ZOYyK2xG.js → chart-C19flDQb.js} +4 -4
  90. package/dist/{chart-ZOYyK2xG.js.map → chart-C19flDQb.js.map} +1 -1
  91. package/dist/{checkbox-AWIhNhmo.js → checkbox-CzYUTPeJ.js} +9 -5
  92. package/dist/checkbox-CzYUTPeJ.js.map +1 -0
  93. package/dist/{choice-inputs-CNHvARCJ.js → choice-inputs-JLtij2y4.js} +182 -176
  94. package/dist/choice-inputs-JLtij2y4.js.map +1 -0
  95. package/dist/{code-block-DeneBJR_.js → code-block-CGNaUtAE.js} +7 -7
  96. package/dist/{code-block-DeneBJR_.js.map → code-block-CGNaUtAE.js.map} +1 -1
  97. package/dist/{collapsible-C-_l4hpy.js → collapsible-Do4G0zcC.js} +3 -3
  98. package/dist/{collapsible-C-_l4hpy.js.map → collapsible-Do4G0zcC.js.map} +1 -1
  99. package/dist/{collection-content-By56pLog.js → collection-content-C0e8SsTm.js} +3 -3
  100. package/dist/{collection-content-By56pLog.js.map → collection-content-C0e8SsTm.js.map} +1 -1
  101. package/dist/{combobox-C0EQW6dr.js → combobox-CBJDs6w_.js} +349 -347
  102. package/dist/combobox-CBJDs6w_.js.map +1 -0
  103. package/dist/{combobox-xCQ2RMNE.js → combobox-hbhSS18O.js} +158 -112
  104. package/dist/combobox-hbhSS18O.js.map +1 -0
  105. package/dist/{command-C25VMRII.js → command-D8NrBj-b.js} +7 -7
  106. package/dist/{command-C25VMRII.js.map → command-D8NrBj-b.js.map} +1 -1
  107. package/dist/{comments-BYYlTA8E.js → comments-Di4w0H_S.js} +383 -382
  108. package/dist/comments-Di4w0H_S.js.map +1 -0
  109. package/dist/components/base/action-menu/action-menu.d.ts +2 -0
  110. package/dist/components/base/cards/card.recipes.d.ts +12 -5
  111. package/dist/components/base/cards/smart-card.types.d.ts +12 -7
  112. package/dist/components/base/choice-inputs/checkbox.d.ts +7 -2
  113. package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
  114. package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
  115. package/dist/components/base/combobox/combobox-field.d.ts +16 -0
  116. package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
  117. package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
  118. package/dist/components/base/forms/form-field.d.ts +5 -3
  119. package/dist/components/base/forms/index.d.ts +1 -0
  120. package/dist/components/base/forms/server-errors.d.ts +16 -0
  121. package/dist/components/base/forms/workflow.d.ts +5 -2
  122. package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
  123. package/dist/components/base/navigation/page-header/page-header.d.ts +4 -2
  124. package/dist/components/base/structure/composition.recipes.d.ts +17 -0
  125. package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
  126. package/dist/components/base/text-inputs/input.d.ts +4 -2
  127. package/dist/components/base/text-inputs/textarea.d.ts +4 -2
  128. package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
  129. package/dist/components/base/value-inputs/slider.d.ts +5 -1
  130. package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
  131. package/dist/components/typography/text.styles.d.ts +26 -1
  132. package/dist/components/ui/combobox-dismiss.d.ts +16 -0
  133. package/dist/components/ui/combobox.d.ts +11 -6
  134. package/dist/components/ui/dialog.d.ts +1 -1
  135. package/dist/components/ui/popover.d.ts +1 -1
  136. package/dist/components/ui/sheet.d.ts +1 -1
  137. package/dist/composition.recipes-COdiFhxB.js +19 -0
  138. package/dist/composition.recipes-COdiFhxB.js.map +1 -0
  139. package/dist/containers-CRmHf7GP.js +104 -0
  140. package/dist/containers-CRmHf7GP.js.map +1 -0
  141. package/dist/{copyable-ClBuk_UK.js → copyable-CnGCZdX4.js} +4 -4
  142. package/dist/{copyable-ClBuk_UK.js.map → copyable-CnGCZdX4.js.map} +1 -1
  143. package/dist/{data-display-DT_khPl_.js → data-display-D4oujtx0.js} +239 -238
  144. package/dist/data-display-D4oujtx0.js.map +1 -0
  145. package/dist/{date-DCrsDTZc.js → date-Q7jnXxpk.js} +5 -5
  146. package/dist/{date-DCrsDTZc.js.map → date-Q7jnXxpk.js.map} +1 -1
  147. package/dist/{date-picker-ay0Pha_a.js → date-picker-zOt1oNss.js} +102 -90
  148. package/dist/date-picker-zOt1oNss.js.map +1 -0
  149. package/dist/date-pickers-cj8IXbDC.js +179 -0
  150. package/dist/date-pickers-cj8IXbDC.js.map +1 -0
  151. package/dist/{display-hAc1HjpI.js → display-BB4BL_-K.js} +8 -8
  152. package/dist/{display-hAc1HjpI.js.map → display-BB4BL_-K.js.map} +1 -1
  153. package/dist/{dropdown-menu-Cl4X7L5S.js → dropdown-menu-CjY8Vt7W.js} +8 -8
  154. package/dist/{dropdown-menu-Cl4X7L5S.js.map → dropdown-menu-CjY8Vt7W.js.map} +1 -1
  155. package/dist/features/activities.js +11 -11
  156. package/dist/features/ai-chat.js +9 -9
  157. package/dist/features/appointment-calendar.js +222 -220
  158. package/dist/features/appointment-calendar.js.map +1 -1
  159. package/dist/features/async-preview.js +8 -8
  160. package/dist/features/combobox.js +1 -1
  161. package/dist/features/comments.js +1 -1
  162. package/dist/features/data-view.js +10 -10
  163. package/dist/features/email-composer.js +275 -274
  164. package/dist/features/email-composer.js.map +1 -1
  165. package/dist/features/event-calendar.js +199 -198
  166. package/dist/features/event-calendar.js.map +1 -1
  167. package/dist/features/filters.js +1 -1
  168. package/dist/features/global-search.js +12 -12
  169. package/dist/features/kanban.js +4 -4
  170. package/dist/features/map.js +7 -7
  171. package/dist/features/media-library.js +623 -622
  172. package/dist/features/media-library.js.map +1 -1
  173. package/dist/features/mentions.js +1 -1
  174. package/dist/features/overlays.js +1 -1
  175. package/dist/features/products.js +973 -969
  176. package/dist/features/products.js.map +1 -1
  177. package/dist/features/questionnaire.js +12 -12
  178. package/dist/features/resource-assignment.js +8 -8
  179. package/dist/features/resource.js +113 -112
  180. package/dist/features/resource.js.map +1 -1
  181. package/dist/features/rich-text-editor.js +2 -2
  182. package/dist/features/schema-form.js +254 -253
  183. package/dist/features/schema-form.js.map +1 -1
  184. package/dist/features/suggestions.js +3 -3
  185. package/dist/features/sync.js +3 -3
  186. package/dist/features/table.js +1 -1
  187. package/dist/features/theme-tweaker.js +19 -19
  188. package/dist/features/theme-tweaker.js.map +1 -1
  189. package/dist/{feedback-BYIhtitP.js → feedback-DZNL5Lg1.js} +9 -9
  190. package/dist/{feedback-BYIhtitP.js.map → feedback-DZNL5Lg1.js.map} +1 -1
  191. package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DjwGx8eM.js} +2 -2
  192. package/dist/{field-affordance-recipes-DZhnIL_Y.js.map → field-affordance-recipes-DjwGx8eM.js.map} +1 -1
  193. package/dist/{filters-BGfvjP4d.js → filters-BcT-uoFy.js} +19 -19
  194. package/dist/{filters-BGfvjP4d.js.map → filters-BcT-uoFy.js.map} +1 -1
  195. package/dist/{form-field-CwH9y77i.js → form-field-CsgRmdit.js} +14 -8
  196. package/dist/form-field-CsgRmdit.js.map +1 -0
  197. package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-NXgjkmBG.js} +3 -3
  198. package/dist/{form-sizing-BdP_Mf5p.js.map → form-sizing-NXgjkmBG.js.map} +1 -1
  199. package/dist/{forms-B9G_xwzi.js → forms-BV5m5aQF.js} +83 -65
  200. package/dist/forms-BV5m5aQF.js.map +1 -0
  201. package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-Cd33AKbD.js} +288 -288
  202. package/dist/forms-numeric-Cd33AKbD.js.map +1 -0
  203. package/dist/{header-CGXuhcRm.js → header-BA697l4a.js} +14 -14
  204. package/dist/{header-CGXuhcRm.js.map → header-BA697l4a.js.map} +1 -1
  205. package/dist/hooks/useFormErrors.d.ts +1 -1
  206. package/dist/{hooks-Dkz0K2WT.js → hooks-BQ-L7Uu2.js} +2 -2
  207. package/dist/{hooks-Dkz0K2WT.js.map → hooks-BQ-L7Uu2.js.map} +1 -1
  208. package/dist/{icon-badge-DYKIwvOV.js → icon-badge-COWbCCWu.js} +3 -3
  209. package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-COWbCCWu.js.map} +1 -1
  210. package/dist/index.js +2 -2
  211. package/dist/input-Cdw4k0fb.js +289 -0
  212. package/dist/input-Cdw4k0fb.js.map +1 -0
  213. package/dist/{input-CZw8iU99.js → input-DOPL5_QE.js} +3 -3
  214. package/dist/{input-CZw8iU99.js.map → input-DOPL5_QE.js.map} +1 -1
  215. package/dist/item-BvZ2DR_x.js +277 -0
  216. package/dist/item-BvZ2DR_x.js.map +1 -0
  217. package/dist/layout/app-shell.js +1 -1
  218. package/dist/layout/auth.js +1 -1
  219. package/dist/layout/containers.js +1 -1
  220. package/dist/layout/header.js +1 -1
  221. package/dist/layout/hooks.js +1 -1
  222. package/dist/layout/navigation.js +1 -1
  223. package/dist/layout/page.js +1 -1
  224. package/dist/layout/settings.js +1 -1
  225. package/dist/layout/sidebar.js +2 -2
  226. package/dist/layout/workspace.js +1 -1
  227. package/dist/layout.js +10 -10
  228. package/dist/lib/affordance-geometry.generated.d.ts +6 -0
  229. package/dist/lib/ui-provider/types.d.ts +1 -1
  230. package/dist/lib/use-popup-focus-recovery.d.ts +8 -0
  231. package/dist/lib/utils.js +1 -1
  232. package/dist/{media-gallery-3zIVLMWH.js → media-gallery-CSl5W1Fy.js} +6 -6
  233. package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-CSl5W1Fy.js.map} +1 -1
  234. package/dist/{mentions-utuUvH1K.js → mentions-RKOQaaIB.js} +8 -8
  235. package/dist/{mentions-utuUvH1K.js.map → mentions-RKOQaaIB.js.map} +1 -1
  236. package/dist/{message-DZ_ruyUV.js → message-INU2xsxu.js} +4 -4
  237. package/dist/{message-DZ_ruyUV.js.map → message-INU2xsxu.js.map} +1 -1
  238. package/dist/metadata-list-qVV7AVxa.js +443 -0
  239. package/dist/metadata-list-qVV7AVxa.js.map +1 -0
  240. package/dist/{navigation-BzhHI3lo.js → navigation-BQNcg1jT.js} +8 -8
  241. package/dist/{navigation-BzhHI3lo.js.map → navigation-BQNcg1jT.js.map} +1 -1
  242. package/dist/{navigation-Bnotn4AQ.js → navigation-DLF3E1IC.js} +7 -7
  243. package/dist/{navigation-Bnotn4AQ.js.map → navigation-DLF3E1IC.js.map} +1 -1
  244. package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-WZEs-hYo.js} +2 -2
  245. package/dist/{navigation-row-recipes-BFLCk_Aq.js.map → navigation-row-recipes-WZEs-hYo.js.map} +1 -1
  246. package/dist/{number-DbV1Dija.js → number-E_OiIfJz.js} +5 -5
  247. package/dist/{number-DbV1Dija.js.map → number-E_OiIfJz.js.map} +1 -1
  248. package/dist/{overflow-tab-bar-CWY7Nogn.js → overflow-tab-bar-CrbqMteP.js} +107 -105
  249. package/dist/overflow-tab-bar-CrbqMteP.js.map +1 -0
  250. package/dist/{overlays-DNWmZrJ4.js → overlays-BlKynmde.js} +322 -319
  251. package/dist/overlays-BlKynmde.js.map +1 -0
  252. package/dist/page-CIwNUtGr.js +227 -0
  253. package/dist/page-CIwNUtGr.js.map +1 -0
  254. package/dist/page-header-commands-DFMlNYzN.js +128 -0
  255. package/dist/page-header-commands-DFMlNYzN.js.map +1 -0
  256. package/dist/{pagination-BL25hu2s.js → pagination-Ch8X_47u.js} +5 -5
  257. package/dist/{pagination-BL25hu2s.js.map → pagination-Ch8X_47u.js.map} +1 -1
  258. package/dist/{popover-menu-B9WWygpa.js → popover-menu-BYaCdFhf.js} +6 -6
  259. package/dist/{popover-menu-B9WWygpa.js.map → popover-menu-BYaCdFhf.js.map} +1 -1
  260. package/dist/{popover-7_m66eYW.js → popover-uwzX2vo7.js} +65 -63
  261. package/dist/popover-uwzX2vo7.js.map +1 -0
  262. package/dist/{primitives-BFK08r9M.js → primitives-Du64iDbb.js} +6 -6
  263. package/dist/{primitives-BFK08r9M.js.map → primitives-Du64iDbb.js.map} +1 -1
  264. package/dist/primitives.js +4 -4
  265. package/dist/{progress-B1VnCT0K.js → progress-BvF2oCdV.js} +5 -5
  266. package/dist/{progress-B1VnCT0K.js.map → progress-BvF2oCdV.js.map} +1 -1
  267. package/dist/{receipt-BVSOH3Xo.js → receipt-D789Jwyy.js} +6 -6
  268. package/dist/{receipt-BVSOH3Xo.js.map → receipt-D789Jwyy.js.map} +1 -1
  269. package/dist/{rich-text-GOUyKQ-s.js → rich-text-CLJEf76s.js} +4 -4
  270. package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-CLJEf76s.js.map} +1 -1
  271. package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-Cm1dpUpQ.js} +10 -10
  272. package/dist/{rich-text-editor-cRLC-eBK.js.map → rich-text-editor-Cm1dpUpQ.js.map} +1 -1
  273. package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-L__e4x47.js} +4 -4
  274. package/dist/{rich-text-editor-toolbar-DfXg0-VC.js.map → rich-text-editor-toolbar-L__e4x47.js.map} +1 -1
  275. package/dist/{scroll-area-DcI-M1UT.js → scroll-area-La5RXsEk.js} +2 -2
  276. package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-La5RXsEk.js.map} +1 -1
  277. package/dist/{separator-Bom7NsGO.js → separator-DAEV0w65.js} +2 -2
  278. package/dist/{separator-Bom7NsGO.js.map → separator-DAEV0w65.js.map} +1 -1
  279. package/dist/{separator-BDV-Y648.js → separator-GNfPG-90.js} +3 -3
  280. package/dist/{separator-BDV-Y648.js.map → separator-GNfPG-90.js.map} +1 -1
  281. package/dist/services/actions.js +1 -1
  282. package/dist/settings-BA2iboic.js +174 -0
  283. package/dist/settings-BA2iboic.js.map +1 -0
  284. package/dist/{sheet-CGpB3omz.js → sheet-DoAxTb2J.js} +75 -73
  285. package/dist/sheet-DoAxTb2J.js.map +1 -0
  286. package/dist/{sidebar-A0ElHINE.js → sidebar-ByqKR_W5.js} +13 -13
  287. package/dist/{sidebar-A0ElHINE.js.map → sidebar-ByqKR_W5.js.map} +1 -1
  288. package/dist/{sidebar-CPx_7YBa.js → sidebar-D2iSnGJ7.js} +11 -11
  289. package/dist/{sidebar-CPx_7YBa.js.map → sidebar-D2iSnGJ7.js.map} +1 -1
  290. package/dist/{skeleton-Byjnt7qr.js → skeleton-CUj8O5Bd.js} +3 -3
  291. package/dist/{skeleton-Byjnt7qr.js.map → skeleton-CUj8O5Bd.js.map} +1 -1
  292. package/dist/smart-card-CqkzQsK-.js +614 -0
  293. package/dist/smart-card-CqkzQsK-.js.map +1 -0
  294. package/dist/{structure-BmisBK-3.js → structure-C0V0_Fyf.js} +3 -3
  295. package/dist/{structure-BmisBK-3.js.map → structure-C0V0_Fyf.js.map} +1 -1
  296. package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
  297. package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
  298. package/dist/style.css +1 -1
  299. package/dist/{table-DsfzoUia.js → table-CpvnzJn9.js} +3 -3
  300. package/dist/{table-DsfzoUia.js.map → table-CpvnzJn9.js.map} +1 -1
  301. package/dist/{table-BweFy_P9.js → table-DH7rozUv.js} +19 -19
  302. package/dist/{table-BweFy_P9.js.map → table-DH7rozUv.js.map} +1 -1
  303. package/dist/{tabs-CDocW5D1.js → tabs-eqVsJZWO.js} +7 -7
  304. package/dist/{tabs-CDocW5D1.js.map → tabs-eqVsJZWO.js.map} +1 -1
  305. package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-DXItiR0O.js} +101 -98
  306. package/dist/text-inputs-DXItiR0O.js.map +1 -0
  307. package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
  308. package/dist/text.styles-B64My8RZ.js.map +1 -0
  309. package/dist/theme.css +152 -112
  310. package/dist/{timelines-CwM_9IhD.js → timelines-DmtztAY_.js} +10 -10
  311. package/dist/{timelines-CwM_9IhD.js.map → timelines-DmtztAY_.js.map} +1 -1
  312. package/dist/{tooltip-yiRJUFjp.js → tooltip-B4hjKtoV.js} +3 -3
  313. package/dist/{tooltip-yiRJUFjp.js.map → tooltip-B4hjKtoV.js.map} +1 -1
  314. package/dist/{tree-WnKQzwbq.js → tree-CV11PURP.js} +8 -8
  315. package/dist/{tree-WnKQzwbq.js.map → tree-CV11PURP.js.map} +1 -1
  316. package/dist/typography/rich-text.js +1 -1
  317. package/dist/typography-CSyJrh28.js +117 -0
  318. package/dist/typography-CSyJrh28.js.map +1 -0
  319. package/dist/typography.js +1 -1
  320. package/dist/{ui-provider-C_U0Xma4.js → ui-provider-CQCuCBcy.js} +3 -3
  321. package/dist/ui-provider-CQCuCBcy.js.map +1 -0
  322. package/dist/ui-provider.js +1 -1
  323. package/dist/{upload-CXyxmQBP.js → upload-C9SA0X-8.js} +11 -11
  324. package/dist/{upload-CXyxmQBP.js.map → upload-C9SA0X-8.js.map} +1 -1
  325. package/dist/{upload-queue-Boscubn9.js → upload-queue-DhQJiSRc.js} +9 -9
  326. package/dist/{upload-queue-Boscubn9.js.map → upload-queue-DhQJiSRc.js.map} +1 -1
  327. package/dist/{usage-card-BhO5eqkX.js → usage-card-DVTRDmGz.js} +134 -133
  328. package/dist/usage-card-DVTRDmGz.js.map +1 -0
  329. package/dist/use-popup-focus-recovery-C0QPvgOR.js +36 -0
  330. package/dist/use-popup-focus-recovery-C0QPvgOR.js.map +1 -0
  331. package/dist/{utils-BRhFDwuU.js → utils-CF3c95Io.js} +68 -5
  332. package/dist/utils-CF3c95Io.js.map +1 -0
  333. package/dist/value-inputs-C0o70p-U.js +980 -0
  334. package/dist/value-inputs-C0o70p-U.js.map +1 -0
  335. package/dist/{value-typography-BP8OG6h5.js → value-typography-ClupF0Gz.js} +2 -2
  336. package/dist/{value-typography-BP8OG6h5.js.map → value-typography-ClupF0Gz.js.map} +1 -1
  337. package/dist/workspace-9EFVXUyk.js +410 -0
  338. package/dist/workspace-9EFVXUyk.js.map +1 -0
  339. package/docs/consumer-skill/SKILL.md +14 -129
  340. package/docs/consumer-skill/examples/app-layout.tsx +22 -12
  341. package/docs/consumer-skill/examples/authentication.tsx +77 -0
  342. package/docs/consumer-skill/examples/edit.tsx +30 -38
  343. package/docs/consumer-skill/examples/manifest.json +51 -1
  344. package/docs/consumer-skill/examples/rhf-bindings.tsx +86 -0
  345. package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
  346. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +92 -0
  347. package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
  348. package/docs/consumer-skill/references/agents-md.md +17 -7
  349. package/docs/consumer-skill/references/authentication.md +42 -0
  350. package/docs/consumer-skill/references/component-contracts.json +319824 -0
  351. package/docs/consumer-skill/references/composition-mapping.md +92 -0
  352. package/docs/consumer-skill/references/composition.md +43 -19
  353. package/docs/consumer-skill/references/design-contract.md +32 -0
  354. package/docs/consumer-skill/references/discovery.md +84 -7
  355. package/docs/consumer-skill/references/installation.md +45 -35
  356. package/docs/consumer-skill/references/integration.md +6 -2
  357. package/docs/consumer-skill/references/public-api.json +1520 -66
  358. package/docs/consumer-skill/references/review.md +9 -4
  359. package/docs/consumer-skill/references/rhf-workflows.md +86 -0
  360. package/docs/consumer-skill/references/screen-archetypes.md +22 -0
  361. package/docs/consumer-skill/references/theming.md +8 -9
  362. package/docs/consumer-skill/references/tokens.json +12 -3
  363. package/docs/consumer-skill/references/workflows.md +7 -5
  364. package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
  365. package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
  366. package/docs/consumer-skill/scripts/composition.mjs +198 -0
  367. package/docs/consumer-skill/scripts/discovery.mjs +42 -10
  368. package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
  369. package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
  370. package/docs/consumer-skill/scripts/inspection.mjs +138 -0
  371. package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
  372. package/docs/consumer-skill/scripts/setup-skills.mjs +76 -0
  373. package/docs/consumer-skills/themelia-components/SKILL.md +30 -0
  374. package/docs/consumer-skills/themelia-composition/SKILL.md +35 -0
  375. package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
  376. package/docs/consumer-skills/themelia-foundation/SKILL.md +14 -0
  377. package/docs/consumer-skills/themelia-tokenization/SKILL.md +35 -0
  378. package/package.json +6 -4
  379. package/templates/README.md +39 -0
  380. package/templates/admin-shell-template.tsx +382 -0
  381. package/templates/analytics-operations-template.tsx +376 -0
  382. package/templates/customers-template.tsx +509 -0
  383. package/templates/index.ts +29 -0
  384. package/templates/orders-template.tsx +1102 -0
  385. package/templates/products-template.tsx +834 -0
  386. package/templates/user-permissions-template.tsx +450 -0
  387. package/dist/action-menu-CllU52Mm.js +0 -280
  388. package/dist/action-menu-CllU52Mm.js.map +0 -1
  389. package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
  390. package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
  391. package/dist/app-shell-C4FhvCqF.js.map +0 -1
  392. package/dist/cards-BaBZR-AU.js.map +0 -1
  393. package/dist/checkbox-AWIhNhmo.js.map +0 -1
  394. package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
  395. package/dist/combobox-C0EQW6dr.js.map +0 -1
  396. package/dist/combobox-xCQ2RMNE.js.map +0 -1
  397. package/dist/comments-BYYlTA8E.js.map +0 -1
  398. package/dist/containers-Mu1LMGV1.js +0 -103
  399. package/dist/containers-Mu1LMGV1.js.map +0 -1
  400. package/dist/data-display-DT_khPl_.js.map +0 -1
  401. package/dist/date-picker-ay0Pha_a.js.map +0 -1
  402. package/dist/date-pickers-Ccw8DL2b.js +0 -175
  403. package/dist/date-pickers-Ccw8DL2b.js.map +0 -1
  404. package/dist/form-field-CwH9y77i.js.map +0 -1
  405. package/dist/forms-B9G_xwzi.js.map +0 -1
  406. package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
  407. package/dist/input-DQdEd0YD.js +0 -263
  408. package/dist/input-DQdEd0YD.js.map +0 -1
  409. package/dist/item-K5_ghvze.js +0 -275
  410. package/dist/item-K5_ghvze.js.map +0 -1
  411. package/dist/metadata-list-8N16ZMW_.js +0 -405
  412. package/dist/metadata-list-8N16ZMW_.js.map +0 -1
  413. package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
  414. package/dist/overlays-DNWmZrJ4.js.map +0 -1
  415. package/dist/page-Bgl1F560.js +0 -224
  416. package/dist/page-Bgl1F560.js.map +0 -1
  417. package/dist/page-header-commands-DOb6WsfD.js +0 -126
  418. package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
  419. package/dist/popover-7_m66eYW.js.map +0 -1
  420. package/dist/settings-ybnjVwbd.js +0 -171
  421. package/dist/settings-ybnjVwbd.js.map +0 -1
  422. package/dist/sheet-CGpB3omz.js.map +0 -1
  423. package/dist/smart-card-DiC5aac3.js +0 -604
  424. package/dist/smart-card-DiC5aac3.js.map +0 -1
  425. package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
  426. package/dist/text.styles-g4He6UIW.js.map +0 -1
  427. package/dist/typography-UTnveOEy.js +0 -117
  428. package/dist/typography-UTnveOEy.js.map +0 -1
  429. package/dist/ui-provider-C_U0Xma4.js.map +0 -1
  430. package/dist/usage-card-BhO5eqkX.js.map +0 -1
  431. package/dist/utils-BRhFDwuU.js.map +0 -1
  432. package/dist/value-inputs-DXPDjvBU.js +0 -963
  433. package/dist/value-inputs-DXPDjvBU.js.map +0 -1
  434. package/dist/workspace-Cdrg7k9f.js +0 -408
  435. package/dist/workspace-Cdrg7k9f.js.map +0 -1
@@ -0,0 +1,92 @@
1
+ # Executable composition mapping
2
+
3
+ Use this when a screen needs several cooperating owners or when a component's
4
+ surface and placement are unclear. The mapper resolves explicit responsibilities
5
+ into exact public components and supported regions. The application still decides
6
+ the user's priorities, data, commands and meaningful grouping.
7
+
8
+ First resolve the installed package and verify copied guidance using
9
+ [installed setup](installation.md). These commands assume its conventional
10
+ `node_modules` location:
11
+
12
+ ```sh
13
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --roles
14
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --role facts
15
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern record-detail --main invoice-lines --aside facts
16
+ ```
17
+
18
+ For a complete copied bundle, use the shared skill's
19
+ `scripts/map-composition.mjs` instead. It resolves `public-api.json` and
20
+ `component-contracts.json` beside that script's shared references, independently
21
+ of the current directory. Node is sufficient; the mapper does not load React,
22
+ TypeScript, optional component peers or the consumer's application code.
23
+
24
+ ## Describe responsibilities, then inspect the plan
25
+
26
+ 1. Turn the business brief into independent subjects: for example invoice lines
27
+ in the main region and record facts in the supporting region. A responsibility
28
+ is a role tag reported by `--roles`; a complete business brief is not a role.
29
+ 2. Use `--role` to inspect a role's mapped owners. Role names accept spaces or
30
+ kebab-case. A qualified `themelia-react-ui/<family>#<Symbol>` selector chooses
31
+ an exact mapped contract when a role has several candidates.
32
+ 3. Select a pattern and repeat `--main` or `--aside` for each subject. Supported
33
+ patterns are `record-detail`, `collection`, `edit`, `analytics` and `embedded`.
34
+ They identify structural context; they do not install form state, fetch data
35
+ or choose application-specific variants. Edit plans explicitly retain the
36
+ application's native form and submission requirements.
37
+ Use `--limit 1..10` to bound candidate details; it does not discard requested
38
+ subjects or hide unresolved coverage.
39
+ 4. Read `tree`, `coverage`, `unresolved`, `warnings`, `requiredPeers`,
40
+ `applicationOwns` and the focused `nextReads` before implementing. Inspect each
41
+ chosen unfamiliar component with the [API inspector](discovery.md#inspect-a-selected-component).
42
+
43
+ `requiredPeers` lists the selected families' additional optional package peers;
44
+ `baselinePeers` lists the package's nonoptional peers. Both still require the
45
+ installed setup and matching versions. An empty additional list does not remove
46
+ React or Base UI requirements.
47
+
48
+ The record-detail example resolves a route owner and, because support is
49
+ requested, a main/support layout. Its `tree.slots` uses actual insertion props
50
+ such as `children`, `main` and `aside`. Parent-surface content can receive a
51
+ subject Card at that boundary. Already framed owners keep their own surface;
52
+ variant-dependent owners require inspection before choosing framing.
53
+
54
+ For an existing Card boundary:
55
+
56
+ ```sh
57
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern embedded --parent Card --main facts
58
+ ```
59
+
60
+ That plan uses the selected host's `children` region without adding another Page
61
+ or Card. Qualify an ambiguous parent with `--import <exact public import>`.
62
+ An embedded request without a parent leaves the host decision explicit; inspect
63
+ its unresolved ownership before creating a new boundary.
64
+ Only an explicitly declared route-child slot permits a Page inside a shell;
65
+ AuthShell and bounded workspaces are ordinary content hosts. Variant-dependent
66
+ hosts retain inspection warnings before another framed subject is added.
67
+
68
+ ## Read the result's scope
69
+
70
+ The output is advisory JSON. `mapped` means the requested roles resolved under
71
+ the mapper's supported contracts. It does not mean an application is implemented,
72
+ accessible, visually accepted or ready for delivery. `partial` and `unresolved`
73
+ retain requests the mapper could not place or uniquely identify; choose a more
74
+ specific role or qualified mapped owner. Metadata coverage is deliberately
75
+ explicit: an unmapped component can still be a valid public component.
76
+
77
+ Mappings belong to exact import/symbol pairs in the existing authored catalogue,
78
+ then flow into its generated public index. They describe role tags, owner kind,
79
+ region/cell/overlay placement, surface ownership, insertion props and any authored
80
+ literal recommendations. Generation checks them against the actual public API.
81
+ They do not introduce another theme, token system or component registry.
82
+
83
+ Table-cell identities stay in column renderers, and overlays stay at their
84
+ composing app/feature boundary. Similar collection owners remain alternatives;
85
+ a request that cannot distinguish them stays unresolved. App data, callbacks,
86
+ permissions, forms and asynchronous lifecycle still follow the selected owner's
87
+ contract and matching recipe.
88
+
89
+ Use [composition ownership](composition.md), [screen archetypes](screen-archetypes.md)
90
+ and [form workflows](rhf-workflows.md) for the selected task. After implementing,
91
+ run the existing source checker and app checks, inspect narrow/wide light/dark
92
+ appearance, and execute the relevant interactions from [review](review.md).
@@ -1,6 +1,6 @@
1
1
  # Composition
2
2
 
3
- The [design contract](design-contract.md) separates application layout freedom
3
+ The [design contract](design-contract.md#semantic-roles) defines shared spacing and typography roles and separates application layout freedom
4
4
  from library-owned anatomy. Use supported props and slots inside shared surfaces;
5
5
  keep placement, width, wrapping and overflow with the surrounding composition.
6
6
 
@@ -82,7 +82,8 @@ export and destructive command should not all inherit the same visual emphasis.
82
82
  }}>{/* route content */}</Page>
83
83
  ```
84
84
 
85
- A record split into sections adds `header.tabs`. The tabs sit under the header's
85
+ When a record has separately selected or routed sections, use `header.tabs`.
86
+ A continuous detail document can keep its sections in the body. The tabs sit under the header's
86
87
  copy and commands, a `badge` shows a count, tabs that do not fit move into a More
87
88
  menu, and `onValueChange` switches the section or routes. Labels name the
88
89
  command; an icon on every command repeats it, so keep `+` on an add command and
@@ -222,21 +223,39 @@ for richer content. Facts and rows follow the same rule: one glyph repeated on
222
223
  every MetadataList item or Item row is decoration, so leave `icon`/media empty.
223
224
 
224
225
  Card `gap` owns spacing between regions; `contentGap` owns direct body-child
225
- spacing; `textGap` owns title/supporting-copy rhythm. Region spacing defaults to
226
- `xl` (`md` for `padding="none"`). Use a semantic region gap for compact cards
227
- instead of resetting padding or adding local margins.
228
-
229
- Ordinary independent cards omit `padding` and retain `md` (the full surface
230
- inset, 20px at default roots). `sm` is half that inset (10px), for a deliberately
231
- compact subject; it is not the default for forms, settings, metrics or resource
232
- pages. Component size and
233
- density do not choose Card padding. `lg` uses 1.8 times the inset (36px), while
234
- `none` removes it. All sizes follow the surface roots and space-scale.
235
- Card dividers are on by default: a framed card rules its header and footer apart,
236
- while flat, card-free structure and a `headerPlacement="frame"` header draw no
237
- rule unless asked. UIProvider's `card.defaultHeaderDivider` and
238
- `card.defaultFooterDivider` (both `true`) turn the framed rules off app-wide;
239
- explicit per-card booleans win. Header/footer-only cards render one shared divider.
226
+ spacing; `textGap` owns title/supporting-copy rhythm. `contentGap` is unset by
227
+ default, so raw body children retain their inline or caller-owned layout.
228
+ Choose `contentGap="xl"` for related siblings and `contentGap="2xl"` for
229
+ independent sections. Omit it around an existing Grid/Stack or a single feature
230
+ that already owns its layout:
231
+
232
+ ```tsx
233
+ <Card title="Billing" contentGap="xl">
234
+ <MetadataList columns={1} items={[
235
+ { label: 'Plan', value: 'Studio' },
236
+ { label: 'Billing cycle', value: 'Monthly' },
237
+ ]} />
238
+ <Text type="secondary" size="xs">Invoices go to billing@northstar.example.</Text>
239
+ </Card>
240
+ ```
241
+
242
+ This lets Card own body rhythm without an extra caller wrapper. For independent sections,
243
+ change the Card to `contentGap="2xl"` and let each section own its heading/copy
244
+ group. The default regional gap
245
+ follows the surface inset tier: 12px with `padding="sm"`, 24px with omitted/`md`
246
+ or `none`, and 32px with `lg`, before spacing scale. An explicit semantic `gap`
247
+ overrides it without changing the insets. See [semantic roles](design-contract.md#semantic-roles).
248
+
249
+ Ordinary independent cards omit `padding` and retain `md` (24px at default
250
+ roots). Card supports `sm` (12px), `md` (24px), `lg` (32px) and `none` (no inset).
251
+ The general surface scale also has a 16px tier; Card does not expose it as a padding prop.
252
+ Component size and density do not choose Card padding. All tiers follow the
253
+ surface roots and space-scale.
254
+ Card defaults to `surface="card"`, with no header rule and a footer rule.
255
+ Flat, card-free structure and a `headerPlacement="frame"` header draw no rule
256
+ unless asked. UIProvider's `card.defaultHeaderDivider` (false) and
257
+ `card.defaultFooterDivider` (true) configure these rules app-wide; explicit
258
+ per-card booleans win. Header/footer-only cards render one shared divider.
240
259
  Inside the body, separate a card's sections with `contentGap` or a Stack gap
241
260
  clearly larger than the row gap (`2xl` between sections), not rules.
242
261
  Overlays rule their regions the same way: `ActionDialog`, `ActionDrawer` and `ConfirmDialog`
@@ -448,10 +467,15 @@ TwoColumnLayout defaults to its existing viewport breakpoint; choose
448
467
  adaptTo="container" inside Container/PageViewport to adapt at 48rem of usable
449
468
  parent width while preserving main-before-aside DOM/focus order.
450
469
 
451
- See the installed [workspace recipe](../examples/app-layout.tsx).
470
+ The installed [app-shell recipe](../examples/app-layout.tsx) exports a copyable
471
+ `WorkspaceLayout` that hosts route children directly. Put `AccountDetailPage` or
472
+ another route Page inside it. `WorkspaceExamplePage` separately demonstrates a
473
+ Workspace title, Create callback and narrow measure; replace that example when
474
+ composing a real route. This recipe name is local to the copied file; the public
475
+ `WorkspaceLayout` from `layout/workspace` is the record shell described below.
452
476
 
453
477
  PageViewport owns scrolling and adds no padding. Page defaults to `gutter="lg"`
454
- and `padding="lg"` (36px at shipped roots), so it owns inline/block space once.
478
+ and `padding="lg"` (32px at shipped roots), so it owns inline/block space once.
455
479
  `narrow` selects centered `md` width; explicit `maxWidth` wins. Header copy
456
480
  defaults to dense; `textGap="normal"` is an explicit alternative. Do not assume
457
481
  an app shell supplies gutters because it supplies a viewport. Set `gutter="none"`
@@ -52,6 +52,38 @@ requests one shared boundary. Setting both does not add a second line or a blank
52
52
  body strip. Real body/alert regions retain their distinct requested boundaries;
53
53
  an explicitly expandable card retains its collapse region.
54
54
 
55
+ ## Semantic roles
56
+
57
+ Choose spacing by the relationship between content, before choosing a gap tier.
58
+ These base measurements use the shipped roots; spacing scales once through
59
+ `--space-scale`.
60
+
61
+ | Relationship | Default | Owner |
62
+ | --- | --- | --- |
63
+ | Structural title/supporting copy | `normal`, 4px | Headed owner or custom copy Stack |
64
+ | Dense supporting copy | `dense`, 2px | Row/menu copy group |
65
+ | Ordinary commands | `md`, 8px | Page, record and workspace command groups |
66
+ | Compact row affordances | `xs`, 4px | Row action group |
67
+ | Related fields/content | `xl`, 16px | Form or related-content group |
68
+ | Independent subject regions | `2xl`, 24px | Page body, TwoColumnLayout, resource, workspace and settings subjects |
69
+ | Page header/body separation | `3xl`, 32px | Page composition |
70
+ | Surface header/body/footer | Surface-derived regional gap | Card or overlay anatomy, independent of peer gaps |
71
+
72
+ Generic Stack and Grid keep their existing defaults; choose their semantic gap
73
+ for the relationship they host. A Card's regional gap derives from its surface
74
+ inset tier and remains independent of the gap between separate Cards. For Card,
75
+ omitted `padding` means `md` (24px); `sm` is 12px, `lg` is 32px and `none` removes
76
+ insets while retaining the 24px default regional gap. Explicit `gap` overrides
77
+ that regional recipe. The general surface vocabulary also has a 16px tier; it is
78
+ not an additional Card padding prop.
79
+
80
+ Typography follows route, subject and subsection roles at 20/16/14px before
81
+ customization. Body and supporting copy normally use 14/12px. Semantic tags stay
82
+ independent of visual size; supported `size`, typography/provider defaults and
83
+ CSS text-root overrides remain available. Density changes row/control geometry,
84
+ not the primary text hierarchy. Preserve a deliberate website/hero emphasis or
85
+ custom render content rather than forcing every heading onto the admin scale.
86
+
55
87
  ## Keep these choices independent
56
88
 
57
89
  | Choice | Purpose | Does not choose |
@@ -14,9 +14,9 @@ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/find-components.
14
14
 
15
15
  For a copied skill, replace the script path with that copy's `scripts/find-components.mjs`. Copy the complete skill folder: the script resolves its adjacent `references/public-api.json` relative to itself, regardless of the working directory. It needs Node compatible with the package's engine requirement, not an npm/global CLI or extra dependency.
16
16
 
17
- Queries accept multiple words, quoted or separate. Every term must match metadata
18
- as a word; `stat` does not match `state` or `status`. An unknown term produces
19
- empty results. Exact imports and case-exact exported names such as `Table` or
17
+ Queries accept multiple words, quoted or separate. Strict `results` require every
18
+ term to match metadata as a word; `stat` does not match `state` or `status`. An
19
+ unknown term leaves strict results empty. Exact imports and case-exact exported names such as `Table` or
20
20
  `Empty` select their precise contract. Ordinary task nouns `table` and `empty`
21
21
  retain DataTable/DataView and EmptyState alongside the base anatomy. Exported
22
22
  types and helper symbols remain available by their exact API name; documented
@@ -26,9 +26,18 @@ component symbols and curated aliases drive task recommendations.
26
26
  Foundations but filters under `--layer base`. `--limit` accepts 1–100 and defaults
27
27
  to 5. Invalid flags/options or incompatible indexes exit nonzero on stderr.
28
28
 
29
- If a query returns no results, shorten it to the main responsibility or an exact
30
- symbol, then remove the layer filter. No result does not prove the package lacks
31
- that responsibility. Read the selected result's choose/avoid guidance and
29
+ When a natural-language query has no strict matches, the finder may add bounded
30
+ `related.results` separately. For example, `member workspace` can suggest the
31
+ workspace owner while explicitly reporting `workspace` as matched and `member`
32
+ as unmatched. These are incomplete context suggestions, not proof that the owner
33
+ implements the whole request. Unmatched terms describe missing metadata evidence;
34
+ they do not establish an unsupported capability. Read the suggested owner's
35
+ choose/avoid guidance and inspect its contract before choosing. Unknown-only
36
+ queries, API-like CamelCase names and explicit import paths do not recover.
37
+
38
+ If there are no useful related owners, shorten the query to the main
39
+ responsibility or an exact symbol, then remove the layer filter. No result does
40
+ not prove the package lacks that responsibility. Read the selected result's choose/avoid guidance and
32
41
  alternatives, then follow `nextReads`; do not load every reference. For routine compact searchable selection, search
33
42
  `PopoverMenu` or `compact searchable selection`; surface adjectives describe
34
43
  variants, not permission to rebuild the owner's padding.
@@ -44,7 +53,7 @@ description matches. Start with responsibilities such as `record directory`,
44
53
  `comparison table`, `identity cell`, `fact list`, `page header`, `query toolbar`
45
54
  or `theme boundary`. Read choose/avoid and app-owned responsibilities before
46
55
  deciding; a directory result does not require DataView when its workflow differs.
47
- Unknown terms still return no result; no fuzzy API or guessed prop is invented.
56
+ Unknown terms never become strict matches; no fuzzy API or guessed prop is invented.
48
57
 
49
58
  Task language also includes `dashboard KPIs`, `dashboard metrics`, `revenue
50
59
  overview`, `statistic cards`, `usage statistics` and `single resource page`.
@@ -87,6 +96,14 @@ new code with the replacement. The public index carries the same map per family.
87
96
  Exact guide aliases precede generic overlap, and unrelated family pages
88
97
  do not fill the result merely to reach three entries.
89
98
 
99
+ The optional `related` object leaves strict `total` and `results` unchanged. It
100
+ reports an explanation, its own `total` and bounded `results` with `match:
101
+ "partial"`, `matchedTerms` and `unmatchedTerms`. Term coverage ranks first, then
102
+ the existing owner score and import ordering. These suggestions follow the same
103
+ layer filter and limit, and use the same published owners and focused reads;
104
+ package/path vocabulary alone cannot suggest an owner. The static finder shows
105
+ their incomplete coverage separately from full matches.
106
+
90
107
  `nextReads.declaration` is relative to the installed package root.
91
108
  `nextReads.references` and `nextReads.examples[].file` are relative to this
92
109
  skill folder, so they also work with a complete copied skill. Examples report
@@ -105,6 +122,66 @@ owners and focused reads; declarations establish actual props and behavior.
105
122
 
106
123
  Read each declaration relative to the installed package root, for example `node_modules/themelia-react-ui/dist/components/base/cards/index.d.ts`, following its relative exports as needed. Copying this skill copies metadata, not the declaration tree: use declarations from the same installed package version. Never combine metadata from one version with another version's declarations.
107
124
 
125
+ ## Map cooperating components
126
+
127
+ The [composition mapper](composition-mapping.md) resolves explicit role tags into
128
+ qualified owners and an advisory region tree. Use it after decomposing a screen
129
+ into subjects, or inspect the available roles before choosing components:
130
+
131
+ ```sh
132
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --roles
133
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern record-detail --main invoice-lines --aside facts
134
+ ```
135
+
136
+ Read its unresolved requirements, surface decisions and peers; the finder and
137
+ API inspector remain useful for responsibilities outside mapped coverage.
138
+
139
+ ## Inspect a selected component
140
+
141
+ The finder chooses owners. The dependency-free inspector retrieves a bounded,
142
+ versioned API contract for an exact exported component without loading the full
143
+ catalogue or manually chasing its declaration barrel:
144
+
145
+ ```sh
146
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs DataTable --import themelia-react-ui/features/table
147
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs DataTable --import themelia-react-ui/features/table --prop onRowSelectionChange
148
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs ThemeScope --import themelia-react-ui/ui-provider
149
+ ```
150
+
151
+ Use `--import` to select an exact public contract when a symbol has several
152
+ owners. `--prop` requests one exact property; `--limit` bounds the initial list
153
+ of props. Read reported omissions before assuming a property is absent. Unknown
154
+ exports/props and ambiguous unqualified contracts fail explicitly. Aliases can
155
+ share implementation while distinct exports such as the two ThemeScope owners
156
+ have different APIs.
157
+
158
+ The generated `component-contracts.json` comes from the existing TypeScript/prop
159
+ documentation pipeline. Types, call signatures, generic parameters, overloads
160
+ and mode-dependent requirements remain visible. A prop required in one union
161
+ branch is not universally required. Defaults are only those documented by that
162
+ pipeline; an unknown default is not inferred. Native attributes and named helper
163
+ types still lead to installed declarations where the bounded contract needs
164
+ more detail. Inspect callback types and controlled/default state before adapting
165
+ a recipe; sharing a visual shape does not mean controls share a value contract.
166
+
167
+ The copied inspector reads its adjacent shared metadata, like the finder. Verify
168
+ the complete copied bundle and installed identity first. It does not install
169
+ dependencies, alter an app, or add an editor/type-checking runtime.
170
+
171
+ ## Inspect theme vocabulary
172
+
173
+ ```sh
174
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs surface --limit 8
175
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs radius --limit 5
176
+ ```
177
+
178
+ Token lookup reads the existing generated token index. It distinguishes public
179
+ structural roots and advanced settings from derived utility vocabulary. A
180
+ utility match does not become an override root. Unreported semantic theme values
181
+ must be read from the installed stylesheet and [theme guide](theming.md); the
182
+ tool does not invent a palette. The tokenization skill owns changing these
183
+ shared roles and verifying the effects across controls/surfaces and portals.
184
+
108
185
  `ThemeScope` has distinct contracts. Root and `themelia-react-ui/ui-provider` export the basic CSS-inheritance boundary with native div/style props and portal hosting. `themelia-react-ui/features/theme-tweaker` exports the advanced theme-definition scope. Inspect the result's responsibility and that exact family's declaration before selecting props.
109
186
 
110
187
  The index retains schemaVersion/discoveryVersion 1; optional family `recipes` and `references`
@@ -1,5 +1,26 @@
1
1
  # Installed package and skill setup
2
2
 
3
+ ## Choose the CSS path
4
+
5
+ **Standalone compiled CSS:** import `themelia-react-ui/style.css` once in the app entry. It includes component styles and the documented public utility vocabulary; components work without a host reset, Tailwind processing or private-source scanning. It deliberately omits global preflight. This path does not generate arbitrary utility classes written in app source.
6
+
7
+ **Tailwind v4 application utilities:** when the app authors Tailwind classes, process this application stylesheet through its Tailwind v4 build integration:
8
+
9
+ ```css
10
+ @import "tailwindcss";
11
+ @import "themelia-react-ui/style.css";
12
+ @import "themelia-react-ui/theme.css";
13
+ ```
14
+
15
+ Tailwind supplies app-generated utilities and its layered preflight; theme.css makes the semantic and structural vocabulary available to that compilation. No package-private source scan is required. The default layer order is `theme, base, components, utilities`. Keep app resets inside `@layer base`; unlayered universal/tag resets outrank layered package styles regardless of import order. Do not blanket-reset `[data-slot]`, which also belongs to third-party and app markup. Put intentional scoped app overrides after these imports. See [integration](integration.md) for an optional app-owned reset and provider setup.
16
+
17
+
18
+ Themelia 2.0.4 requires the official `@base-ui/react ^1.9.0` npm peer alongside
19
+ React, React DOM and Lucide. An app already using `^1.9.0` can retain that range.
20
+ Remove any older private Base UI archive pin or override before refreshing the
21
+ lockfile; dismissal translations and nested popup focus belong to Themelia's
22
+ wrappers and work with the official package.
23
+
3
24
  Run from the consuming app or one of its subdirectories. Resolve a public
4
25
  entrypoint rather than guessing a hoisted node_modules path or importing
5
26
  `themelia-react-ui/package.json`, which is not an exported entrypoint. The following
@@ -25,27 +46,15 @@ while (true) {
25
46
  }
26
47
  const installedSkill = path.join(root, 'docs/consumer-skill');
27
48
  const selectedSkill = process.env.THEMELIA_SKILL_DIR ?? installedSkill;
28
- for (const file of ['public-api.json', 'tokens.json']) {
49
+ for (const file of ['public-api.json', 'tokens.json', 'component-contracts.json']) {
29
50
  const installed = readJson(path.join(installedSkill, 'references', file));
30
51
  assert.equal(installed.package, manifest.name, 'Installed guidance package mismatch');
31
52
  assert.equal(installed.version, manifest.version, 'Installed guidance version mismatch');
32
- const selected = readJson(path.join(selectedSkill, 'references', file));
33
- assert.deepEqual(selected, installed, 'Copied skill is stale; refresh the complete folder');
34
53
  }
35
54
  if (fs.realpathSync(selectedSkill) !== fs.realpathSync(installedSkill)) {
36
- function compareAssets(directory) {
37
- for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
38
- if (entry.name === '.DS_Store') continue;
39
- const installed = path.join(directory, entry.name);
40
- const selected = path.join(selectedSkill, path.relative(installedSkill, installed));
41
- const info = fs.lstatSync(installed);
42
- assert(!info.isSymbolicLink(), 'Installed guidance must contain real assets');
43
- assert(fs.existsSync(selected) && !fs.lstatSync(selected).isSymbolicLink(), 'Copied skill is stale; missing or linked asset');
44
- if (info.isDirectory()) compareAssets(installed);
45
- else assert(fs.readFileSync(installed).equals(fs.readFileSync(selected)), 'Copied skill is stale; refresh the complete folder');
46
- }
47
- }
48
- compareAssets(installedSkill);
55
+ const { pathToFileURL } = await import('node:url');
56
+ const { checkCopiedConsumerBundle } = await import(pathToFileURL(path.join(installedSkill, 'scripts/setup-skills.mjs')).href);
57
+ checkCopiedConsumerBundle({ packageRoot: root, destination: path.dirname(selectedSkill) });
49
58
  }
50
59
  // The app's project instructions block records the version it was pasted from.
51
60
  const instructions = ['AGENTS.md', 'CLAUDE.md'].find(file => fs.existsSync(file));
@@ -55,7 +64,7 @@ console.log(JSON.stringify({ package: manifest.name, version: manifest.version,
55
64
  JS
56
65
  ```
57
66
 
58
- Use the reported root for the bundled finder, stylesheet paths and published
67
+ Use the reported root for the bundled finder/inspectors, stylesheet paths and published
59
68
  declarations. Install required peers from that manifest and optional peers for
60
69
  the exact imported families from `references/public-api.json`. A copied skill's
61
70
  finder reports its own metadata version; it does not inspect the app installation.
@@ -65,7 +74,7 @@ running the recipe. The comparison checks metadata contents as well as version,
65
74
  so stale copies with the same development version are caught. Every installed
66
75
  guidance/script/example asset is also compared byte-for-byte; extra app-owned
67
76
  files or publisher markers in the copy are not checked. Keep local product policy
68
- outside the package guidance. Recopy the complete folder after upgrades, and
77
+ outside the package guidance. Recopy the complete bundle after upgrades, and
69
78
  read declarations from the installed package.
70
79
 
71
80
  `agentsBlock` reports whether the app's `AGENTS.md` (or `CLAUDE.md`) carries the
@@ -96,20 +105,21 @@ need the codemod; `button: { defaultTone: 'primary', defaultButtonStyle: 'solid'
96
105
  restores the previous default app-wide. Afterwards, demote extra primaries so
97
106
  each page or surface keeps one.
98
107
 
99
- ## Manual skill copying
100
-
101
- 1. Choose an agent skill destination in the user's configured skills directory,
102
- named `themelia-react-ui-consumer`. For Codex the usual destination is
103
- `~/.codex/skills/themelia-react-ui-consumer`; honor a configured alternative.
104
- 2. Copy the **entire** installed `docs/consumer-skill` directory, including
105
- references, scripts and examples. Do not copy only SKILL.md or merge files from
106
- different releases. Preserve an existing user-customized copy before replacing it.
107
- 3. Run the identity recipe with `THEMELIA_SKILL_DIR` pointing to that copy. Invoke
108
- `$themelia-react-ui-consumer` or let the agent select it by task context.
109
-
110
- Copying into an agent's global skill directory is a separate user-requested
111
- action; reading these instructions does not perform or authorize it. The npm
112
- package does not install a skill automatically. Run the consuming app's own
113
- type/lint/test/build scripts after integration; repository check scripts are not
114
- installed consumer commands. See [integration](integration.md) for workflow and
115
- opened-surface verification.
108
+ ## Copy the complete skill bundle
109
+
110
+ The package ships three focused capabilities and one compatibility/shared root. One copy of API/token/contract metadata, scripts and examples is shared by all three. Do not copy only an individual SKILL.md or duplicate the generated indexes into each skill.
111
+
112
+ When the user requests installation, run the bundled copy helper with their configured agent skills directory. For Codex the usual destination is `~/.codex/skills`; honor a configured alternative:
113
+
114
+ ```sh
115
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/setup-skills.mjs --copy --destination "$HOME/.codex/skills"
116
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/setup-skills.mjs --check --destination "$HOME/.codex/skills"
117
+ ```
118
+
119
+ It copies `themelia-components`, `themelia-tokenization`, `themelia-composition`, and `themelia-react-ui-consumer` as real sibling directories. Rich templates are copied once under the shared directory. Markdown links are rebased for this installed layout; no symlinks or repository paths are required. Existing canonical/shared destinations are rejected before writing: preserve or move the previous complete bundle before an upgrade, then copy the release together. `--check` compares every expected asset after rebasing, so stale content with an unchanged development version is caught.
120
+
121
+ The package retains `docs/consumer-skills/themelia-foundation/SKILL.md` and `themelia-forms/SKILL.md` as compatibility routers. They are not added by fresh copying. Existing legacy or unrelated skills are left untouched; review older agent routing separately when upgrading. Keep app policy outside the copied package bundle.
122
+
123
+ For the identity recipe above, set `THEMELIA_SKILL_DIR` to the copied shared `themelia-react-ui-consumer` directory. In project instructions, use the generated [AGENTS.md block](agents-md.md) pointing at package skills, or point the three skill paths to their copied siblings. Invoke `$themelia-components` for setup, discovery and typed APIs/forms; `$themelia-tokenization` for themes and shared visual roles; and `$themelia-composition` for screen hierarchy, workflows and visual repair. The compatibility `$themelia-react-ui-consumer` entrypoint remains available.
124
+
125
+ Copying into an agent's global skill directory requires a user request. The npm package does not perform installation automatically. Run the consuming app's own type/lint/test/build scripts after integration; repository maintainer commands are not installed consumer commands.
@@ -1,6 +1,6 @@
1
1
  # Integration
2
2
 
3
- Install required peers from the installed package.json; public-api.json records required/optional peers. Install optional peers for the imported families, including base families such as charts and QR code. Whole-family declaration requirements can exceed a tree-shaken runtime graph; follow the exact family's index and declarations. Import style.css once before overrides; it omits preflight, so the app supplies its reset. Basic controls must not pull in unrelated map/editor/chart dependencies.
3
+ Install required peers from the installed package.json; public-api.json records required/optional peers. Install optional peers for the imported families, including base families such as charts and QR code. Whole-family declaration requirements can exceed a tree-shaken runtime graph; follow the exact family's index and declarations. Import style.css once before overrides; it omits global preflight and components remain usable without a host reset. Use the [installation CSS paths](installation.md#choose-the-css-path) when generating app utilities. Basic controls must not pull in unrelated map/editor/chart dependencies.
4
4
 
5
5
  Put global resets in the lower-priority `base` layer, or use your framework's layered preflight. The package uses the `theme, base, components, utilities` layer order. Unlayered rules outrank layered component styles regardless of import order; a global `button { font: inherit }` can replace the library's control size and weight. For an app-owned reset:
6
6
 
@@ -18,7 +18,7 @@ Load intentional, scoped app overrides after the package stylesheet. Keep broad
18
18
 
19
19
  UIProvider supplies stable mount-time defaults: explicit prop, provider default, fallback. Per-mount requests/data/callbacks stay on components. ThemeScope from themelia-react-ui/ui-provider places descendant portals inside its CSS boundary. A styled div does not relocate body portals; explicit Base UI portal containers take precedence.
20
20
 
21
- Framed card regions are ruled apart by default. To separate them by spacing
21
+ Cards omit the header rule and keep the footer rule by default. To separate them by spacing
22
22
  alone, configure the single application provider with
23
23
  `card: { defaultHeaderDivider: false, defaultFooterDivider: false }`.
24
24
  Explicit Card booleans override these defaults. Ordinary card
@@ -113,3 +113,7 @@ both container content edges without global preflight; Container and DataTable
113
113
  own border-box sizing. Stabilize lifecycle inputs as explained in
114
114
  [workflows](workflows.md#scoped-directory). These are example/runtime proofs,
115
115
  not evidence of an independent agent choosing the same composition.
116
+
117
+ ## Form transport and router adapters
118
+
119
+ Use [RHF workflows](rhf-workflows.md#transport-lifecycle) for frontend state with Inertia callback visits or TanStack async mutations. Await the complete transport before resetting dirty state or closing an overlay. The framework stays in the app. `renderLink` on AppSidebar/Page headers adapts the app router: forward href, children, className, accessible/native attributes and onClick; preserve modifier/new-tab behavior and invoke the supplied click handler so mobile navigation can close. Use the [typed shell recipe](../examples/app-layout.tsx) for the exact public renderLink type rather than inventing a router prop. React Router Link, Inertia Link and TanStack Link each need an app adapter matching their own installed version.