themelia-react-ui 1.0.0 → 1.0.2

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 (507) hide show
  1. package/CHANGELOG.md +190 -1
  2. package/README.md +92 -13
  3. package/dist/{accordion-BRWh3BM1.js → accordion-BRTcsp8J.js} +8 -8
  4. package/dist/accordion-BRTcsp8J.js.map +1 -0
  5. package/dist/{action-menu-Cx3SdfbN.js → action-menu-Drxw_vJk.js} +36 -36
  6. package/dist/action-menu-Drxw_vJk.js.map +1 -0
  7. package/dist/affordance-geometry.generated-CL84ZN9A.js +63 -0
  8. package/dist/affordance-geometry.generated-CL84ZN9A.js.map +1 -0
  9. package/dist/{ai-artifact-DkOArd3-.js → ai-artifact-DLVdK0Py.js} +151 -155
  10. package/dist/ai-artifact-DLVdK0Py.js.map +1 -0
  11. package/dist/{app-shell-BH_bGcE2.js → app-shell-C_fKpljx.js} +11 -10
  12. package/dist/app-shell-C_fKpljx.js.map +1 -0
  13. package/dist/{attachment-DsLgNHXt.js → attachment-DbjUWsP0.js} +12 -12
  14. package/dist/{attachment-DsLgNHXt.js.map → attachment-DbjUWsP0.js.map} +1 -1
  15. package/dist/auth-CAQcasMV.js +723 -0
  16. package/dist/auth-CAQcasMV.js.map +1 -0
  17. package/dist/{avatar-CsnWaYmt.js → avatar-Bu2HhitA.js} +76 -71
  18. package/dist/avatar-Bu2HhitA.js.map +1 -0
  19. package/dist/{badge-BZXZT9wd.js → badge-CzId1Wlm.js} +4 -4
  20. package/dist/{badge-BZXZT9wd.js.map → badge-CzId1Wlm.js.map} +1 -1
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/buttons.js +3 -2
  27. package/dist/base/cards.js +3 -3
  28. package/dist/base/carousel.js +25 -27
  29. package/dist/base/carousel.js.map +1 -1
  30. package/dist/base/cascader.js +150 -148
  31. package/dist/base/cascader.js.map +1 -1
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +3 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +1 -1
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +3 -3
  39. package/dist/base/display.js +7 -7
  40. package/dist/base/feedback.js +4 -3
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +233 -0
  44. package/dist/base/inline-edit.js.map +1 -0
  45. package/dist/base/item.js +1 -1
  46. package/dist/base/media-gallery.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 +33 -33
  52. package/dist/base/repeaters.js.map +1 -1
  53. package/dist/base/sheet.js +1 -1
  54. package/dist/base/sidebar.js +1 -1
  55. package/dist/base/signature-pad.js +83 -81
  56. package/dist/base/signature-pad.js.map +1 -1
  57. package/dist/base/skeleton.js +1 -1
  58. package/dist/base/spinner.js +1 -1
  59. package/dist/base/structure.js +1 -1
  60. package/dist/base/table.js +1 -1
  61. package/dist/base/text-inputs.js +2 -2
  62. package/dist/base/toaster.js +6 -6
  63. package/dist/base/toaster.js.map +1 -1
  64. package/dist/base/tree.js +1 -1
  65. package/dist/base/upload-queue.js +1 -1
  66. package/dist/base/upload.js +3 -3
  67. package/dist/base/value-inputs.js +1 -1
  68. package/dist/blocks/admin.js +134 -134
  69. package/dist/blocks/admin.js.map +1 -1
  70. package/dist/blocks/ai.js +120 -117
  71. package/dist/blocks/ai.js.map +1 -1
  72. package/dist/blocks/analytics/usage-card.js +3 -0
  73. package/dist/blocks/analytics.js +530 -491
  74. package/dist/blocks/analytics.js.map +1 -1
  75. package/dist/blocks/collaboration.js +2 -2
  76. package/dist/blocks/commerce/receipt.js +1 -1
  77. package/dist/blocks/commerce.js +395 -383
  78. package/dist/blocks/commerce.js.map +1 -1
  79. package/dist/blocks/data-display.js +1 -1
  80. package/dist/blocks/onboarding.js +6 -6
  81. package/dist/blocks/onboarding.js.map +1 -1
  82. package/dist/blocks/planning.js +311 -0
  83. package/dist/blocks/planning.js.map +1 -0
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BuYz5SDU.js} +9 -8
  86. package/dist/breadcrumbs-BuYz5SDU.js.map +1 -0
  87. package/dist/button-BZDasD04.js +651 -0
  88. package/dist/button-BZDasD04.js.map +1 -0
  89. package/dist/{button-BS6l5JUw.js → button-BZyfTvwm.js} +3 -3
  90. package/dist/button-BZyfTvwm.js.map +1 -0
  91. package/dist/buttons-D_6KJvEE.js +99 -0
  92. package/dist/buttons-D_6KJvEE.js.map +1 -0
  93. package/dist/{cards-BMB0laLG.js → cards-qGSErLw_.js} +12 -12
  94. package/dist/{cards-BMB0laLG.js.map → cards-qGSErLw_.js.map} +1 -1
  95. package/dist/chart-Bsc5BICK.js +150 -0
  96. package/dist/chart-Bsc5BICK.js.map +1 -0
  97. package/dist/checkbox-BQNDjUCh.js +34 -0
  98. package/dist/checkbox-BQNDjUCh.js.map +1 -0
  99. package/dist/choice-inputs-Mk3iWbhr.js +725 -0
  100. package/dist/choice-inputs-Mk3iWbhr.js.map +1 -0
  101. package/dist/{code-block-DIlqzoiD.js → code-block-DzHKRybS.js} +23 -23
  102. package/dist/code-block-DzHKRybS.js.map +1 -0
  103. package/dist/{collapsible-DsnktFNv.js → collapsible-ClvC7Bj3.js} +3 -3
  104. package/dist/{collapsible-DsnktFNv.js.map → collapsible-ClvC7Bj3.js.map} +1 -1
  105. package/dist/{collection-content-C4fthJV_.js → collection-content-D6S8cv_n.js} +3 -3
  106. package/dist/{collection-content-C4fthJV_.js.map → collection-content-D6S8cv_n.js.map} +1 -1
  107. package/dist/{combobox-HDftpzxt.js → combobox-BFnbJJp3.js} +18 -18
  108. package/dist/combobox-BFnbJJp3.js.map +1 -0
  109. package/dist/{combobox-CHD750do.js → combobox-hozNwUcc.js} +313 -316
  110. package/dist/combobox-hozNwUcc.js.map +1 -0
  111. package/dist/{command-D0kWBZfd.js → command-BnmSchli.js} +9 -9
  112. package/dist/command-BnmSchli.js.map +1 -0
  113. package/dist/comments-u5L0OGip.js +1156 -0
  114. package/dist/comments-u5L0OGip.js.map +1 -0
  115. package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
  116. package/dist/components/base/buttons/button.recipes.d.ts +10 -19
  117. package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
  118. package/dist/components/base/cards/card.recipes.d.ts +13 -5
  119. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
  120. package/dist/components/base/cards/smart-card.types.d.ts +3 -1
  121. package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
  122. package/dist/components/base/date-pickers/datepicker.types.d.ts +3 -0
  123. package/dist/components/base/forms/form-field.d.ts +1 -0
  124. package/dist/components/base/forms/form-sizing.d.ts +3 -3
  125. package/dist/components/base/inline-edit/index.d.ts +2 -0
  126. package/dist/components/base/inline-edit/inline-edit.d.ts +81 -0
  127. package/dist/components/base/inline-edit/inline-edit.recipes.d.ts +6 -0
  128. package/dist/components/base/navigation/tabs.d.ts +3 -5
  129. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  130. package/dist/components/base/structure/structure.recipes.d.ts +6 -0
  131. package/dist/components/base/table/index.d.ts +1 -1
  132. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  133. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  134. package/dist/components/blocks/analytics/index.d.ts +1 -0
  135. package/dist/components/blocks/analytics/types.d.ts +1 -1
  136. package/dist/components/blocks/analytics/usage-card/index.d.ts +3 -0
  137. package/dist/components/blocks/analytics/usage-card/types.d.ts +52 -0
  138. package/dist/components/blocks/analytics/usage-card/usage-card.d.ts +6 -0
  139. package/dist/components/blocks/analytics/usage-card/usage-card.data.d.ts +19 -0
  140. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +22 -0
  141. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  142. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  143. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  144. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  145. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  146. package/dist/components/blocks/planning/index.d.ts +3 -0
  147. package/dist/components/blocks/planning/task-card.d.ts +3 -0
  148. package/dist/components/blocks/planning/task-card.strings.d.ts +15 -0
  149. package/dist/components/blocks/planning/task-card.types.d.ts +66 -0
  150. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  151. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  152. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  153. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  154. package/dist/components/features/media-library/media-library.d.ts +1 -1
  155. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  156. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  157. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  158. package/dist/components/features/overlays/overlays.types.d.ts +5 -4
  159. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  160. package/dist/components/features/table/data-table.d.ts +1 -1
  161. package/dist/components/features/table/table.types.d.ts +1 -1
  162. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  163. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  164. package/dist/components/layout/page/page.d.ts +0 -1
  165. package/dist/components/layout/page/page.types.d.ts +9 -3
  166. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  167. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  168. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  169. package/dist/components/typography/heading.d.ts +5 -2
  170. package/dist/components/typography/index.d.ts +1 -1
  171. package/dist/components/typography/text.styles.d.ts +10 -0
  172. package/dist/components/ui/popover.d.ts +1 -1
  173. package/dist/components/ui/sidebar.d.ts +1 -1
  174. package/dist/components/ui/table.d.ts +2 -1
  175. package/dist/container.recipes-D9t8MHR3.js +27 -0
  176. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  177. package/dist/{containers-CPNyNo1_.js → containers-DqB-bSYE.js} +34 -56
  178. package/dist/containers-DqB-bSYE.js.map +1 -0
  179. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  180. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  181. package/dist/{copyable-B7SBXJMr.js → copyable-BTSByfmq.js} +6 -6
  182. package/dist/{copyable-B7SBXJMr.js.map → copyable-BTSByfmq.js.map} +1 -1
  183. package/dist/{data-display-b3d1TfL4.js → data-display-Bihs9Ven.js} +542 -329
  184. package/dist/data-display-Bihs9Ven.js.map +1 -0
  185. package/dist/{date-BFNMnrS5.js → date-DOKhJPu7.js} +4 -4
  186. package/dist/{date-BFNMnrS5.js.map → date-DOKhJPu7.js.map} +1 -1
  187. package/dist/{date-picker-DI6kPNof.js → date-picker-DzP5HQq7.js} +492 -472
  188. package/dist/date-picker-DzP5HQq7.js.map +1 -0
  189. package/dist/date-pickers-BpgGz7S-.js +196 -0
  190. package/dist/date-pickers-BpgGz7S-.js.map +1 -0
  191. package/dist/{display-ByI5tkqy.js → display-CS6Hbk18.js} +8 -8
  192. package/dist/{display-ByI5tkqy.js.map → display-CS6Hbk18.js.map} +1 -1
  193. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-D-boNgGO.js} +7 -7
  194. package/dist/{dropdown-menu-BlnyHr-9.js.map → dropdown-menu-D-boNgGO.js.map} +1 -1
  195. package/dist/features/activities.js +152 -141
  196. package/dist/features/activities.js.map +1 -1
  197. package/dist/features/ai-chat.js +182 -179
  198. package/dist/features/ai-chat.js.map +1 -1
  199. package/dist/features/async-preview.js +9 -9
  200. package/dist/features/async-preview.js.map +1 -1
  201. package/dist/features/combobox.js +1 -1
  202. package/dist/features/comments.js +1 -1
  203. package/dist/features/data-view.js +25 -23
  204. package/dist/features/data-view.js.map +1 -1
  205. package/dist/features/email-composer/engine.js +1 -1
  206. package/dist/features/email-composer.js +103 -104
  207. package/dist/features/email-composer.js.map +1 -1
  208. package/dist/features/event-calendar.js +375 -373
  209. package/dist/features/event-calendar.js.map +1 -1
  210. package/dist/features/filters.js +1 -1
  211. package/dist/features/global-search.js +222 -224
  212. package/dist/features/global-search.js.map +1 -1
  213. package/dist/features/kanban.js +29 -29
  214. package/dist/features/kanban.js.map +1 -1
  215. package/dist/features/map.js +59 -58
  216. package/dist/features/map.js.map +1 -1
  217. package/dist/features/media-library.js +856 -855
  218. package/dist/features/media-library.js.map +1 -1
  219. package/dist/features/mentions.js +1 -1
  220. package/dist/features/overlays.js +1 -1
  221. package/dist/features/products.js +1210 -1209
  222. package/dist/features/products.js.map +1 -1
  223. package/dist/features/questionnaire.js +133 -132
  224. package/dist/features/questionnaire.js.map +1 -1
  225. package/dist/features/resource-assignment.js +29 -31
  226. package/dist/features/resource-assignment.js.map +1 -1
  227. package/dist/features/resource.js +13 -13
  228. package/dist/features/resource.js.map +1 -1
  229. package/dist/features/rich-text-editor.js +2 -2
  230. package/dist/features/schema-form.js +82 -82
  231. package/dist/features/schema-form.js.map +1 -1
  232. package/dist/features/suggestions.js +3 -3
  233. package/dist/features/sync.js +4 -4
  234. package/dist/features/sync.js.map +1 -1
  235. package/dist/features/table.js +1 -1
  236. package/dist/features/theme-tweaker.js +456 -450
  237. package/dist/features/theme-tweaker.js.map +1 -1
  238. package/dist/feedback-CJkUAapr.js +233 -0
  239. package/dist/feedback-CJkUAapr.js.map +1 -0
  240. package/dist/field-affordance-recipes-uKY4MsZ_.js +25 -0
  241. package/dist/field-affordance-recipes-uKY4MsZ_.js.map +1 -0
  242. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-DQQpiLWC.js} +3 -3
  243. package/dist/field-state-recipes-DQQpiLWC.js.map +1 -0
  244. package/dist/{filters-qtrcv1hf.js → filters-D6FF8L6s.js} +715 -720
  245. package/dist/filters-D6FF8L6s.js.map +1 -0
  246. package/dist/{form-field-C6W-y2hR.js → form-field-CZwrkP7m.js} +17 -9
  247. package/dist/form-field-CZwrkP7m.js.map +1 -0
  248. package/dist/{form-sizing-39NohSqn.js → form-sizing-QP8aIRaW.js} +10 -6
  249. package/dist/form-sizing-QP8aIRaW.js.map +1 -0
  250. package/dist/{forms-BF-HSbff.js → forms-B5NCbkSC.js} +35 -35
  251. package/dist/{forms-BF-HSbff.js.map → forms-B5NCbkSC.js.map} +1 -1
  252. package/dist/forms-numeric-Crrm80Lm.js +867 -0
  253. package/dist/forms-numeric-Crrm80Lm.js.map +1 -0
  254. package/dist/{header-B8ex54cY.js → header-kxruN3RM.js} +53 -49
  255. package/dist/header-kxruN3RM.js.map +1 -0
  256. package/dist/{hooks-D6UBVzf2.js → hooks-BrlnCwQd.js} +2 -2
  257. package/dist/{hooks-D6UBVzf2.js.map → hooks-BrlnCwQd.js.map} +1 -1
  258. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  259. package/dist/http-CdEIHyQf.js.map +1 -0
  260. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-Btc6pQrp.js} +4 -4
  261. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-Btc6pQrp.js.map} +1 -1
  262. package/dist/index.js +2 -2
  263. package/dist/input-SX9V0AL3.js +255 -0
  264. package/dist/input-SX9V0AL3.js.map +1 -0
  265. package/dist/input-vxcaNCYC.js +20 -0
  266. package/dist/input-vxcaNCYC.js.map +1 -0
  267. package/dist/{item-pJ0GsOiJ.js → item-DE4YnuJx.js} +18 -17
  268. package/dist/item-DE4YnuJx.js.map +1 -0
  269. package/dist/layout/app-shell.js +1 -1
  270. package/dist/layout/auth.js +1 -1
  271. package/dist/layout/containers.js +1 -1
  272. package/dist/layout/header.js +1 -1
  273. package/dist/layout/hooks.js +1 -1
  274. package/dist/layout/navigation.js +1 -1
  275. package/dist/layout/page.js +1 -1
  276. package/dist/layout/settings.js +1 -1
  277. package/dist/layout/sidebar.js +2 -2
  278. package/dist/layout/workspace.js +1 -1
  279. package/dist/layout.js +10 -10
  280. package/dist/lib/affordance-geometry.generated.d.ts +44 -4
  281. package/dist/lib/control-group-recipes.d.ts +22 -0
  282. package/dist/lib/field-affordance-recipes.d.ts +35 -2
  283. package/dist/lib/field-state-recipes.d.ts +2 -2
  284. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  285. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
  286. package/dist/lib/surface-recipes.d.ts +5 -2
  287. package/dist/lib/token-merge.generated.d.ts +144 -2
  288. package/dist/lib/ui-provider/types.d.ts +4 -2
  289. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  290. package/dist/lib/utils.js +1 -1
  291. package/dist/{media-gallery-Ca4YmvBi.js → media-gallery-DLp3HAz0.js} +75 -74
  292. package/dist/media-gallery-DLp3HAz0.js.map +1 -0
  293. package/dist/{mentions-CRio8mTm.js → mentions-Cl0Kt_Pd.js} +52 -50
  294. package/dist/{mentions-CRio8mTm.js.map → mentions-Cl0Kt_Pd.js.map} +1 -1
  295. package/dist/message-SZUNB1eX.js +127 -0
  296. package/dist/message-SZUNB1eX.js.map +1 -0
  297. package/dist/{navigation-BTrEb5u4.js → navigation-DnQSNMT0.js} +64 -55
  298. package/dist/navigation-DnQSNMT0.js.map +1 -0
  299. package/dist/{navigation-DqEITuD2.js → navigation-DyytsLRB.js} +37 -37
  300. package/dist/navigation-DyytsLRB.js.map +1 -0
  301. package/dist/{navigation-row-recipes-BFpvGPGE.js → navigation-row-recipes-DQEXQcqY.js} +3 -3
  302. package/dist/navigation-row-recipes-DQEXQcqY.js.map +1 -0
  303. package/dist/{number-BNT_BIzJ.js → number-DasMFWEG.js} +4 -4
  304. package/dist/{number-BNT_BIzJ.js.map → number-DasMFWEG.js.map} +1 -1
  305. package/dist/overlays-DUbs1KEi.js +1011 -0
  306. package/dist/overlays-DUbs1KEi.js.map +1 -0
  307. package/dist/{page-BMBGjJY8.js → page-hGmT4nWK.js} +75 -64
  308. package/dist/page-hGmT4nWK.js.map +1 -0
  309. package/dist/{page-header-BH41wCyY.js → page-header-D8nERkn5.js} +9 -9
  310. package/dist/page-header-D8nERkn5.js.map +1 -0
  311. package/dist/{pagination-C29vvt3I.js → pagination-NLGqRirf.js} +20 -20
  312. package/dist/pagination-NLGqRirf.js.map +1 -0
  313. package/dist/{popover-TInGXsjg.js → popover-CghIYdQf.js} +23 -22
  314. package/dist/popover-CghIYdQf.js.map +1 -0
  315. package/dist/{popover-menu-BzqXqE72.js → popover-menu-B4PoWhRl.js} +6 -6
  316. package/dist/{popover-menu-BzqXqE72.js.map → popover-menu-B4PoWhRl.js.map} +1 -1
  317. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-QlD4JenO.js} +5 -5
  318. package/dist/popover.recipes-QlD4JenO.js.map +1 -0
  319. package/dist/{primitives-DKPOGVpj.js → primitives-C7ff0QaI.js} +120 -113
  320. package/dist/primitives-C7ff0QaI.js.map +1 -0
  321. package/dist/primitives.js +3 -3
  322. package/dist/progress-BroqrAyV.js +169 -0
  323. package/dist/progress-BroqrAyV.js.map +1 -0
  324. package/dist/{receipt-DYWTQGEc.js → receipt-BuJynLgf.js} +8 -8
  325. package/dist/{receipt-DYWTQGEc.js.map → receipt-BuJynLgf.js.map} +1 -1
  326. package/dist/{rich-text-B7sBAdDG.js → rich-text-DlxDOtf4.js} +4 -4
  327. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-DlxDOtf4.js.map} +1 -1
  328. package/dist/rich-text-editor-BKyG7rWz.js +574 -0
  329. package/dist/rich-text-editor-BKyG7rWz.js.map +1 -0
  330. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-B72Nfuze.js} +35 -26
  331. package/dist/rich-text-editor.recipes-B72Nfuze.js.map +1 -0
  332. package/dist/{scroll-area-BheMQ270.js → scroll-area-D-pIhEKl.js} +3 -3
  333. package/dist/scroll-area-D-pIhEKl.js.map +1 -0
  334. package/dist/{separator-Gk_WXH-l.js → separator-BNIgG3au.js} +3 -3
  335. package/dist/{separator-Gk_WXH-l.js.map → separator-BNIgG3au.js.map} +1 -1
  336. package/dist/{separator-DO0EbCEm.js → separator-BhtFyo4x.js} +2 -2
  337. package/dist/{separator-DO0EbCEm.js.map → separator-BhtFyo4x.js.map} +1 -1
  338. package/dist/services/actions.js +1 -1
  339. package/dist/{settings-D9f_wdIC.js → settings-DOTOzeZ2.js} +10 -9
  340. package/dist/{settings-D9f_wdIC.js.map → settings-DOTOzeZ2.js.map} +1 -1
  341. package/dist/{sheet-vOUloJ4O.js → sheet-BFhrNehm.js} +11 -11
  342. package/dist/sheet-BFhrNehm.js.map +1 -0
  343. package/dist/{sidebar-CNBKFDRW.js → sidebar-CyR4XKwR.js} +219 -200
  344. package/dist/sidebar-CyR4XKwR.js.map +1 -0
  345. package/dist/{sidebar-C3UKkbC5.js → sidebar-SvGJ0Zwi.js} +63 -58
  346. package/dist/sidebar-SvGJ0Zwi.js.map +1 -0
  347. package/dist/{skeleton-BvRhK8y-.js → skeleton-3F0uhYn3.js} +4 -4
  348. package/dist/{skeleton-BvRhK8y-.js.map → skeleton-3F0uhYn3.js.map} +1 -1
  349. package/dist/{smart-card-B5FcKODh.js → smart-card-DjGVV2xr.js} +206 -199
  350. package/dist/smart-card-DjGVV2xr.js.map +1 -0
  351. package/dist/{spinner-JtlFJ7Nc.js → spinner-Cpf7oRkF.js} +5 -5
  352. package/dist/{spinner-JtlFJ7Nc.js.map → spinner-Cpf7oRkF.js.map} +1 -1
  353. package/dist/{structure-BvW4vG4H.js → structure-CRdqVawd.js} +14 -14
  354. package/dist/{structure-BvW4vG4H.js.map → structure-CRdqVawd.js.map} +1 -1
  355. package/dist/{structure.recipes-DjqnBpwz.js → structure.recipes-Bqhf9oIh.js} +2 -2
  356. package/dist/structure.recipes-Bqhf9oIh.js.map +1 -0
  357. package/dist/style.css +1 -1
  358. package/dist/{surface-recipes-CQfRr-VL.js → surface-recipes-Dd__PD-w.js} +4 -3
  359. package/dist/surface-recipes-Dd__PD-w.js.map +1 -0
  360. package/dist/{table-DnlAJ-xR.js → table-CLtJTxoR.js} +17 -16
  361. package/dist/table-CLtJTxoR.js.map +1 -0
  362. package/dist/table-CcRDZiLP.js +1444 -0
  363. package/dist/table-CcRDZiLP.js.map +1 -0
  364. package/dist/tabs-BNgu7g0u.js +188 -0
  365. package/dist/tabs-BNgu7g0u.js.map +1 -0
  366. package/dist/text-inputs-DsR56TR-.js +330 -0
  367. package/dist/text-inputs-DsR56TR-.js.map +1 -0
  368. package/dist/{text.styles-BwB7vAF2.js → text.styles-Q4sGAIgA.js} +18 -10
  369. package/dist/text.styles-Q4sGAIgA.js.map +1 -0
  370. package/dist/theme.css +77 -115
  371. package/dist/{timelines-CnZ2S_Gr.js → timelines-D1pkt3se.js} +84 -78
  372. package/dist/timelines-D1pkt3se.js.map +1 -0
  373. package/dist/{tree-COD9BGdU.js → tree-BtmYyMZV.js} +8 -8
  374. package/dist/{tree-COD9BGdU.js.map → tree-BtmYyMZV.js.map} +1 -1
  375. package/dist/typography/rich-text.js +1 -1
  376. package/dist/typography-BxQgiZyw.js +96 -0
  377. package/dist/typography-BxQgiZyw.js.map +1 -0
  378. package/dist/typography.js +1 -1
  379. package/dist/{ui-provider-CftIB6TY.js → ui-provider-DRPn3qNl.js} +3 -2
  380. package/dist/ui-provider-DRPn3qNl.js.map +1 -0
  381. package/dist/ui-provider.js +1 -1
  382. package/dist/{upload-DIzw1dx1.js → upload-CDbYw1WN.js} +326 -323
  383. package/dist/upload-CDbYw1WN.js.map +1 -0
  384. package/dist/{upload-queue-xRJ3qDmd.js → upload-queue-CNd_hH_a.js} +25 -25
  385. package/dist/upload-queue-CNd_hH_a.js.map +1 -0
  386. package/dist/usage-card-VyJLUwRr.js +457 -0
  387. package/dist/usage-card-VyJLUwRr.js.map +1 -0
  388. package/dist/utils-BvH9PSmq.js +4275 -0
  389. package/dist/utils-BvH9PSmq.js.map +1 -0
  390. package/dist/value-inputs-D0KCrfVC.js +840 -0
  391. package/dist/value-inputs-D0KCrfVC.js.map +1 -0
  392. package/dist/{workspace-Cbqz4FzN.js → workspace-CcR8r-Nt.js} +115 -122
  393. package/dist/workspace-CcR8r-Nt.js.map +1 -0
  394. package/docs/consumer-skill/SKILL.md +112 -18
  395. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  396. package/docs/consumer-skill/examples/app-layout.tsx +42 -12
  397. package/docs/consumer-skill/examples/detail.tsx +24 -9
  398. package/docs/consumer-skill/examples/manifest.json +27 -1
  399. package/docs/consumer-skill/examples/planning-usage-edit.tsx +29 -0
  400. package/docs/consumer-skill/examples/scoped-directory.tsx +77 -0
  401. package/docs/consumer-skill/examples/website.tsx +56 -0
  402. package/docs/consumer-skill/references/analytics.md +70 -0
  403. package/docs/consumer-skill/references/composition.md +219 -2
  404. package/docs/consumer-skill/references/design-contract.md +37 -10
  405. package/docs/consumer-skill/references/discovery.md +93 -5
  406. package/docs/consumer-skill/references/installation.md +20 -3
  407. package/docs/consumer-skill/references/integration.md +26 -0
  408. package/docs/consumer-skill/references/public-api.json +2416 -388
  409. package/docs/consumer-skill/references/review.md +126 -0
  410. package/docs/consumer-skill/references/theming.md +52 -7
  411. package/docs/consumer-skill/references/tokens.json +177 -9
  412. package/docs/consumer-skill/references/workflows.md +129 -1
  413. package/docs/consumer-skill/scripts/check-composition.mjs +31 -0
  414. package/docs/consumer-skill/scripts/composition-policy.mjs +317 -0
  415. package/docs/consumer-skill/scripts/discovery.mjs +65 -8
  416. package/docs/consumer-skill/scripts/surface-policy.mjs +66 -0
  417. package/package.json +30 -6
  418. package/dist/accordion-BRWh3BM1.js.map +0 -1
  419. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  420. package/dist/affordance-geometry.generated-DXl-Zb3Z.js +0 -23
  421. package/dist/affordance-geometry.generated-DXl-Zb3Z.js.map +0 -1
  422. package/dist/ai-artifact-DkOArd3-.js.map +0 -1
  423. package/dist/app-shell-BH_bGcE2.js.map +0 -1
  424. package/dist/auth-BDB1V_2q.js +0 -704
  425. package/dist/auth-BDB1V_2q.js.map +0 -1
  426. package/dist/avatar-CsnWaYmt.js.map +0 -1
  427. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  428. package/dist/button-BS6l5JUw.js.map +0 -1
  429. package/dist/buttons-Co6GavvM.js +0 -674
  430. package/dist/buttons-Co6GavvM.js.map +0 -1
  431. package/dist/chart-DVfcwQu6.js +0 -149
  432. package/dist/chart-DVfcwQu6.js.map +0 -1
  433. package/dist/choice-inputs-CavA-SGV.js +0 -644
  434. package/dist/choice-inputs-CavA-SGV.js.map +0 -1
  435. package/dist/code-block-DIlqzoiD.js.map +0 -1
  436. package/dist/combobox-CHD750do.js.map +0 -1
  437. package/dist/combobox-HDftpzxt.js.map +0 -1
  438. package/dist/command-D0kWBZfd.js.map +0 -1
  439. package/dist/comments-CvYeglMS.js +0 -1132
  440. package/dist/comments-CvYeglMS.js.map +0 -1
  441. package/dist/containers-CPNyNo1_.js.map +0 -1
  442. package/dist/data-display-b3d1TfL4.js.map +0 -1
  443. package/dist/date-picker-DI6kPNof.js.map +0 -1
  444. package/dist/date-pickers-ByP6Cv2z.js +0 -224
  445. package/dist/date-pickers-ByP6Cv2z.js.map +0 -1
  446. package/dist/feedback-a9j9J-9A.js +0 -391
  447. package/dist/feedback-a9j9J-9A.js.map +0 -1
  448. package/dist/field-affordance-recipes-CHdUtn2Z.js +0 -17
  449. package/dist/field-affordance-recipes-CHdUtn2Z.js.map +0 -1
  450. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  451. package/dist/filters-qtrcv1hf.js.map +0 -1
  452. package/dist/form-field-C6W-y2hR.js.map +0 -1
  453. package/dist/form-sizing-39NohSqn.js.map +0 -1
  454. package/dist/forms-numeric-Y15Bg5Nr.js +0 -867
  455. package/dist/forms-numeric-Y15Bg5Nr.js.map +0 -1
  456. package/dist/header-B8ex54cY.js.map +0 -1
  457. package/dist/http-CLTVJc5I.js.map +0 -1
  458. package/dist/input-DMorJiTI.js +0 -202
  459. package/dist/input-DMorJiTI.js.map +0 -1
  460. package/dist/input-ci9fIgFH.js +0 -20
  461. package/dist/input-ci9fIgFH.js.map +0 -1
  462. package/dist/item-pJ0GsOiJ.js.map +0 -1
  463. package/dist/media-gallery-Ca4YmvBi.js.map +0 -1
  464. package/dist/message-B5-6LeYl.js +0 -108
  465. package/dist/message-B5-6LeYl.js.map +0 -1
  466. package/dist/navigation-BTrEb5u4.js.map +0 -1
  467. package/dist/navigation-DqEITuD2.js.map +0 -1
  468. package/dist/navigation-row-recipes-BFpvGPGE.js.map +0 -1
  469. package/dist/overlays-DBqV0J_V.js +0 -982
  470. package/dist/overlays-DBqV0J_V.js.map +0 -1
  471. package/dist/page-BMBGjJY8.js.map +0 -1
  472. package/dist/page-header-BH41wCyY.js.map +0 -1
  473. package/dist/pagination-C29vvt3I.js.map +0 -1
  474. package/dist/popover-TInGXsjg.js.map +0 -1
  475. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  476. package/dist/primitives-DKPOGVpj.js.map +0 -1
  477. package/dist/rich-text-editor-BZSJchAF.js +0 -575
  478. package/dist/rich-text-editor-BZSJchAF.js.map +0 -1
  479. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  480. package/dist/scroll-area-BheMQ270.js.map +0 -1
  481. package/dist/select-B2mb-qN2.js +0 -108
  482. package/dist/select-B2mb-qN2.js.map +0 -1
  483. package/dist/sheet-vOUloJ4O.js.map +0 -1
  484. package/dist/sidebar-C3UKkbC5.js.map +0 -1
  485. package/dist/sidebar-CNBKFDRW.js.map +0 -1
  486. package/dist/smart-card-B5FcKODh.js.map +0 -1
  487. package/dist/structure.recipes-DjqnBpwz.js.map +0 -1
  488. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  489. package/dist/table-DnlAJ-xR.js.map +0 -1
  490. package/dist/table-ghtAQ-JJ.js +0 -1424
  491. package/dist/table-ghtAQ-JJ.js.map +0 -1
  492. package/dist/tabs-DY09eoZg.js +0 -187
  493. package/dist/tabs-DY09eoZg.js.map +0 -1
  494. package/dist/text-inputs-BhOcedTo.js +0 -331
  495. package/dist/text-inputs-BhOcedTo.js.map +0 -1
  496. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  497. package/dist/timelines-CnZ2S_Gr.js.map +0 -1
  498. package/dist/typography-Cv8MT-82.js +0 -96
  499. package/dist/typography-Cv8MT-82.js.map +0 -1
  500. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  501. package/dist/upload-DIzw1dx1.js.map +0 -1
  502. package/dist/upload-queue-xRJ3qDmd.js.map +0 -1
  503. package/dist/utils-C2EKeIw3.js +0 -72
  504. package/dist/utils-C2EKeIw3.js.map +0 -1
  505. package/dist/value-inputs-Co1fu-xv.js +0 -824
  506. package/dist/value-inputs-Co1fu-xv.js.map +0 -1
  507. package/dist/workspace-Cbqz4FzN.js.map +0 -1
