themelia-react-ui 1.0.1 → 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 (488) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/README.md +59 -13
  3. package/dist/{accordion-B-5Focs8.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-B5tPpXnS.js → ai-artifact-DLVdK0Py.js} +151 -155
  10. package/dist/ai-artifact-DLVdK0Py.js.map +1 -0
  11. package/dist/{app-shell-at8Kt4l_.js → app-shell-C_fKpljx.js} +11 -10
  12. package/dist/app-shell-C_fKpljx.js.map +1 -0
  13. package/dist/{attachment-BO2R47wn.js → attachment-DbjUWsP0.js} +12 -12
  14. package/dist/{attachment-BO2R47wn.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-Bpzty83c.js → avatar-Bu2HhitA.js} +6 -6
  18. package/dist/{avatar-Bpzty83c.js.map → avatar-Bu2HhitA.js.map} +1 -1
  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 +2 -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 -4
  41. package/dist/base/forms-numeric.js +1 -1
  42. package/dist/base/forms.js +2 -2
  43. package/dist/base/inline-edit.js +40 -43
  44. package/dist/base/inline-edit.js.map +1 -1
  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 +1 -1
  73. package/dist/blocks/analytics.js +510 -472
  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 +36 -36
  83. package/dist/blocks/planning.js.map +1 -1
  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-Cum56XOF.js → cards-qGSErLw_.js} +12 -12
  94. package/dist/{cards-Cum56XOF.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-BavDRjF7.js → checkbox-BQNDjUCh.js} +3 -3
  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-xHKbAJDj.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-DEbdr-3u.js → combobox-BFnbJJp3.js} +18 -18
  108. package/dist/combobox-BFnbJJp3.js.map +1 -0
  109. package/dist/{combobox-xv3yJbzl.js → combobox-hozNwUcc.js} +313 -316
  110. package/dist/combobox-hozNwUcc.js.map +1 -0
  111. package/dist/{command-C0xe7u9B.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 +1 -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/navigation/tabs.d.ts +3 -5
  126. package/dist/components/base/popover/popover.recipes.d.ts +3 -3
  127. package/dist/components/base/table/index.d.ts +1 -1
  128. package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
  129. package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
  130. package/dist/components/blocks/analytics/types.d.ts +1 -1
  131. package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
  132. package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
  133. package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
  134. package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
  135. package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
  136. package/dist/components/features/combobox/components/error-message.d.ts +1 -1
  137. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
  138. package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
  139. package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
  140. package/dist/components/features/media-library/media-library.d.ts +1 -1
  141. package/dist/components/features/media-library/media-library.types.d.ts +9 -1
  142. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  143. package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
  144. package/dist/components/features/overlays/overlays.types.d.ts +5 -4
  145. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
  146. package/dist/components/features/table/data-table.d.ts +1 -1
  147. package/dist/components/features/table/table.types.d.ts +1 -1
  148. package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
  149. package/dist/components/layout/auth/auth.types.d.ts +1 -0
  150. package/dist/components/layout/page/page.d.ts +0 -1
  151. package/dist/components/layout/page/page.types.d.ts +9 -3
  152. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
  153. package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
  154. package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
  155. package/dist/components/typography/heading.d.ts +5 -2
  156. package/dist/components/typography/index.d.ts +1 -1
  157. package/dist/components/typography/text.styles.d.ts +10 -0
  158. package/dist/components/ui/popover.d.ts +1 -1
  159. package/dist/components/ui/sidebar.d.ts +1 -1
  160. package/dist/components/ui/table.d.ts +2 -1
  161. package/dist/container.recipes-D9t8MHR3.js +27 -0
  162. package/dist/container.recipes-D9t8MHR3.js.map +1 -0
  163. package/dist/{containers-6s-ucRQQ.js → containers-DqB-bSYE.js} +33 -56
  164. package/dist/containers-DqB-bSYE.js.map +1 -0
  165. package/dist/control-group-recipes-DBXmfh2E.js +21 -0
  166. package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
  167. package/dist/{copyable-B7SBXJMr.js → copyable-BTSByfmq.js} +6 -6
  168. package/dist/{copyable-B7SBXJMr.js.map → copyable-BTSByfmq.js.map} +1 -1
  169. package/dist/{data-display-cWIRdeaf.js → data-display-Bihs9Ven.js} +545 -332
  170. package/dist/data-display-Bihs9Ven.js.map +1 -0
  171. package/dist/{date-BFNMnrS5.js → date-DOKhJPu7.js} +4 -4
  172. package/dist/{date-BFNMnrS5.js.map → date-DOKhJPu7.js.map} +1 -1
  173. package/dist/{date-picker-CA6ogMQB.js → date-picker-DzP5HQq7.js} +492 -472
  174. package/dist/date-picker-DzP5HQq7.js.map +1 -0
  175. package/dist/date-pickers-BpgGz7S-.js +196 -0
  176. package/dist/date-pickers-BpgGz7S-.js.map +1 -0
  177. package/dist/{display-CFM5myut.js → display-CS6Hbk18.js} +8 -8
  178. package/dist/{display-CFM5myut.js.map → display-CS6Hbk18.js.map} +1 -1
  179. package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-D-boNgGO.js} +7 -7
  180. package/dist/{dropdown-menu-BlnyHr-9.js.map → dropdown-menu-D-boNgGO.js.map} +1 -1
  181. package/dist/features/activities.js +152 -141
  182. package/dist/features/activities.js.map +1 -1
  183. package/dist/features/ai-chat.js +182 -179
  184. package/dist/features/ai-chat.js.map +1 -1
  185. package/dist/features/async-preview.js +9 -9
  186. package/dist/features/async-preview.js.map +1 -1
  187. package/dist/features/combobox.js +1 -1
  188. package/dist/features/comments.js +1 -1
  189. package/dist/features/data-view.js +25 -23
  190. package/dist/features/data-view.js.map +1 -1
  191. package/dist/features/email-composer/engine.js +1 -1
  192. package/dist/features/email-composer.js +103 -104
  193. package/dist/features/email-composer.js.map +1 -1
  194. package/dist/features/event-calendar.js +375 -373
  195. package/dist/features/event-calendar.js.map +1 -1
  196. package/dist/features/filters.js +1 -1
  197. package/dist/features/global-search.js +222 -224
  198. package/dist/features/global-search.js.map +1 -1
  199. package/dist/features/kanban.js +29 -29
  200. package/dist/features/kanban.js.map +1 -1
  201. package/dist/features/map.js +59 -58
  202. package/dist/features/map.js.map +1 -1
  203. package/dist/features/media-library.js +856 -855
  204. package/dist/features/media-library.js.map +1 -1
  205. package/dist/features/mentions.js +1 -1
  206. package/dist/features/overlays.js +1 -1
  207. package/dist/features/products.js +1209 -1209
  208. package/dist/features/products.js.map +1 -1
  209. package/dist/features/questionnaire.js +52 -52
  210. package/dist/features/questionnaire.js.map +1 -1
  211. package/dist/features/resource-assignment.js +29 -31
  212. package/dist/features/resource-assignment.js.map +1 -1
  213. package/dist/features/resource.js +13 -13
  214. package/dist/features/resource.js.map +1 -1
  215. package/dist/features/rich-text-editor.js +2 -2
  216. package/dist/features/schema-form.js +82 -82
  217. package/dist/features/schema-form.js.map +1 -1
  218. package/dist/features/suggestions.js +3 -3
  219. package/dist/features/sync.js +4 -4
  220. package/dist/features/sync.js.map +1 -1
  221. package/dist/features/table.js +1 -1
  222. package/dist/features/theme-tweaker.js +456 -450
  223. package/dist/features/theme-tweaker.js.map +1 -1
  224. package/dist/{feedback-DWUkgEjR.js → feedback-CJkUAapr.js} +29 -29
  225. package/dist/feedback-CJkUAapr.js.map +1 -0
  226. package/dist/field-affordance-recipes-uKY4MsZ_.js +25 -0
  227. package/dist/field-affordance-recipes-uKY4MsZ_.js.map +1 -0
  228. package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-DQQpiLWC.js} +3 -3
  229. package/dist/field-state-recipes-DQQpiLWC.js.map +1 -0
  230. package/dist/{filters-BhsUtsxW.js → filters-D6FF8L6s.js} +715 -720
  231. package/dist/filters-D6FF8L6s.js.map +1 -0
  232. package/dist/{form-field-Bn7ZH1rA.js → form-field-CZwrkP7m.js} +17 -9
  233. package/dist/form-field-CZwrkP7m.js.map +1 -0
  234. package/dist/{form-sizing-BWs70_a2.js → form-sizing-QP8aIRaW.js} +8 -5
  235. package/dist/form-sizing-QP8aIRaW.js.map +1 -0
  236. package/dist/{forms-B7pzS25o.js → forms-B5NCbkSC.js} +35 -35
  237. package/dist/{forms-B7pzS25o.js.map → forms-B5NCbkSC.js.map} +1 -1
  238. package/dist/forms-numeric-Crrm80Lm.js +867 -0
  239. package/dist/forms-numeric-Crrm80Lm.js.map +1 -0
  240. package/dist/{header-C59QZyxV.js → header-kxruN3RM.js} +53 -49
  241. package/dist/header-kxruN3RM.js.map +1 -0
  242. package/dist/{hooks-CM1Vp9Pe.js → hooks-BrlnCwQd.js} +2 -2
  243. package/dist/{hooks-CM1Vp9Pe.js.map → hooks-BrlnCwQd.js.map} +1 -1
  244. package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
  245. package/dist/http-CdEIHyQf.js.map +1 -0
  246. package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-Btc6pQrp.js} +4 -4
  247. package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-Btc6pQrp.js.map} +1 -1
  248. package/dist/index.js +2 -2
  249. package/dist/input-SX9V0AL3.js +255 -0
  250. package/dist/input-SX9V0AL3.js.map +1 -0
  251. package/dist/input-vxcaNCYC.js +20 -0
  252. package/dist/input-vxcaNCYC.js.map +1 -0
  253. package/dist/{item-pJ0GsOiJ.js → item-DE4YnuJx.js} +18 -17
  254. package/dist/item-DE4YnuJx.js.map +1 -0
  255. package/dist/layout/app-shell.js +1 -1
  256. package/dist/layout/auth.js +1 -1
  257. package/dist/layout/containers.js +1 -1
  258. package/dist/layout/header.js +1 -1
  259. package/dist/layout/hooks.js +1 -1
  260. package/dist/layout/navigation.js +1 -1
  261. package/dist/layout/page.js +1 -1
  262. package/dist/layout/settings.js +1 -1
  263. package/dist/layout/sidebar.js +2 -2
  264. package/dist/layout/workspace.js +1 -1
  265. package/dist/layout.js +10 -10
  266. package/dist/lib/affordance-geometry.generated.d.ts +40 -9
  267. package/dist/lib/control-group-recipes.d.ts +22 -0
  268. package/dist/lib/field-affordance-recipes.d.ts +35 -2
  269. package/dist/lib/field-state-recipes.d.ts +2 -2
  270. package/dist/lib/navigation-row-recipes.d.ts +3 -2
  271. package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
  272. package/dist/lib/surface-recipes.d.ts +5 -2
  273. package/dist/lib/token-merge.generated.d.ts +144 -2
  274. package/dist/lib/ui-provider/types.d.ts +4 -2
  275. package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
  276. package/dist/lib/utils.js +1 -1
  277. package/dist/{media-gallery-DhDRgnVZ.js → media-gallery-DLp3HAz0.js} +75 -74
  278. package/dist/media-gallery-DLp3HAz0.js.map +1 -0
  279. package/dist/{mentions-B8Ko-fhS.js → mentions-Cl0Kt_Pd.js} +52 -50
  280. package/dist/{mentions-B8Ko-fhS.js.map → mentions-Cl0Kt_Pd.js.map} +1 -1
  281. package/dist/message-SZUNB1eX.js +127 -0
  282. package/dist/message-SZUNB1eX.js.map +1 -0
  283. package/dist/{navigation-DBEu4POU.js → navigation-DnQSNMT0.js} +64 -55
  284. package/dist/navigation-DnQSNMT0.js.map +1 -0
  285. package/dist/{navigation-BUIn2Qxx.js → navigation-DyytsLRB.js} +37 -37
  286. package/dist/navigation-DyytsLRB.js.map +1 -0
  287. package/dist/{navigation-row-recipes-GVh11KiT.js → navigation-row-recipes-DQEXQcqY.js} +3 -3
  288. package/dist/navigation-row-recipes-DQEXQcqY.js.map +1 -0
  289. package/dist/{number-BNT_BIzJ.js → number-DasMFWEG.js} +4 -4
  290. package/dist/{number-BNT_BIzJ.js.map → number-DasMFWEG.js.map} +1 -1
  291. package/dist/overlays-DUbs1KEi.js +1011 -0
  292. package/dist/overlays-DUbs1KEi.js.map +1 -0
  293. package/dist/{page-BV6ioQg3.js → page-hGmT4nWK.js} +75 -64
  294. package/dist/page-hGmT4nWK.js.map +1 -0
  295. package/dist/{page-header-DQRa0jug.js → page-header-D8nERkn5.js} +9 -9
  296. package/dist/page-header-D8nERkn5.js.map +1 -0
  297. package/dist/{pagination-C29vvt3I.js → pagination-NLGqRirf.js} +20 -20
  298. package/dist/pagination-NLGqRirf.js.map +1 -0
  299. package/dist/{popover-CoLDEg19.js → popover-CghIYdQf.js} +23 -22
  300. package/dist/popover-CghIYdQf.js.map +1 -0
  301. package/dist/{popover-menu-GLIQTJTx.js → popover-menu-B4PoWhRl.js} +6 -6
  302. package/dist/{popover-menu-GLIQTJTx.js.map → popover-menu-B4PoWhRl.js.map} +1 -1
  303. package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-QlD4JenO.js} +5 -5
  304. package/dist/popover.recipes-QlD4JenO.js.map +1 -0
  305. package/dist/{primitives-DKPOGVpj.js → primitives-C7ff0QaI.js} +120 -113
  306. package/dist/primitives-C7ff0QaI.js.map +1 -0
  307. package/dist/primitives.js +3 -3
  308. package/dist/{progress-BOe8l_FZ.js → progress-BroqrAyV.js} +10 -9
  309. package/dist/progress-BroqrAyV.js.map +1 -0
  310. package/dist/{receipt-BM8xsGFy.js → receipt-BuJynLgf.js} +8 -8
  311. package/dist/{receipt-BM8xsGFy.js.map → receipt-BuJynLgf.js.map} +1 -1
  312. package/dist/{rich-text-B7sBAdDG.js → rich-text-DlxDOtf4.js} +4 -4
  313. package/dist/{rich-text-B7sBAdDG.js.map → rich-text-DlxDOtf4.js.map} +1 -1
  314. package/dist/rich-text-editor-BKyG7rWz.js +574 -0
  315. package/dist/rich-text-editor-BKyG7rWz.js.map +1 -0
  316. package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-B72Nfuze.js} +35 -26
  317. package/dist/rich-text-editor.recipes-B72Nfuze.js.map +1 -0
  318. package/dist/{scroll-area-BheMQ270.js → scroll-area-D-pIhEKl.js} +3 -3
  319. package/dist/scroll-area-D-pIhEKl.js.map +1 -0
  320. package/dist/{separator-Gk_WXH-l.js → separator-BNIgG3au.js} +3 -3
  321. package/dist/{separator-Gk_WXH-l.js.map → separator-BNIgG3au.js.map} +1 -1
  322. package/dist/{separator-DO0EbCEm.js → separator-BhtFyo4x.js} +2 -2
  323. package/dist/{separator-DO0EbCEm.js.map → separator-BhtFyo4x.js.map} +1 -1
  324. package/dist/services/actions.js +1 -1
  325. package/dist/{settings-BnCyyPOJ.js → settings-DOTOzeZ2.js} +10 -9
  326. package/dist/{settings-BnCyyPOJ.js.map → settings-DOTOzeZ2.js.map} +1 -1
  327. package/dist/{sheet-B-q914Ad.js → sheet-BFhrNehm.js} +11 -11
  328. package/dist/sheet-BFhrNehm.js.map +1 -0
  329. package/dist/{sidebar-DPR7fmqN.js → sidebar-CyR4XKwR.js} +219 -200
  330. package/dist/sidebar-CyR4XKwR.js.map +1 -0
  331. package/dist/{sidebar-C_2p3Tfj.js → sidebar-SvGJ0Zwi.js} +63 -58
  332. package/dist/sidebar-SvGJ0Zwi.js.map +1 -0
  333. package/dist/{skeleton-CmT1ppqb.js → skeleton-3F0uhYn3.js} +4 -4
  334. package/dist/{skeleton-CmT1ppqb.js.map → skeleton-3F0uhYn3.js.map} +1 -1
  335. package/dist/{smart-card-CYLn46e6.js → smart-card-DjGVV2xr.js} +171 -165
  336. package/dist/smart-card-DjGVV2xr.js.map +1 -0
  337. package/dist/{spinner-BY9HbUEh.js → spinner-Cpf7oRkF.js} +5 -5
  338. package/dist/{spinner-BY9HbUEh.js.map → spinner-Cpf7oRkF.js.map} +1 -1
  339. package/dist/{structure-MvKVq-oL.js → structure-CRdqVawd.js} +2 -2
  340. package/dist/{structure-MvKVq-oL.js.map → structure-CRdqVawd.js.map} +1 -1
  341. package/dist/style.css +1 -1
  342. package/dist/{surface-recipes-CQfRr-VL.js → surface-recipes-Dd__PD-w.js} +4 -3
  343. package/dist/surface-recipes-Dd__PD-w.js.map +1 -0
  344. package/dist/{table-DnlAJ-xR.js → table-CLtJTxoR.js} +17 -16
  345. package/dist/table-CLtJTxoR.js.map +1 -0
  346. package/dist/table-CcRDZiLP.js +1444 -0
  347. package/dist/table-CcRDZiLP.js.map +1 -0
  348. package/dist/tabs-BNgu7g0u.js +188 -0
  349. package/dist/tabs-BNgu7g0u.js.map +1 -0
  350. package/dist/text-inputs-DsR56TR-.js +330 -0
  351. package/dist/text-inputs-DsR56TR-.js.map +1 -0
  352. package/dist/{text.styles-BwB7vAF2.js → text.styles-Q4sGAIgA.js} +18 -10
  353. package/dist/text.styles-Q4sGAIgA.js.map +1 -0
  354. package/dist/theme.css +77 -115
  355. package/dist/{timelines-B9ICkQcV.js → timelines-D1pkt3se.js} +84 -78
  356. package/dist/timelines-D1pkt3se.js.map +1 -0
  357. package/dist/{tree-BdWSaoFT.js → tree-BtmYyMZV.js} +8 -8
  358. package/dist/{tree-BdWSaoFT.js.map → tree-BtmYyMZV.js.map} +1 -1
  359. package/dist/typography/rich-text.js +1 -1
  360. package/dist/typography-BxQgiZyw.js +96 -0
  361. package/dist/typography-BxQgiZyw.js.map +1 -0
  362. package/dist/typography.js +1 -1
  363. package/dist/{ui-provider-CftIB6TY.js → ui-provider-DRPn3qNl.js} +3 -2
  364. package/dist/ui-provider-DRPn3qNl.js.map +1 -0
  365. package/dist/ui-provider.js +1 -1
  366. package/dist/{upload-D8Za5x_c.js → upload-CDbYw1WN.js} +326 -323
  367. package/dist/upload-CDbYw1WN.js.map +1 -0
  368. package/dist/{upload-queue-hIIYBLS7.js → upload-queue-CNd_hH_a.js} +25 -25
  369. package/dist/upload-queue-CNd_hH_a.js.map +1 -0
  370. package/dist/{usage-card-DnmnJ58D.js → usage-card-VyJLUwRr.js} +53 -54
  371. package/dist/usage-card-VyJLUwRr.js.map +1 -0
  372. package/dist/utils-BvH9PSmq.js +4275 -0
  373. package/dist/utils-BvH9PSmq.js.map +1 -0
  374. package/dist/value-inputs-D0KCrfVC.js +840 -0
  375. package/dist/value-inputs-D0KCrfVC.js.map +1 -0
  376. package/dist/{workspace-C1PZmk8L.js → workspace-CcR8r-Nt.js} +115 -122
  377. package/dist/workspace-CcR8r-Nt.js.map +1 -0
  378. package/docs/consumer-skill/SKILL.md +110 -119
  379. package/docs/consumer-skill/examples/analytics.tsx +34 -0
  380. package/docs/consumer-skill/examples/app-layout.tsx +42 -12
  381. package/docs/consumer-skill/examples/detail.tsx +20 -4
  382. package/docs/consumer-skill/examples/manifest.json +13 -1
  383. package/docs/consumer-skill/examples/website.tsx +56 -0
  384. package/docs/consumer-skill/references/analytics.md +70 -0
  385. package/docs/consumer-skill/references/composition.md +116 -2
  386. package/docs/consumer-skill/references/design-contract.md +33 -7
  387. package/docs/consumer-skill/references/discovery.md +76 -5
  388. package/docs/consumer-skill/references/integration.md +14 -0
  389. package/docs/consumer-skill/references/public-api.json +2023 -218
  390. package/docs/consumer-skill/references/review.md +55 -3
  391. package/docs/consumer-skill/references/theming.md +52 -7
  392. package/docs/consumer-skill/references/tokens.json +177 -9
  393. package/docs/consumer-skill/references/workflows.md +32 -0
  394. package/docs/consumer-skill/scripts/check-composition.mjs +1 -1
  395. package/docs/consumer-skill/scripts/composition-policy.mjs +179 -17
  396. package/docs/consumer-skill/scripts/discovery.mjs +61 -9
  397. package/docs/consumer-skill/scripts/surface-policy.mjs +44 -0
  398. package/package.json +7 -4
  399. package/dist/accordion-B-5Focs8.js.map +0 -1
  400. package/dist/action-menu-Cx3SdfbN.js.map +0 -1
  401. package/dist/affordance-geometry.generated-D8Jcfb0G.js +0 -32
  402. package/dist/affordance-geometry.generated-D8Jcfb0G.js.map +0 -1
  403. package/dist/ai-artifact-B5tPpXnS.js.map +0 -1
  404. package/dist/app-shell-at8Kt4l_.js.map +0 -1
  405. package/dist/auth-OFwWSAap.js +0 -704
  406. package/dist/auth-OFwWSAap.js.map +0 -1
  407. package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
  408. package/dist/button-BS6l5JUw.js.map +0 -1
  409. package/dist/buttons-Co6GavvM.js +0 -674
  410. package/dist/buttons-Co6GavvM.js.map +0 -1
  411. package/dist/chart-DVfcwQu6.js +0 -149
  412. package/dist/chart-DVfcwQu6.js.map +0 -1
  413. package/dist/checkbox-BavDRjF7.js.map +0 -1
  414. package/dist/choice-inputs-CC7XqPQO.js +0 -619
  415. package/dist/choice-inputs-CC7XqPQO.js.map +0 -1
  416. package/dist/code-block-xHKbAJDj.js.map +0 -1
  417. package/dist/combobox-DEbdr-3u.js.map +0 -1
  418. package/dist/combobox-xv3yJbzl.js.map +0 -1
  419. package/dist/command-C0xe7u9B.js.map +0 -1
  420. package/dist/comments-DviPLnwy.js +0 -1132
  421. package/dist/comments-DviPLnwy.js.map +0 -1
  422. package/dist/containers-6s-ucRQQ.js.map +0 -1
  423. package/dist/data-display-cWIRdeaf.js.map +0 -1
  424. package/dist/date-picker-CA6ogMQB.js.map +0 -1
  425. package/dist/date-pickers-BPIKLdsD.js +0 -224
  426. package/dist/date-pickers-BPIKLdsD.js.map +0 -1
  427. package/dist/feedback-DWUkgEjR.js.map +0 -1
  428. package/dist/field-affordance-recipes-IjzPrCTw.js +0 -17
  429. package/dist/field-affordance-recipes-IjzPrCTw.js.map +0 -1
  430. package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
  431. package/dist/filters-BhsUtsxW.js.map +0 -1
  432. package/dist/form-field-Bn7ZH1rA.js.map +0 -1
  433. package/dist/form-sizing-BWs70_a2.js.map +0 -1
  434. package/dist/forms-numeric-BUBxELBv.js +0 -867
  435. package/dist/forms-numeric-BUBxELBv.js.map +0 -1
  436. package/dist/header-C59QZyxV.js.map +0 -1
  437. package/dist/http-CLTVJc5I.js.map +0 -1
  438. package/dist/input-WwYQZJzG.js +0 -202
  439. package/dist/input-WwYQZJzG.js.map +0 -1
  440. package/dist/input-ci9fIgFH.js +0 -20
  441. package/dist/input-ci9fIgFH.js.map +0 -1
  442. package/dist/item-pJ0GsOiJ.js.map +0 -1
  443. package/dist/media-gallery-DhDRgnVZ.js.map +0 -1
  444. package/dist/message-COsdEvXT.js +0 -108
  445. package/dist/message-COsdEvXT.js.map +0 -1
  446. package/dist/navigation-BUIn2Qxx.js.map +0 -1
  447. package/dist/navigation-DBEu4POU.js.map +0 -1
  448. package/dist/navigation-row-recipes-GVh11KiT.js.map +0 -1
  449. package/dist/overlays-B11wZka6.js +0 -982
  450. package/dist/overlays-B11wZka6.js.map +0 -1
  451. package/dist/page-BV6ioQg3.js.map +0 -1
  452. package/dist/page-header-DQRa0jug.js.map +0 -1
  453. package/dist/pagination-C29vvt3I.js.map +0 -1
  454. package/dist/popover-CoLDEg19.js.map +0 -1
  455. package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
  456. package/dist/primitives-DKPOGVpj.js.map +0 -1
  457. package/dist/progress-BOe8l_FZ.js.map +0 -1
  458. package/dist/rich-text-editor-CoVrTiSv.js +0 -575
  459. package/dist/rich-text-editor-CoVrTiSv.js.map +0 -1
  460. package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
  461. package/dist/scroll-area-BheMQ270.js.map +0 -1
  462. package/dist/select-B2mb-qN2.js +0 -108
  463. package/dist/select-B2mb-qN2.js.map +0 -1
  464. package/dist/sheet-B-q914Ad.js.map +0 -1
  465. package/dist/sidebar-C_2p3Tfj.js.map +0 -1
  466. package/dist/sidebar-DPR7fmqN.js.map +0 -1
  467. package/dist/smart-card-CYLn46e6.js.map +0 -1
  468. package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
  469. package/dist/table-BS39xnlq.js +0 -1424
  470. package/dist/table-BS39xnlq.js.map +0 -1
  471. package/dist/table-DnlAJ-xR.js.map +0 -1
  472. package/dist/tabs-B5cNMWiP.js +0 -187
  473. package/dist/tabs-B5cNMWiP.js.map +0 -1
  474. package/dist/text-inputs-Dh9XGyiS.js +0 -331
  475. package/dist/text-inputs-Dh9XGyiS.js.map +0 -1
  476. package/dist/text.styles-BwB7vAF2.js.map +0 -1
  477. package/dist/timelines-B9ICkQcV.js.map +0 -1
  478. package/dist/typography-Cv8MT-82.js +0 -96
  479. package/dist/typography-Cv8MT-82.js.map +0 -1
  480. package/dist/ui-provider-CftIB6TY.js.map +0 -1
  481. package/dist/upload-D8Za5x_c.js.map +0 -1
  482. package/dist/upload-queue-hIIYBLS7.js.map +0 -1
  483. package/dist/usage-card-DnmnJ58D.js.map +0 -1
  484. package/dist/utils-C2EKeIw3.js +0 -72
  485. package/dist/utils-C2EKeIw3.js.map +0 -1
  486. package/dist/value-inputs-DX2dbxjj.js +0 -824
  487. package/dist/value-inputs-DX2dbxjj.js.map +0 -1
  488. package/dist/workspace-C1PZmk8L.js.map +0 -1
@@ -37,14 +37,33 @@ identity check. It neither edits files nor installs dependencies. Add this
37
37
  command to app CI if useful; repository lint is not automatically installed.
38
38
 
39
39
  Errors cover unknown package entrypoints/symbols and statically detected overrides
40
- of protected popup insets or control geometry/typography. Deprecated migration
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
41
46
  owners, nested framed subjects and repeated literal headings produce review
42
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.
43
62
  Use existing app lint/typechecking for wider language, utility and accessibility
44
63
  coverage. The script is deliberately small and does not replace them.
45
64
 
46
- Coverage is limited to direct public imports, aliases/namespaces, and same-file
47
- static classes/styles/props. Dynamic expressions are reported as unresolved;
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;
48
67
  cross-file wrappers, external CSS, render functions and runtime values require
49
68
  review. Do not treat an empty report as proof of complete compliance or taste.
50
69
 
@@ -60,6 +79,14 @@ and failure/retry states. Use deferred requests to observe pending behavior.
60
79
  Confirm accepted data changes and draft retention; a toast is only feedback.
61
80
  Compare before/after at the same conditions and record unverified limits.
62
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
+
63
90
  ## Application policy
64
91
 
65
92
  Keep a small app-owned reference linked from its agent instructions: name the
@@ -68,7 +95,32 @@ information priorities and relevant local tests. Link current representative
68
95
  pages. Preserve permissions, transport, translations and product-specific forms.