@@ -0,0 +1,126 @@
1
+ # Composition review and checks
2
+
3
+ Use after selecting owners, or when auditing a screen. Read only the relevant
4
+ workflow/declarations; this is a review aid, not a new design system.
5
+
6
+ ## Review the task and hierarchy
7
+
8
+ - Can the user identify the subject, scope and next action? A contextual fact
9
+ may be repeated for a separate purpose, but should not compete with itself.
10
+ - Do independent records, facts, metrics and editable fields use appropriate
11
+ owners? Inspect an existing feature before reconstructing its lifecycle.
12
+ - Do primary commands have explicit emphasis and page/collection/record scope?
13
+ Keep bulk actions tied to selection. Secondary/destructive importance is semantic.
14
+ - Do rows lead with identity and useful decision information? Preserve access
15
+ to hidden facts without forcing every fact into a tall identity stack.
16
+ - Does each gutter, inset and sibling/copy gap have one owner? Review the whole
17
+ parent/child chain. A token-backed utility on the wrong owner can still drift.
18
+ - Does the same composition remain readable with long copy, translations,
19
+ empty/missing values and narrow parent width? Zero and unavailable differ.
20
+
21
+ These criteria allow different product layouts. Do not impose a universal card
22
+ count, row-line limit, primary button count or one-column form rule.
23
+
24
+ ## Optional source checker
25
+
26
+ The package ships a read-only script, not an npm bin/global CLI. It needs the
27
+ consumer's TypeScript development dependency and Node matching the package engine:
28
+
29
+ ```sh
30
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/check-composition.mjs resources/js/pages resources/js/components
31
+ ```
32
+
33
+ Pass explicit files/directories; `.tsx`, `.ts`, `.jsx` and `.js` are inspected.
34
+ It resolves TypeScript from the app working directory and uses its adjacent
35
+ versioned public index. A complete copied skill works too, after the installed
36
+ identity check. It neither edits files nor installs dependencies. Add this
37
+ command to app CI if useful; repository lint is not automatically installed.
38
+
39
+ Errors cover unknown package entrypoints/symbols and statically detected overrides
40
+ of protected Card/popup insets, Card badges in headerAction/headerStart rather
41
+ than titleSuffix, control geometry/typography, fixed DisplayLabel/Badge
42
+ roles, cross-role shell/inner radius replacements, display-copy margins, or
43
+ attenuated shared focus rings on imported controls. Intentional nested bodies,
44
+ circular owners and joined-edge corner resets retain their roles. Import ownership
45
+ follows lexical bindings, preserving locally shadowed application components. Deprecated migration
46
+ owners, nested framed subjects and repeated literal headings produce review
47
+ warnings; warnings alone do not fail CI. Messages identify the owner and remedy.
48
+ Standalone compact Cards and Page gutter removal also produce review warnings.
49
+ Verified Card-owning Metric/card-grid, UsageCard and TaskCard compositions also
50
+ participate in nested-surface and peer-gap review. Metric without its card variant,
51
+ compact MetricGrid, flat TaskCard, ChartCard and Receipt do not establish a frame.
52
+ Direct framed/default Card peers, including GridCell-wrapped peers, in a statically
53
+ small Stack/Grid gap also warn; omitted gaps use the actual component defaults.
54
+ Review visible ring clearance and the application's ordinary surface policy.
55
+ Review the compact subject and actual parent inset; PageViewport supplies none.
56
+ Recognizable metric cards, repeated fact rows and centered empty regions suggest
57
+ Metric/MetricGrid, MetadataList/InlineStat or EmptyState. Lower-level Empty and
58
+ modal anatomy suggest their complete workflow owners. These semantic guesses
59
+ are contextual warnings: keep valid custom subjects, editable rows and modal
60
+ lifecycles when the complete owner's contract differs. An arbitrary *Card name
61
+ never establishes ownership; ChartCard and Receipt are useful counterexamples.
62
+ Use existing app lint/typechecking for wider language, utility and accessibility
63
+ coverage. The script is deliberately small and does not replace them.
64
+
65
+ Coverage is limited to direct public imports, aliases/namespaces, native paragraph/
66
+ heading copy and same-file static classes/styles/props. Dynamic expressions are reported as unresolved;
67
+ cross-file wrappers, external CSS, render functions and runtime values require
68
+ review. Do not treat an empty report as proof of complete compliance or taste.
69
+
70
+ ## Rendered and interaction evidence
71
+
72
+ Source checks establish imports and known ownership violations. Separately inspect
73
+ actual rectangles, wrapping, shared insets, title/action alignment and information
74
+ weight at supported parent widths and light/dark scopes. Open relevant menus and
75
+ overlays; a closed trigger cannot prove portal theming or popup geometry.
76
+
77
+ Execute affected callbacks, keyboard/focus, cancellation, validation, pending
78
+ and failure/retry states. Use deferred requests to observe pending behavior.
79
+ Confirm accepted data changes and draft retention; a toast is only feedback.
80
+ Compare before/after at the same conditions and record unverified limits.
81
+
82
+ Treat the user's appearance feedback as an acceptance criterion. Reproduce the
83
+ reported state at its actual width/theme and improve the responsible composition
84
+ or shared recipe. Keep source findings, measurements and inspected-image judgment
85
+ distinct: matching classes/radii and zero overflow do not establish a coherent
86
+ appearance. Inspect borders, rings, clipping and settled transforms in the actual
87
+ state. Compare the requested theme value before changing a shared default; an
88
+ image should demonstrate that the correction addresses the visible complaint.
89
+
90
+ ## Application policy
91
+
92
+ Keep a small app-owned reference linked from its agent instructions: name the
93
+ shell/header/gutter owners, routing/query/form adapters, scope semantics,
94
+ information priorities and relevant local tests. Link current representative
95
+ pages. Preserve permissions, transport, translations and product-specific forms.
96
+ Do not copy the package API manual or edit the packaged skill to encode local policy.
97
+
98
+ When agent output is wrong, inspect installed/copied identity, whether the skill
99
+ was loaded, its discovery results, the actual declarations/runtime, and competing
100
+ app adapters/guides. An import-valid screen can still follow the wrong ownership
101
+ rule. Check current source rather than strengthening every sentence into a ban;
102
+ document concrete contradictions and fix the owning policy. Static checks cannot
103
+ infer product meaning or prove which instructions an agent actually followed.
104
+
105
+ Package declarations define supported props; this skill defines shared composition
106
+ and anatomy; the app defines business meaning and page conventions. If a shared
107
+ owner fails in a valid composition, isolate a reproduction and report the owning
108
+ contract. Do not spread private selectors or copy the control to hide the issue.
109
+
110
+ ## When a valid composition looks wrong
111
+
112
+ Compare the installed declarations, shipped CSS and copied skill version first.
113
+ Test without the app reset when fonts, borders or list insets differ. Combine
114
+ field affordances and vary density separately from spacing; inspect long copy
115
+ in a narrow parent at a wide viewport too. Source checks cannot detect these.
116
+
117
+ Prefer a minimal public-API reproduction over private descendant CSS. For example,
118
+ use Metric's card variant for a navigable KPI with formatted value/trend instead
119
+ of recreating its hierarchy with Card + Text. Use Heading's `size` for visual
120
+ emphasis while `tag` keeps semantic level; its default admin scale is deliberate.
121
+ A custom Card subject or an application-owned hero remains valid.
122
+
123
+ Run discovery using both the task phrase and exact family/symbol. A zero result
124
+ is not permission to invent an export: inspect public-api.json/declarations and
125
+ report a missing capability. Static unknown spreads/classes remain unresolved;
126
+ review them at runtime rather than treating an empty finding list as approval.
@@ -8,21 +8,50 @@ Use shadcn semantic surfaces/foregrounds: background, card, popover, primary, se
8
8
 