69
96
  Do not copy the package API manual or edit the packaged skill to encode local policy.
70
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
+
71
105
  Package declarations define supported props; this skill defines shared composition
72
106
  and anatomy; the app defines business meaning and page conventions. If a shared
73
107
  owner fails in a valid composition, isolate a reproduction and report the owning
74
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.1",
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",
@@ -12,6 +12,20 @@ This recipe uses `themelia-react-ui/features/table`, so install `@tanstack/react
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.
@@ -63,6 +77,24 @@ that callback stable when its meaning is unchanged. Stabilize these lifecycle
63
77
  inputs deliberately, not every object. A real record/scope change can replace
64
78
  definitions; the app then chooses appropriate destination focus.
65
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
+
66
98
  ## Validated editing
67
99
 
68
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.
@@ -23,7 +23,7 @@ try {
23
23
  const reports = [...files].sort().map(filename => analyzeComposition(fs.readFileSync(filename, 'utf8'), { filename, index, ts }));
24
24
  const findings = reports.flatMap(report => report.findings);
25
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: 'Direct public imports and same-file static JSX only; external CSS, cross-file wrappers and dynamic values require review.' }, null, 2) + '\n');
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
27
  process.exitCode = errors ? 1 : 0;
28
28
  } catch (error) {
29
29
  process.stderr.write(`check-composition: ${error.message}\nRun from the consumer app with its TypeScript development dependency installed.\n`);