9
9
  tokens.json distinguishes 23 structural roots, advanced typography/status settings, and derived utility spellings. A utility is not another public variable. Keep overrides in one stylesheet at root or ThemeScope, without copying computed CSS into JavaScript.
10
10
 
11
- Default --radius is 1rem (16px). rounded-radius is the default throughout the package. rounded-inner is opt-in for nested bodies/items and derives at 0.6× (9.6px). Do not invent an outer/surface radius or enlarge an individual card based on padding. Circular avatars/dots remain intentional shapes.
11
+ The default `--radius` is 0.75rem (12px). One public root drives two shared
12
+ roles; component owners choose the role, so ordinary callers add no radius class.
13
+
14
+ | Role | Owners | Default |
15
+ | --- | --- | --- |
16
+ | `rounded-radius` | Cards, popup/command shells and other outer surfaces | 12px |
17
+ | `rounded-inner` | Inputs, buttons, select/facet triggers, collection/navigation rows and intentional nested bodies | 9px |
18
+
19
+ Standalone controls retain the inner role; a complete nested Card retains its
20
+ outer-shell role. Physical nesting does not select a different recipe.
21
+
22
+ The inner role is `min(radius × 0.75, min(height-action, height-control) ×
23
+ density-scale ÷ 4)`. The height bound keeps short controls restrained when an app
24
+ increases the global radius; a 0.75 multiplier alone would still produce capsules.
25
+ The smaller base height preserves a common inner radius when action and field
26
+ heights differ. Density scales that bound once: the default roots at density
27
+ 0.875 yield 7.875px inner corners. Control size variants share the role; spacing
28
+ scale and surface padding do not change it. Do not override the derived alias as
29
+ another theme setting. Circular avatars/dots and joined-edge resets retain their
30
+ explicit shape mechanics; Badge retains its own root-based recipe.
31
+
32
+ CSS fits overlapping curves to the actual box, so computed values alone do not
33
+ prove the visible shape. Inspect settled corners, borders, clipping and focus
34
+ rings in opened surfaces. Change `--radius` at the theme boundary, rather than
35
+ replacing individual components' owned corners.
12
36
 
13
37
  ```css
14
- /* After themelia-react-ui/style.css; no Tailwind build needed for overrides. */
38
+ /* Intentional 40px controls, after style.css; overrides need no Tailwind build. */
15
39
  :root {
16
- --radius: 1rem;
40
+ --radius: 0.75rem;
17
41
  --height-action: 2.5rem;
18
42
  --height-control: 2.5rem;
19
- --surface-x: 1rem;
20
- --surface-y: 1rem;
43
+ --surface-x: 1.25rem;
44
+ --surface-y: 1.25rem;
21
45
  }
22
46
  ```
23
47
 
24
48
  Action and editable-control heights are separate roles; keep roots equal for adjoining alignment. `--space-scale` multiplies structural gaps, inline insets and surface padding. `--density-scale` multiplies action/control height and collection block padding. Roots are unscaled measurements; do not pre-multiply and then apply the utility again.
25
49
 
50
+ Both surface roots default to 1.25rem. At a 16px root font and space-scale 1,
51
+ ordinary surface insets are 20px, compact insets are 10px and large insets are
52
+ 36px. Page's default large gutters inherit that same recipe. Row insets,
53
+ control heights and copy gaps keep their independent roots.
54
+
26
55
  | Shared geometry | Root / derivation |
27
56
  | --- | --- |
28
57
  | Actions versus fields | `--height-action` versus `--height-control`; default size uses the root times density-scale |
@@ -40,6 +69,12 @@ Explicit portal containers take precedence over the nearest ThemeScope. Place th
40
69
 
41
70
  Apps using semantic utilities in their own JSX process themelia-react-ui/theme.css after Tailwind in a Tailwind v4 stylesheet. Compiled style.css styles shipped components but does not compile arbitrary app utility names. Keep app-owned classes namespaced and layout-focused.
42
71
 
72
+ The package class merger recognizes token overrides only for advertised utilities and exact class spellings emitted by the library stylesheet, including their negative, important and responsive forms. A valid Tailwind alias such as `m-space-2xl` can still be absent from that stylesheet. Unshipped aliases preserve existing fallback classes; they do not receive package override semantics merely because an app's separate Tailwind build can generate them. Use the app's own merge configuration for additional app-compiled aliases.
73
+
74
+ `ring` and `sidebar-ring` are focus roles tested at full strength. Preserve that
75
+ strength and verify at least 3:1 against adjacent surfaces when overriding the
76
+ theme; adding opacity can invalidate contrast even when the root color passes.
77
+
43
78
  ## Extend without drift
44
79
 
45
80
  Reuse existing color, text, action/control, row, surface or shell responsibilities first. An app token stays app-owned, not a package knob. New package tokens require multiple consumers, one owner/default/purpose, contract/docs updates and scoped behavior verification. Never expand the budget to fix one preview.
@@ -49,8 +84,18 @@ Use public structures/utilities for custom composition. Missing API seams should
49
84
 
50
85
  ## Copy rhythm
51
86
 
52
- Normal title/description gaps use `--gap-normal` (0.5rem); dense row and menu
53
- copy uses `--gap-dense` (0.25rem). Both multiply once by `--space-scale` and
87
+ Normal title/description gaps use `--gap-normal` (0.25rem); dense row and menu
88
+ copy uses `--gap-dense` (0.125rem). Both multiply once by `--space-scale` and
54
89
  inherit through ThemeScope and portaled surfaces. Control heights and insets
55
90
  remain separate. Use `textGap="normal" | "dense"` on headed surfaces and
56
91
  `gap="normal" | "dense"` on Stack/Grid instead of adding a description margin.
92
+
93
+ ## Independent geometry roles
94
+
95
+ Use `--space-scale` for room around content and `--density-scale` for control
96
+ heights. `--icon` and `--avatar` set media dimensions independently. Component
97
+ `size` picks a shared sm/md/lg recipe; collection `density` changes row padding.
98
+ Test these choices separately and in combination. Tables follow row insets,
99
+ Cards and code/message bodies follow surfaces, and image containment uses generic
100
+ spacing. Foundation directional spacing utilities ship with style.css and use
101
+ the same seven steps as gaps; generated spellings are not new theme roots.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "themelia-react-ui",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "structural": [
5
5
  {
6
6
  "name": "--space-scale",
@@ -14,12 +14,12 @@
14
14
  },
15
15
  {
16
16
  "name": "--gap-normal",
17
- "default": "0.5rem",
17
+ "default": "0.25rem",
18
18
  "purpose": "Vertical rhythm between titles and structural descriptions."
19
19
  },
20
20
  {
21
21
  "name": "--gap-dense",
22
- "default": "0.25rem",
22
+ "default": "0.125rem",
23
23
  "purpose": "Vertical rhythm between row titles and compact supporting copy."
24
24
  },
25
25
  {
@@ -49,12 +49,12 @@
49
49
  },
50
50
  {
51
51
  "name": "--surface-x",
52
- "default": "1rem",
52
+ "default": "1.25rem",
53
53
  "purpose": "Default inline inset for cards and multi-content surfaces."
54
54
  },
55
55
  {
56
56
  "name": "--surface-y",
57
- "default": "1rem",
57
+ "default": "1.25rem",
58
58
  "purpose": "Default block inset for cards and multi-content surfaces."
59
59
  },
60
60
  {
@@ -120,11 +120,11 @@
120
120
  ],
121
121
  "radius": {
122
122
  "name": "--radius",
123
- "default": "1rem",
124
- "purpose": "Default corners throughout the package; opt-in nested corners derive from this root.",
123
+ "default": "0.75rem",
124
+ "purpose": "Shared 8px corners keep short controls rectangular; nested corners derive from this root.",
125
125
  "defaultUtility": "rounded-radius",
126
126
  "innerUtility": "rounded-inner",
127
- "innerFormula": "calc(var(--radius) * 0.6)"
127
+ "innerFormula": "min(calc(var(--radius) * 0.75), calc(min(var(--height-action), var(--height-control)) * var(--density-scale) / 4))"
128
128
  },
129
129
  "advanced": [
130
130
  "--font-heading",
@@ -256,7 +256,175 @@
256
256
  "gap-x-normal",
257
257
  "gap-x-dense",
258
258
  "gap-y-normal",
259
- "gap-y-dense"
259
+ "gap-y-dense",
260
+ "pt-space-2xs",
261
+ "pt-space-xs",
262
+ "pt-space-sm",
263
+ "pt-space-md",
264
+ "pt-space-lg",
265
+ "pt-space-xl",
266
+ "pt-space-2xl",
267
+ "pb-space-2xs",
268
+ "pb-space-xs",
269
+ "pb-space-sm",
270
+ "pb-space-md",
271
+ "pb-space-lg",
272
+ "pb-space-xl",
273
+ "pb-space-2xl",
274
+ "pl-space-2xs",
275
+ "pl-space-xs",
276
+ "pl-space-sm",
277
+ "pl-space-md",
278
+ "pl-space-lg",
279
+ "pl-space-xl",
280
+ "pl-space-2xl",
281
+ "pr-space-2xs",
282
+ "pr-space-xs",
283
+ "pr-space-sm",
284
+ "pr-space-md",
285
+ "pr-space-lg",
286
+ "pr-space-xl",
287
+ "pr-space-2xl",
288
+ "ps-space-2xs",
289
+ "ps-space-xs",
290
+ "ps-space-sm",
291
+ "ps-space-md",
292
+ "ps-space-lg",
293
+ "ps-space-xl",
294
+ "ps-space-2xl",
295
+ "pe-space-2xs",
296
+ "pe-space-xs",
297
+ "pe-space-sm",
298
+ "pe-space-md",
299
+ "pe-space-lg",
300
+ "pe-space-xl",
301
+ "pe-space-2xl",
302
+ "m-space-2xs",
303
+ "m-space-xs",
304
+ "m-space-sm",
305
+ "m-space-md",
306
+ "m-space-lg",
307
+ "m-space-xl",
308
+ "m-space-2xl",
309
+ "mx-space-2xs",
310
+ "mx-space-xs",
311
+ "mx-space-sm",
312
+ "mx-space-md",
313
+ "mx-space-lg",
314
+ "mx-space-xl",
315
+ "mx-space-2xl",
316
+ "my-space-2xs",
317
+ "my-space-xs",
318
+ "my-space-sm",
319
+ "my-space-md",
320
+ "my-space-lg",
321
+ "my-space-xl",
322
+ "my-space-2xl",
323
+ "mt-space-2xs",
324
+ "mt-space-xs",
325
+ "mt-space-sm",
326
+ "mt-space-md",
327
+ "mt-space-lg",
328
+ "mt-space-xl",
329
+ "mt-space-2xl",
330
+ "mb-space-2xs",
331
+ "mb-space-xs",
332
+ "mb-space-sm",
333
+ "mb-space-md",
334
+ "mb-space-lg",
335
+ "mb-space-xl",
336
+ "mb-space-2xl",
337
+ "ml-space-2xs",
338
+ "ml-space-xs",
339
+ "ml-space-sm",
340
+ "ml-space-md",
341
+ "ml-space-lg",
342
+ "ml-space-xl",
343
+ "ml-space-2xl",
344
+ "mr-space-2xs",
345
+ "mr-space-xs",
346
+ "mr-space-sm",
347
+ "mr-space-md",
348
+ "mr-space-lg",
349
+ "mr-space-xl",
350
+ "mr-space-2xl",
351
+ "ms-space-2xs",
352
+ "ms-space-xs",
353
+ "ms-space-sm",
354
+ "ms-space-md",
355
+ "ms-space-lg",
356
+ "ms-space-xl",
357
+ "ms-space-2xl",
358
+ "me-space-2xs",
359
+ "me-space-xs",
360
+ "me-space-sm",
361
+ "me-space-md",
362
+ "me-space-lg",
363
+ "me-space-xl",
364
+ "me-space-2xl",
365
+ "top-space-2xs",
366
+ "top-space-xs",
367
+ "top-space-sm",
368
+ "top-space-md",
369
+ "top-space-lg",
370
+ "top-space-xl",
371
+ "top-space-2xl",
372
+ "bottom-space-2xs",
373
+ "bottom-space-xs",
374
+ "bottom-space-sm",
375
+ "bottom-space-md",
376
+ "bottom-space-lg",
377
+ "bottom-space-xl",
378
+ "bottom-space-2xl",
379
+ "left-space-2xs",
380
+ "left-space-xs",
381
+ "left-space-sm",
382
+ "left-space-md",
383
+ "left-space-lg",
384
+ "left-space-xl",
385
+ "left-space-2xl",
386
+ "right-space-2xs",
387
+ "right-space-xs",
388
+ "right-space-sm",
389
+ "right-space-md",
390
+ "right-space-lg",
391
+ "right-space-xl",
392
+ "right-space-2xl",
393
+ "start-space-2xs",
394
+ "start-space-xs",
395
+ "start-space-sm",
396
+ "start-space-md",
397
+ "start-space-lg",
398
+ "start-space-xl",
399
+ "start-space-2xl",
400
+ "end-space-2xs",
401
+ "end-space-xs",
402
+ "end-space-sm",
403
+ "end-space-md",
404
+ "end-space-lg",
405
+ "end-space-xl",
406
+ "end-space-2xl",
407
+ "inset-space-2xs",
408
+ "inset-space-xs",
409
+ "inset-space-sm",
410
+ "inset-space-md",
411
+ "inset-space-lg",
412
+ "inset-space-xl",
413
+ "inset-space-2xl",
414
+ "inset-x-space-2xs",
415
+ "inset-x-space-xs",
416
+ "inset-x-space-sm",
417
+ "inset-x-space-md",
418
+ "inset-x-space-lg",
419
+ "inset-x-space-xl",
420
+ "inset-x-space-2xl",
421
+ "inset-y-space-2xs",
422
+ "inset-y-space-xs",
423
+ "inset-y-space-sm",
424
+ "inset-y-space-md",
425
+ "inset-y-space-lg",
426
+ "inset-y-space-xl",
427
+ "inset-y-space-2xl"
260
428
  ],
261
429
  "states": [
262
430
  "text-link-color",
@@ -8,16 +8,93 @@ The [example manifest](../examples/manifest.json) owns filenames, exported compo
8
8
 
9
9
  [AccountIndex](../examples/index-table.tsx) exports `AccountIndex`, `AccountIndexProps`, `AccountRow` and `AccountIndexState`. Props are `state`, `onRetry`, `hrefFor(record)` and `onNavigate(href)`. The app drives the discriminated state: `loading`, `error` with a message, or `ready` with records. An empty ready collection renders the table's empty state. `onRetry` starts your loader; it must update app state through loading to ready/error. Stable row IDs belong to the records.
10
10
 
11
- This recipe uses `themelia-react-ui/features/table`, so install `@tanstack/react-table` as an optional peer. Card frames the page; the nested table uses `surface="flat"`. A row action calls your navigation callback with your URL; `href` alone on a table action does not navigate. Supply your router callback or ordinary browser navigation. The library neither requests records nor chooses routes.
11
+ This recipe uses `themelia-react-ui/features/table`, so install `@tanstack/react-table` as an optional peer. Card frames an independent Accounts subject; the nested table uses `surface="flat"`. For a primary route collection use its own native table surface, as in the scoped directory below. A row action calls your navigation callback with your URL; `href` alone on a table action does not navigate. Supply your router callback or ordinary browser navigation. The library neither requests records nor chooses routes.
12
12
 
13
13
  Verify loading, empty refresh, failure/retry and ready records. Open the row menu with pointer and keyboard, activate Open account, and assert the requested URL. Check narrow overflow and email-link behavior. If you need a presentational table without TanStack features, discover `themelia-react-ui/base/table` and inspect its separate declaration.
14
14
 
15
+ `enableResizing` enables pointer and keyboard separators on individual/grouped
16
+ headers. Arrow keys follow inherited text direction; Home/End use leaf minimums
17
+ and explicit maximums from your column definitions. The table owns its one named
18
+ scroll region. Verify grouped widths, sticky header rows and first-column behavior
19
+ with real overflow in both directions, rather than adding another focusable wrapper.
20
+
21
+ ## Comment attachments
22
+
23
+ `Comments` and `CommentComposer` announce attachment validation/upload errors.
24
+ Use their existing attachment error `strings` for localization. Headless
25
+ `useAttachmentUpload` accepts those same keys through `strings`; render feedback
26
+ from `onError` in your own composer. Failed chips retain retry/remove actions.
27
+ Reset/removal aborts pending uploads; the app owns transport and persistence.
28
+
15
29
  ## Detail and framing
16
30
 
17
31
  [AccountDetail](../examples/detail.tsx) exports `AccountDetail`, `AccountDetailProps` and `AccountDetailRecord`. Supply `account`, `onEdit(id)` and `onBack()`. Card owns the frame/header/body/footer; Name, Email, Date, Money and Value own formatting and missing-value fallbacks. `balanceMinor` uses `Money unit="minor"`; currency and date values come from the app.
18
32
 
19
33
  No optional peers are needed. The app supplies the loaded record and owns navigation, locale/provider defaults and permissions. Verify missing email/date/balance, a real minor-unit amount, Edit/Back callbacks, and the one-column mobile/two-column desktop composition in light/dark themes.
20
34
 
35
+ ## Scoped directory
36
+
37
+ [ScopedDirectory](../examples/scoped-directory.tsx) demonstrates a primary route
38
+ collection. Page owns Contacts, the fixed business context and the explicit
39
+ primary New contact command. DataTable owns the surface; FilterLayout occupies
40
+ `topbarContent`, optional export occupies `topbarEnd`, and Open contact is a row
41
+ action. ResourceCell owns identity, shared small secondary Text supplies role,
42
+ and Email owns formatting. Other operational facts belong in the contact detail
43
+ reached by `onOpen`; the example does not append every fact to compact identity.
44
+
45
+ The optional `compact` prop is an app presentation decision from available parent
46
+ width. It keeps email reach in the identity cell and omits the comparison Email
47
+ column, preserving one copy and reachable row actions. This deliberately retains
48
+ one task-critical fact; other metadata stays in detail. Choose the threshold
49
+ from actual content and work-region measurements, not a universal library setting.
50
+
51
+ The app supplies `scope`, discriminated `state`, controlled `filters`, navigation
52
+ and loading callbacks. `onQueryChange({ scopeId, filters })` preserves fixed
53
+ business context even when criteria clear. It does not request records itself.
54
+ The recipe removes a blank `q` search criterion without normalizing unrelated
55
+ filter types. Native search can emit an empty string; the app owns query meaning.
56
+ The app updates filters/state, ignores stale responses and preserves scope/query
57
+ in pagination URLs. A criteria-driven business selector would be a different
58
+ product contract. The recipe's English labels are example copy: adapt labels,
59
+ criteria and component `strings` for app translation and permissions.
60
+
61
+ Strict imported declarations require the manifest's optional peers. DataTable
62
+ sorting is disabled because the app's server owns query order. Loading/error
63
+ feedback occupies the empty result region while query context remains mounted;
64
+ accepted records replace it. Use the public loading/preview owner if retaining
65
+ previous results is required by your app. Avoid stale pagination metadata during
66
+ loading/errors. Run the same query with loading, failure, retry and empty results.
67
+
68
+ Verify one contextual lead, primary command, query/clear scope retention,
69
+ row-menu navigation, server page callbacks and long-name/mobile containment.
70
+ Opening a record preserves access to supporting facts. Integrated queries and
71
+ separate query regions are both supported; choose by task and keep one owner.
72
+
73
+ Keep DataTable column/action definitions stable when unrelated parent feedback
74
+ changes. Changing a cell renderer's identity can remount its menu trigger and
75
+ lose return focus. This recipe memoizes row actions by `onOpen`; the app keeps
76
+ that callback stable when its meaning is unchanged. Stabilize these lifecycle
77
+ inputs deliberately, not every object. A real record/scope change can replace
78
+ definitions; the app then chooses appropriate destination focus.
79
+
80
+ ## Single resource page
81
+
82
+ Use `Page`, `PageHeader` and `PageActions` from `themelia-react-ui/layout/page`
83
+ for the record route's identity, back navigation, content bounds and commands.
84
+ The [layout recipe](../examples/app-layout.tsx) demonstrates that route boundary;
85
+ the [detail recipe](../examples/detail.tsx) demonstrates an independently framed
86
+ record subject with MetadataList and value primitives. Decide whether the record
87
+ needs that independent Card before nesting it under Page. Avoid repeating the
88
+ route heading just to frame the same facts. Page owns gutters; PageViewport owns
89
+ scrolling only. App navigation, record loading/missing/error/retry, permissions,
90
+ edit and delete callbacks remain application responsibilities.
91
+
92
+ Use `WorkspaceLayout` from `themelia-react-ui/layout/workspace` when independently composed record header,
93
+ sidebar/main/rail regions are needed; inspect `features/resource` for complete
94
+ resource coordination. A single record does not automatically need either.
95
+ Read [layout composition](composition.md#application-layouts) for boundary and
96
+ parent-width behavior, then the exact selected declaration for its current props.
97
+
21
98
  ## Validated editing
22
99
 
23
100
  [AccountEdit](../examples/edit.tsx) exports `AccountEdit`, `AccountEditProps` and `AccountEditValue`. Supply `initial`, `onSave(value): Promise<AccountEditValue>` and `onCancel()`. Mount with `key={initial.id}` when switching records. The draft is local to that mount; resetting the same record's draft deliberately also requires a new key or your own controlled adaptation.
@@ -37,3 +114,54 @@ Your delete callback owns persistence and record removal. Reject failures instea
37
114
  Verify open/title/description, trapped keyboard focus, Cancel/Escape without a deletion callback, pending dismissal prevention, rejected callback with an open error, retry and successful closure, exactly one backend effect, and trigger focus restoration. Check the opened error dialog in dark/mobile as well as light/desktop. Do not infer these interactions from typechecking or screenshots.
38
115
 
39
116
  The existing [AccountComposition](../examples/composition.tsx) remains a basic Card/ActionDialog composition with `save(name): Promise<void>`. Its callback must reject on failure; the app owns persistence. The four recipes above add progressive collection/detail/edit/delete ownership without changing that example's contract.
117
+
118
+ ## Task summaries, usage and inline editing
119
+
120
+ [Workspace summary](../examples/planning-usage-edit.tsx) composes three focused
121
+ owners. `TaskCard` from `themelia-react-ui/blocks/planning` owns the explicit Card
122
+ surface, completion summary, disclosure and controlled subtask proposals.
123
+ Update `items` after `onItemCompletedChange`; supply each item's `busy` or
124
+ `error` from your persistence lifecycle. Workflow status, due-date formatting,
125
+ assignment and Open navigation remain application data/callbacks.
126
+
127
+ Click passive header content or use the native caret (pointer, Enter or Space)
128
+ to request expansion. Both respect `expanded`/`onExpandedChange` and `disabled`;
129
+ header clicks focus the caret. Subtask and footer actions remain independent.
130
+ The block owns the segmented progress drawing, completion strikethrough and
131
+ compact checklist insets. Its progress value follows accepted `items`, including
132
+ undo; workflow status stays separate. Reduced motion disables the ring animation.
133
+
134
+ `UsageCard` from `themelia-react-ui/blocks/analytics/usage-card` is a standalone
135
+ quota/analytics composition with no optional chart dependency. Supply matching
136
+ `data`, `period` and `status` after `onPeriodChange`; cancel or ignore stale
137
+ application requests. `limit: null` means unlimited, omitted limits or values
138
+ mean unavailable, and zero is real data. Category percentages describe shares
139
+ of reported usage; bounded graphics never hide actual over-quota amounts.
140
+ Daily data is chronological application data with text equivalents. The block
141
+ owns no subscription or billing requests; `footerAction` is application content.
142
+
143
+ `InlineEdit` from `themelia-react-ui/base/inline-edit` uses our native Input or
144
+ Textarea. Supply `onSave(value, { signal })` for asynchronous persistence and
145
+ update a controlled saved value through `onValueChange`. Required/validation
146
+ checks apply when saving a draft. Parent forms serialize the committed value
147
+ through `name`; they own validation of their complete stored data. Enter saves
148
+ a single line, Control/Command Enter saves multiline text, and Escape cancels.
149
+ Cancellation invalidates late UI results and aborts the supplied signal; the
150
+ application owns actual transport and server effects. Read-only display stays
151
+ passive. Use Card at a composition boundary for a framed field section.
152
+
153
+ Display and editing share the Input frame and `size`, `invalid`, `loading`,
154
+ `clearable`, `onClear` and `showCharacterCount` APIs. The stable field/action
155
+ grid transitions width and honors reduced motion; multiline actions form a
156
+ centered column. Use `inputProps`/`textareaProps` for native editor attributes,
157
+ adornments, resizing and control-specific strings. State/value/ref/form ownership
158
+ stays with InlineEdit. Native constraints run on Save; uncommitted controls are
159
+ isolated from the parent form. External loading retains a draft while disabling
160
+ edits/save, and leaves cancellation available.
161
+
162
+ The field/action gap uses the existing `lg` spacing step; the action group uses
163
+ `xs`. Single-line actions form a horizontal pair and multiline actions a centered
164
+ column. Keep these library-owned controls and geometry instead of replacing
165
+ them with app-styled fields. Verify cancellation during persistence, retained
166
+ drafts after rejection, native constraints, committed FormData, controlled
167
+ expansion, checkbox/Open independence and async period retry in your app.
@@ -0,0 +1,31 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createRequire } from 'node:module';
4
+ import { validateIndex } from './discovery.mjs';
5
+ import { analyzeComposition } from './composition-policy.mjs';
6
+
7
+ try {
8
+ const targets = process.argv.slice(2);
9
+ if (!targets.length || targets.some(target => target.startsWith('-'))) throw new Error('Pass explicit source files/directories; no flags or automatic app-wide scan.');
10
+ const requireFromApp = createRequire(path.join(process.cwd(), 'package.json'));
11
+ const ts = requireFromApp('typescript');
12
+ const index = validateIndex(JSON.parse(fs.readFileSync(new URL('../references/public-api.json', import.meta.url), 'utf8')));
13
+ const files = new Set();
14
+ function collect(target) {
15
+ const info = fs.lstatSync(target);
16
+ if (info.isSymbolicLink()) throw new Error(`Use a real source path instead of a symlink: ${target}`);
17
+ if (info.isDirectory()) {
18
+ for (const entry of fs.readdirSync(target).sort()) if (!['node_modules', '.git', 'dist', 'build'].includes(entry)) collect(path.join(target, entry));
19
+ } else if (/\.[jt]sx?$/.test(target) && !/\.d\.ts$/.test(target)) files.add(path.resolve(target));
20
+ }
21
+ targets.forEach(collect);
22
+ if (!files.size) throw new Error('No supported source files found in the supplied paths.');
23
+ const reports = [...files].sort().map(filename => analyzeComposition(fs.readFileSync(filename, 'utf8'), { filename, index, ts }));
24
+ const findings = reports.flatMap(report => report.findings);
25
+ const errors = findings.filter(finding => finding.severity === 'error').length;
26
+ process.stdout.write(JSON.stringify({ package: index.package, version: index.version, files: files.size, errors, warnings: findings.length - errors, findings, unresolved: reports.flatMap(report => report.unresolved), limits: 'Source analysis only: recognized imports and same-file static JSX. External CSS, cross-file wrappers and dynamic values require review. No rendered, interaction, visual-acceptance or production-readiness verdict.' }, null, 2) + '\n');
27
+ process.exitCode = errors ? 1 : 0;
28
+ } catch (error) {
29
+ process.stderr.write(`check-composition: ${error.message}\nRun from the consumer app with its TypeScript development dependency installed.\n`);
30
+ process.exitCode = 1;
31
+ }