themelia-react-ui 2.0.3 → 2.0.5

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 (648) hide show
  1. package/CHANGELOG.md +185 -0
  2. package/README.md +168 -36
  3. package/dist/{accordion-Cjb6sx0G.js → accordion-B9MHG0cT.js} +11 -11
  4. package/dist/accordion-B9MHG0cT.js.map +1 -0
  5. package/dist/action-menu-Dr8K-ghE.js +284 -0
  6. package/dist/action-menu-Dr8K-ghE.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-P-aVJisu.js} +42 -36
  8. package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
  9. package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-C58tQcBy.js} +387 -350
  10. package/dist/ai-artifact-C58tQcBy.js.map +1 -0
  11. package/dist/app-shell-B_IuNWOo.js +321 -0
  12. package/dist/app-shell-B_IuNWOo.js.map +1 -0
  13. package/dist/{attachment-BxDfL2mw.js → attachment-Dg_69lPS.js} +9 -9
  14. package/dist/{attachment-BxDfL2mw.js.map → attachment-Dg_69lPS.js.map} +1 -1
  15. package/dist/{auth-BGua8ouh.js → auth-DTkkshS8.js} +44 -47
  16. package/dist/auth-DTkkshS8.js.map +1 -0
  17. package/dist/{avatar-DAPlDvhJ.js → avatar-CeZaFmNH.js} +8 -8
  18. package/dist/avatar-CeZaFmNH.js.map +1 -0
  19. package/dist/{badge-HpFqoqSY.js → badge-xIiV_E7f.js} +5 -5
  20. package/dist/{badge-HpFqoqSY.js.map → badge-xIiV_E7f.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/batch-action-bar.js +1 -1
  27. package/dist/base/buttons.js +1 -1
  28. package/dist/base/cards.js +2 -2
  29. package/dist/base/carousel.js +3 -3
  30. package/dist/base/cascader.js +2 -372
  31. package/dist/base/chart.js +1 -1
  32. package/dist/base/choice-inputs.js +2 -2
  33. package/dist/base/code-block.js +1 -1
  34. package/dist/base/combobox.js +2 -2
  35. package/dist/base/command.js +1 -1
  36. package/dist/base/copyable.js +1 -1
  37. package/dist/base/date-pickers.js +2 -2
  38. package/dist/base/display.js +6 -6
  39. package/dist/base/feedback.js +3 -3
  40. package/dist/base/forms-numeric.js +1 -1
  41. package/dist/base/forms.js +3 -3
  42. package/dist/base/inline-edit.js +10 -10
  43. package/dist/base/item.js +1 -1
  44. package/dist/base/media-gallery.js +1 -1
  45. package/dist/base/metadata-list.js +1 -1
  46. package/dist/base/navigation.js +7 -7
  47. package/dist/base/popover-menu.js +1 -1
  48. package/dist/base/popover.js +1 -1
  49. package/dist/base/qr-code.js +1 -1
  50. package/dist/base/repeaters.js +12 -12
  51. package/dist/base/repeaters.js.map +1 -1
  52. package/dist/base/sheet.js +1 -1
  53. package/dist/base/sidebar.js +2 -2
  54. package/dist/base/signature-pad.js +7 -7
  55. package/dist/base/signature-pad.js.map +1 -1
  56. package/dist/base/skeleton.js +1 -1
  57. package/dist/base/spinner.js +4 -4
  58. package/dist/base/structure.js +1 -1
  59. package/dist/base/table.js +1 -1
  60. package/dist/base/text-inputs.js +2 -2
  61. package/dist/base/toaster.js +36 -36
  62. package/dist/base/toaster.js.map +1 -1
  63. package/dist/base/tree.js +1 -1
  64. package/dist/base/upload-queue.js +1 -1
  65. package/dist/base/upload.js +3 -3
  66. package/dist/base/value-inputs.js +1 -1
  67. package/dist/{batch-action-bar-DnUJ21NQ.js → batch-action-bar-Cb8cuvyy.js} +6 -6
  68. package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
  69. package/dist/blocks/admin.js +23 -23
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +230 -216
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +326 -307
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +1 -1
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1247 -1169
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +2 -2
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +11 -11
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-C-oqs1sQ.js → breadcrumbs-J-K2kl4c.js} +6 -6
  86. package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
  87. package/dist/{button-DVzspB_G.js → button-S2Cubiiz.js} +3 -3
  88. package/dist/button-S2Cubiiz.js.map +1 -0
  89. package/dist/{buttons-DPZekJFu.js → buttons-BedGfygC.js} +16 -16
  90. package/dist/buttons-BedGfygC.js.map +1 -0
  91. package/dist/cards-rNX1M4Xn.js +69 -0
  92. package/dist/cards-rNX1M4Xn.js.map +1 -0
  93. package/dist/cascader-B1MiqkBq.js +439 -0
  94. package/dist/cascader-B1MiqkBq.js.map +1 -0
  95. package/dist/chart-Darg_0Kv.js +162 -0
  96. package/dist/chart-Darg_0Kv.js.map +1 -0
  97. package/dist/{checkbox-AWIhNhmo.js → checkbox-fflqmODR.js} +9 -5
  98. package/dist/checkbox-fflqmODR.js.map +1 -0
  99. package/dist/choice-inputs-zUgBZfE4.js +777 -0
  100. package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
  101. package/dist/{code-block-DeneBJR_.js → code-block-BzmM9Eig.js} +9 -9
  102. package/dist/code-block-BzmM9Eig.js.map +1 -0
  103. package/dist/{collapsible-C-_l4hpy.js → collapsible-BkAI_XD4.js} +5 -5
  104. package/dist/{collapsible-C-_l4hpy.js.map → collapsible-BkAI_XD4.js.map} +1 -1
  105. package/dist/{collection-content-By56pLog.js → collection-content-gDh1v6O4.js} +3 -3
  106. package/dist/{collection-content-By56pLog.js.map → collection-content-gDh1v6O4.js.map} +1 -1
  107. package/dist/combobox-BEx0vJgF.js +362 -0
  108. package/dist/combobox-BEx0vJgF.js.map +1 -0
  109. package/dist/{combobox-Dxo2fAYQ.js → combobox-BwzoXFSG.js} +254 -247
  110. package/dist/combobox-BwzoXFSG.js.map +1 -0
  111. package/dist/{command-C25VMRII.js → command-CrlPIL6m.js} +12 -12
  112. package/dist/command-CrlPIL6m.js.map +1 -0
  113. package/dist/{comments-DD0DUPwJ.js → comments-Dmpp0YIc.js} +380 -379
  114. package/dist/comments-Dmpp0YIc.js.map +1 -0
  115. package/dist/components/base/action-menu/action-menu.d.ts +9 -1
  116. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  117. package/dist/components/base/cards/card.recipes.d.ts +16 -7
  118. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
  119. package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
  120. package/dist/components/base/cards/smart-card.types.d.ts +11 -7
  121. package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
  122. package/dist/components/base/chart/chart.d.ts +6 -1
  123. package/dist/components/base/choice-inputs/checkbox.d.ts +7 -2
  124. package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
  125. package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
  126. package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
  127. package/dist/components/base/combobox/index.d.ts +4 -2
  128. package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
  129. package/dist/components/base/feedback/alert.d.ts +1 -1
  130. package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
  131. package/dist/components/base/forms/form-field.d.ts +5 -3
  132. package/dist/components/base/forms/form-sizing.d.ts +7 -7
  133. package/dist/components/base/forms/index.d.ts +1 -0
  134. package/dist/components/base/forms/server-errors.d.ts +16 -0
  135. package/dist/components/base/forms/workflow.d.ts +11 -2
  136. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
  137. package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
  138. package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
  139. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
  140. package/dist/components/base/navigation/page-header/page-header.d.ts +13 -4
  141. package/dist/components/base/popover/popover.d.ts +3 -3
  142. package/dist/components/base/popover/popover.recipes.d.ts +10 -6
  143. package/dist/components/base/sheet/sheet.d.ts +2 -0
  144. package/dist/components/base/sidebar/index.d.ts +1 -1
  145. package/dist/components/base/sidebar/sidebar.d.ts +27 -5
  146. package/dist/components/base/structure/composition.recipes.d.ts +17 -0
  147. package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
  148. package/dist/components/base/text-inputs/input.d.ts +4 -2
  149. package/dist/components/base/text-inputs/textarea.d.ts +4 -2
  150. package/dist/components/base/toaster/index.d.ts +1 -0
  151. package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
  152. package/dist/components/base/value-inputs/slider.d.ts +5 -1
  153. package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
  154. package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
  155. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
  156. package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
  157. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  158. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
  159. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
  160. package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
  161. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
  162. package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
  163. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
  164. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
  165. package/dist/components/blocks/commerce/index.d.ts +7 -6
  166. package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
  167. package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
  168. package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
  169. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  170. package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
  171. package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
  172. package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
  173. package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
  174. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
  175. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
  176. package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
  177. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
  178. package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  180. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
  181. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  182. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
  183. package/dist/components/features/activities/activities.types.d.ts +8 -2
  184. package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
  185. package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
  186. package/dist/components/features/event-calendar/colors.d.ts +2 -2
  187. package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
  188. package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
  189. package/dist/components/features/filters/filters.strings.d.ts +4 -0
  190. package/dist/components/features/filters/filters.types.d.ts +3 -0
  191. package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
  192. package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
  193. package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
  194. package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
  195. package/dist/components/features/filters/utils/filter-utils.d.ts +21 -3
  196. package/dist/components/features/global-search/global-search.types.d.ts +2 -0
  197. package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
  198. package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
  199. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  200. package/dist/components/features/media-library/media-library.types.d.ts +14 -4
  201. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  202. package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
  203. package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
  204. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  205. package/dist/components/features/products/products.strings.d.ts +9 -1
  206. package/dist/components/features/products/products.types.d.ts +43 -6
  207. package/dist/components/features/resource/resource.d.ts +5 -1
  208. package/dist/components/features/resource/resource.types.d.ts +12 -1
  209. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
  210. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
  211. package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
  212. package/dist/components/features/table/table.types.d.ts +1 -1
  213. package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
  214. package/dist/components/layout/app-shell/index.d.ts +1 -1
  215. package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
  216. package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
  217. package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
  218. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  219. package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
  220. package/dist/components/layout/header/header.recipes.d.ts +6 -0
  221. package/dist/components/layout/header/header.types.d.ts +6 -6
  222. package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
  223. package/dist/components/layout/page/index.d.ts +2 -1
  224. package/dist/components/layout/page/page.d.ts +1 -0
  225. package/dist/components/layout/page/page.strings.d.ts +11 -0
  226. package/dist/components/layout/page/page.types.d.ts +69 -17
  227. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  228. package/dist/components/layout/settings/settings.d.ts +9 -2
  229. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  230. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
  231. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
  232. package/dist/components/layout/sidebar/index.d.ts +2 -1
  233. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +36 -0
  234. package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
  235. package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -10
  236. package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
  237. package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
  238. package/dist/components/typography/text.styles.d.ts +26 -1
  239. package/dist/components/ui/alert-dialog.d.ts +2 -2
  240. package/dist/components/ui/combobox.d.ts +1 -1
  241. package/dist/components/ui/dialog.d.ts +2 -2
  242. package/dist/components/ui/overlay-layer.d.ts +18 -0
  243. package/dist/components/ui/sheet.d.ts +5 -1
  244. package/dist/components/ui/sidebar-state.d.ts +82 -0
  245. package/dist/components/ui/sidebar.d.ts +5 -17
  246. package/dist/composition.recipes-COdiFhxB.js +19 -0
  247. package/dist/composition.recipes-COdiFhxB.js.map +1 -0
  248. package/dist/containers-CIxwbZt5.js +112 -0
  249. package/dist/containers-CIxwbZt5.js.map +1 -0
  250. package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
  251. package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
  252. package/dist/{copyable-ClBuk_UK.js → copyable-DIznBqiT.js} +7 -7
  253. package/dist/{copyable-ClBuk_UK.js.map → copyable-DIznBqiT.js.map} +1 -1
  254. package/dist/{data-display-DT_khPl_.js → data-display-BdgCAw8T.js} +277 -285
  255. package/dist/data-display-BdgCAw8T.js.map +1 -0
  256. package/dist/{date-DCrsDTZc.js → date-Cq8ioE4o.js} +5 -5
  257. package/dist/{date-DCrsDTZc.js.map → date-Cq8ioE4o.js.map} +1 -1
  258. package/dist/{date-picker-B2K3ucWn.js → date-picker-RlIzKom_.js} +501 -480
  259. package/dist/date-picker-RlIzKom_.js.map +1 -0
  260. package/dist/date-pickers-DY-CpXS1.js +179 -0
  261. package/dist/date-pickers-DY-CpXS1.js.map +1 -0
  262. package/dist/{display-hAc1HjpI.js → display-KsZLw9Ov.js} +9 -9
  263. package/dist/{display-hAc1HjpI.js.map → display-KsZLw9Ov.js.map} +1 -1
  264. package/dist/dropdown-menu-CLs8Lihj.js +194 -0
  265. package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
  266. package/dist/features/activities.js +302 -253
  267. package/dist/features/activities.js.map +1 -1
  268. package/dist/features/ai-chat.js +15 -14
  269. package/dist/features/ai-chat.js.map +1 -1
  270. package/dist/features/appointment-calendar.js +222 -220
  271. package/dist/features/appointment-calendar.js.map +1 -1
  272. package/dist/features/async-preview.js +11 -10
  273. package/dist/features/async-preview.js.map +1 -1
  274. package/dist/features/combobox.js +1 -1
  275. package/dist/features/comments.js +1 -1
  276. package/dist/features/data-view.js +13 -13
  277. package/dist/features/data-view.js.map +1 -1
  278. package/dist/features/email-composer.js +249 -249
  279. package/dist/features/email-composer.js.map +1 -1
  280. package/dist/features/event-calendar.js +264 -269
  281. package/dist/features/event-calendar.js.map +1 -1
  282. package/dist/features/filters.js +1 -1
  283. package/dist/features/global-search.js +167 -138
  284. package/dist/features/global-search.js.map +1 -1
  285. package/dist/features/kanban.js +6 -7
  286. package/dist/features/kanban.js.map +1 -1
  287. package/dist/features/map.js +269 -260
  288. package/dist/features/map.js.map +1 -1
  289. package/dist/features/media-library.js +827 -777
  290. package/dist/features/media-library.js.map +1 -1
  291. package/dist/features/mentions.js +1 -1
  292. package/dist/features/overlays.js +1 -1
  293. package/dist/features/products.js +1246 -1169
  294. package/dist/features/products.js.map +1 -1
  295. package/dist/features/questionnaire.js +13 -13
  296. package/dist/features/questionnaire.js.map +1 -1
  297. package/dist/features/resource-assignment.js +8 -8
  298. package/dist/features/resource.js +127 -123
  299. package/dist/features/resource.js.map +1 -1
  300. package/dist/features/rich-text-editor.js +2 -2
  301. package/dist/features/schema-form.js +254 -253
  302. package/dist/features/schema-form.js.map +1 -1
  303. package/dist/features/suggestions.js +3 -3
  304. package/dist/features/sync.js +3 -3
  305. package/dist/features/table.js +1 -1
  306. package/dist/features/theme-tweaker.js +95 -96
  307. package/dist/features/theme-tweaker.js.map +1 -1
  308. package/dist/{feedback-BYIhtitP.js → feedback-Dm4izqFn.js} +81 -80
  309. package/dist/feedback-Dm4izqFn.js.map +1 -0
  310. package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
  311. package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
  312. package/dist/{filters-DJVAveHA.js → filters-DzgSJpMK.js} +693 -645
  313. package/dist/filters-DzgSJpMK.js.map +1 -0
  314. package/dist/{form-field-CwH9y77i.js → form-field-BriWAXyg.js} +14 -8
  315. package/dist/form-field-BriWAXyg.js.map +1 -0
  316. package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-Bs2qFUeE.js} +4 -4
  317. package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
  318. package/dist/forms-C0RGnJTe.js +216 -0
  319. package/dist/forms-C0RGnJTe.js.map +1 -0
  320. package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-DIhghX1Q.js} +295 -291
  321. package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
  322. package/dist/{header-BSfIEWbI.js → header-DMMxG__r.js} +67 -63
  323. package/dist/header-DMMxG__r.js.map +1 -0
  324. package/dist/header.recipes-BigdJjw1.js +6 -0
  325. package/dist/header.recipes-BigdJjw1.js.map +1 -0
  326. package/dist/hooks/useFormErrors.d.ts +1 -1
  327. package/dist/{hooks-ClH9thn4.js → hooks-DB6CJ4MR.js} +26 -14
  328. package/dist/hooks-DB6CJ4MR.js.map +1 -0
  329. package/dist/{icon-badge-DYKIwvOV.js → icon-badge-DZF-YjQp.js} +4 -4
  330. package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
  331. package/dist/index.js +4 -5
  332. package/dist/input-CvyDQlY7.js +289 -0
  333. package/dist/input-CvyDQlY7.js.map +1 -0
  334. package/dist/input-DMBwAZmr.js +21 -0
  335. package/dist/input-DMBwAZmr.js.map +1 -0
  336. package/dist/item-DjCcM18E.js +277 -0
  337. package/dist/item-DjCcM18E.js.map +1 -0
  338. package/dist/layout/app-shell.js +1 -1
  339. package/dist/layout/auth.js +1 -1
  340. package/dist/layout/containers.js +1 -1
  341. package/dist/layout/header.js +1 -1
  342. package/dist/layout/hooks.js +1 -1
  343. package/dist/layout/navigation.js +1 -1
  344. package/dist/layout/page.js +2 -2
  345. package/dist/layout/settings.js +1 -1
  346. package/dist/layout/sidebar.js +3 -3
  347. package/dist/layout/workspace.js +1 -1
  348. package/dist/layout.js +11 -11
  349. package/dist/lib/affordance-geometry.generated.d.ts +41 -35
  350. package/dist/lib/control-group-recipes.d.ts +5 -5
  351. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  352. package/dist/lib/motion-recipes.d.ts +3 -0
  353. package/dist/lib/navigation-row-recipes.d.ts +7 -7
  354. package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
  355. package/dist/lib/portal-recipes.d.ts +3 -0
  356. package/dist/lib/token-merge.generated.d.ts +13 -10
  357. package/dist/lib/ui-provider/types.d.ts +1 -1
  358. package/dist/lib/utils.js +1 -1
  359. package/dist/map-demo-tile.svg +1 -1
  360. package/dist/{media-gallery-3zIVLMWH.js → media-gallery-C-vChPmE.js} +6 -6
  361. package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-C-vChPmE.js.map} +1 -1
  362. package/dist/{mentions-CGlEJ15c.js → mentions-0_4nWuI-.js} +10 -10
  363. package/dist/{mentions-CGlEJ15c.js.map → mentions-0_4nWuI-.js.map} +1 -1
  364. package/dist/{message-DZ_ruyUV.js → message-g8p7eVtN.js} +7 -7
  365. package/dist/message-g8p7eVtN.js.map +1 -0
  366. package/dist/metadata-list-C3MkU-Om.js +443 -0
  367. package/dist/metadata-list-C3MkU-Om.js.map +1 -0
  368. package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
  369. package/dist/motion-recipes-DitYv6P2.js.map +1 -0
  370. package/dist/navigation-C90-oQFq.js +255 -0
  371. package/dist/navigation-C90-oQFq.js.map +1 -0
  372. package/dist/{navigation-BzhHI3lo.js → navigation-DaRjthVk.js} +101 -82
  373. package/dist/navigation-DaRjthVk.js.map +1 -0
  374. package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
  375. package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
  376. package/dist/{number-DbV1Dija.js → number-CRU3kGuk.js} +5 -5
  377. package/dist/{number-DbV1Dija.js.map → number-CRU3kGuk.js.map} +1 -1
  378. package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
  379. package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
  380. package/dist/overlays-BSgCtM2v.js +1013 -0
  381. package/dist/overlays-BSgCtM2v.js.map +1 -0
  382. package/dist/page-DUUKDAjo.js +331 -0
  383. package/dist/page-DUUKDAjo.js.map +1 -0
  384. package/dist/page-header-commands-7P3sfE9u.js +193 -0
  385. package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
  386. package/dist/{pagination-BL25hu2s.js → pagination-CgCjElfu.js} +7 -7
  387. package/dist/{pagination-BL25hu2s.js.map → pagination-CgCjElfu.js.map} +1 -1
  388. package/dist/popover-B85RenIl.js +201 -0
  389. package/dist/popover-B85RenIl.js.map +1 -0
  390. package/dist/{popover-menu-Cn9rUkdc.js → popover-menu-DlnQ2zlR.js} +7 -7
  391. package/dist/{popover-menu-Cn9rUkdc.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
  392. package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
  393. package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
  394. package/dist/portal-recipes-BpsV_iRw.js +9 -0
  395. package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
  396. package/dist/{primitives-BFK08r9M.js → primitives-ByWgGUgt.js} +6 -6
  397. package/dist/{primitives-BFK08r9M.js.map → primitives-ByWgGUgt.js.map} +1 -1
  398. package/dist/primitives.js +4 -4
  399. package/dist/{progress-B1VnCT0K.js → progress-BJhQP9WX.js} +9 -9
  400. package/dist/{progress-B1VnCT0K.js.map → progress-BJhQP9WX.js.map} +1 -1
  401. package/dist/{receipt-BVSOH3Xo.js → receipt-tOc7B3hw.js} +7 -7
  402. package/dist/receipt-tOc7B3hw.js.map +1 -0
  403. package/dist/{rich-text-GOUyKQ-s.js → rich-text-Dth5E882.js} +4 -4
  404. package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-Dth5E882.js.map} +1 -1
  405. package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-C1fOjBTd.js} +429 -430
  406. package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
  407. package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-laT3tpBT.js} +33 -29
  408. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
  409. package/dist/{scroll-area-DcI-M1UT.js → scroll-area-B0dB2cBi.js} +2 -2
  410. package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
  411. package/dist/{separator-Bom7NsGO.js → separator-Bb17I4pu.js} +2 -2
  412. package/dist/{separator-Bom7NsGO.js.map → separator-Bb17I4pu.js.map} +1 -1
  413. package/dist/{separator-BDV-Y648.js → separator-Ct_WSWTJ.js} +3 -3
  414. package/dist/{separator-BDV-Y648.js.map → separator-Ct_WSWTJ.js.map} +1 -1
  415. package/dist/services/actions.js +1 -1
  416. package/dist/settings-Bar5wiSo.js +167 -0
  417. package/dist/settings-Bar5wiSo.js.map +1 -0
  418. package/dist/sheet-BGPERY55.js +250 -0
  419. package/dist/sheet-BGPERY55.js.map +1 -0
  420. package/dist/sidebar-D-JYMMbY.js +686 -0
  421. package/dist/sidebar-D-JYMMbY.js.map +1 -0
  422. package/dist/sidebar-f9gRWXIR.js +1001 -0
  423. package/dist/sidebar-f9gRWXIR.js.map +1 -0
  424. package/dist/skeleton-BapcJd9C.js +265 -0
  425. package/dist/skeleton-BapcJd9C.js.map +1 -0
  426. package/dist/smart-card-CW0hjetE.js +617 -0
  427. package/dist/smart-card-CW0hjetE.js.map +1 -0
  428. package/dist/{structure-BmisBK-3.js → structure-DuxKl954.js} +3 -3
  429. package/dist/{structure-BmisBK-3.js.map → structure-DuxKl954.js.map} +1 -1
  430. package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
  431. package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
  432. package/dist/style.css +1 -1
  433. package/dist/{table-DsfzoUia.js → table-B4TE7iOV.js} +3 -3
  434. package/dist/{table-DsfzoUia.js.map → table-B4TE7iOV.js.map} +1 -1
  435. package/dist/{table-BweFy_P9.js → table-CFOWY9pQ.js} +394 -388
  436. package/dist/table-CFOWY9pQ.js.map +1 -0
  437. package/dist/{tabs-CDocW5D1.js → tabs-e7ko9S2o.js} +11 -11
  438. package/dist/tabs-e7ko9S2o.js.map +1 -0
  439. package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-B1culiSK.js} +107 -104
  440. package/dist/text-inputs-B1culiSK.js.map +1 -0
  441. package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
  442. package/dist/text.styles-B64My8RZ.js.map +1 -0
  443. package/dist/theme.css +192 -149
  444. package/dist/{timelines-CwM_9IhD.js → timelines-D3Sl9ueq.js} +13 -12
  445. package/dist/timelines-D3Sl9ueq.js.map +1 -0
  446. package/dist/tooltip-8wz5S_Zr.js +113 -0
  447. package/dist/tooltip-8wz5S_Zr.js.map +1 -0
  448. package/dist/{tree-WnKQzwbq.js → tree-CzUJHnFs.js} +9 -9
  449. package/dist/{tree-WnKQzwbq.js.map → tree-CzUJHnFs.js.map} +1 -1
  450. package/dist/typography/rich-text.js +1 -1
  451. package/dist/typography-BQnine1k.js +117 -0
  452. package/dist/typography-BQnine1k.js.map +1 -0
  453. package/dist/typography.js +1 -1
  454. package/dist/ui-provider-C-74NVLc.js +178 -0
  455. package/dist/ui-provider-C-74NVLc.js.map +1 -0
  456. package/dist/ui-provider.js +2 -3
  457. package/dist/{upload-CXyxmQBP.js → upload-BOW6U2tI.js} +25 -24
  458. package/dist/upload-BOW6U2tI.js.map +1 -0
  459. package/dist/{upload-queue-Boscubn9.js → upload-queue-qUXn1ykN.js} +16 -14
  460. package/dist/upload-queue-qUXn1ykN.js.map +1 -0
  461. package/dist/{usage-card-BhO5eqkX.js → usage-card-BeSLY0i0.js} +145 -137
  462. package/dist/usage-card-BeSLY0i0.js.map +1 -0
  463. package/dist/{utils-BRhFDwuU.js → utils-B6kKb8jB.js} +303 -144
  464. package/dist/utils-B6kKb8jB.js.map +1 -0
  465. package/dist/value-inputs-skdVB2zh.js +980 -0
  466. package/dist/value-inputs-skdVB2zh.js.map +1 -0
  467. package/dist/{value-typography-BP8OG6h5.js → value-typography-uAmWUAL1.js} +2 -2
  468. package/dist/{value-typography-BP8OG6h5.js.map → value-typography-uAmWUAL1.js.map} +1 -1
  469. package/dist/workspace-DHeHv0qw.js +411 -0
  470. package/dist/workspace-DHeHv0qw.js.map +1 -0
  471. package/docs/consumer-skill/SKILL.md +15 -129
  472. package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
  473. package/docs/consumer-skill/examples/app-layout.tsx +74 -13
  474. package/docs/consumer-skill/examples/authentication.tsx +77 -0
  475. package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
  476. package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
  477. package/docs/consumer-skill/examples/detail.tsx +5 -4
  478. package/docs/consumer-skill/examples/edit.tsx +30 -38
  479. package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
  480. package/docs/consumer-skill/examples/index-table.tsx +4 -4
  481. package/docs/consumer-skill/examples/manifest.json +88 -1
  482. package/docs/consumer-skill/examples/product-media.tsx +41 -0
  483. package/docs/consumer-skill/examples/product-parts.tsx +81 -0
  484. package/docs/consumer-skill/examples/rhf-bindings.tsx +86 -0
  485. package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
  486. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +105 -0
  487. package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
  488. package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
  489. package/docs/consumer-skill/references/agents-md.md +23 -11
  490. package/docs/consumer-skill/references/analytics.md +18 -1
  491. package/docs/consumer-skill/references/authentication.md +42 -0
  492. package/docs/consumer-skill/references/commerce-composition.md +97 -0
  493. package/docs/consumer-skill/references/component-contracts.json +325201 -0
  494. package/docs/consumer-skill/references/composition-mapping.md +106 -0
  495. package/docs/consumer-skill/references/composition.md +198 -46
  496. package/docs/consumer-skill/references/critique-rubric.md +98 -0
  497. package/docs/consumer-skill/references/custom-composition.md +261 -0
  498. package/docs/consumer-skill/references/data-reading.md +79 -0
  499. package/docs/consumer-skill/references/design-contract.md +43 -9
  500. package/docs/consumer-skill/references/discovery.md +109 -8
  501. package/docs/consumer-skill/references/domain-structures.md +124 -0
  502. package/docs/consumer-skill/references/installation.md +51 -36
  503. package/docs/consumer-skill/references/integration.md +41 -2
  504. package/docs/consumer-skill/references/product-composition.md +94 -0
  505. package/docs/consumer-skill/references/public-api.json +4390 -475
  506. package/docs/consumer-skill/references/review.md +47 -5
  507. package/docs/consumer-skill/references/rhf-workflows.md +93 -0
  508. package/docs/consumer-skill/references/screen-archetypes.md +34 -0
  509. package/docs/consumer-skill/references/screen-decisions.md +126 -0
  510. package/docs/consumer-skill/references/theming.md +25 -27
  511. package/docs/consumer-skill/references/tokens.json +20 -11
  512. package/docs/consumer-skill/references/view-craft.md +153 -0
  513. package/docs/consumer-skill/references/view-spec.md +73 -0
  514. package/docs/consumer-skill/references/workflows.md +9 -2
  515. package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
  516. package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
  517. package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
  518. package/docs/consumer-skill/scripts/composition.mjs +254 -0
  519. package/docs/consumer-skill/scripts/discovery.mjs +96 -10
  520. package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
  521. package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
  522. package/docs/consumer-skill/scripts/inspection.mjs +193 -0
  523. package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
  524. package/docs/consumer-skill/scripts/setup-skills.mjs +111 -0
  525. package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
  526. package/docs/consumer-skills/themelia-components/SKILL.md +31 -0
  527. package/docs/consumer-skills/themelia-composition/SKILL.md +34 -0
  528. package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
  529. package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
  530. package/docs/consumer-skills/themelia-foundation/SKILL.md +15 -0
  531. package/docs/consumer-skills/themelia-tokenization/SKILL.md +42 -0
  532. package/package.json +4 -2
  533. package/templates/README.md +39 -0
  534. package/templates/admin-shell-template.tsx +382 -0
  535. package/templates/analytics-operations-template.tsx +376 -0
  536. package/templates/customers-template.tsx +509 -0
  537. package/templates/index.ts +29 -0
  538. package/templates/orders-template.tsx +1102 -0
  539. package/templates/products-template.tsx +834 -0
  540. package/templates/user-permissions-template.tsx +450 -0
  541. package/dist/accordion-Cjb6sx0G.js.map +0 -1
  542. package/dist/action-menu-CllU52Mm.js +0 -280
  543. package/dist/action-menu-CllU52Mm.js.map +0 -1
  544. package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
  545. package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
  546. package/dist/app-shell-C4FhvCqF.js +0 -236
  547. package/dist/app-shell-C4FhvCqF.js.map +0 -1
  548. package/dist/auth-BGua8ouh.js.map +0 -1
  549. package/dist/avatar-DAPlDvhJ.js.map +0 -1
  550. package/dist/base/cascader.js.map +0 -1
  551. package/dist/batch-action-bar-DnUJ21NQ.js.map +0 -1
  552. package/dist/button-DVzspB_G.js.map +0 -1
  553. package/dist/buttons-DPZekJFu.js.map +0 -1
  554. package/dist/cards-BaBZR-AU.js +0 -68
  555. package/dist/cards-BaBZR-AU.js.map +0 -1
  556. package/dist/chart-ZOYyK2xG.js +0 -155
  557. package/dist/chart-ZOYyK2xG.js.map +0 -1
  558. package/dist/checkbox-AWIhNhmo.js.map +0 -1
  559. package/dist/choice-inputs-CNHvARCJ.js +0 -770
  560. package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
  561. package/dist/code-block-DeneBJR_.js.map +0 -1
  562. package/dist/combobox-DaHESuiL.js +0 -355
  563. package/dist/combobox-DaHESuiL.js.map +0 -1
  564. package/dist/combobox-Dxo2fAYQ.js.map +0 -1
  565. package/dist/command-C25VMRII.js.map +0 -1
  566. package/dist/comments-DD0DUPwJ.js.map +0 -1
  567. package/dist/containers-Mu1LMGV1.js +0 -103
  568. package/dist/containers-Mu1LMGV1.js.map +0 -1
  569. package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
  570. package/dist/data-display-DT_khPl_.js.map +0 -1
  571. package/dist/date-picker-B2K3ucWn.js.map +0 -1
  572. package/dist/date-pickers-Ds8gLaoP.js +0 -175
  573. package/dist/date-pickers-Ds8gLaoP.js.map +0 -1
  574. package/dist/dropdown-menu-Cl4X7L5S.js +0 -193
  575. package/dist/dropdown-menu-Cl4X7L5S.js.map +0 -1
  576. package/dist/feedback-BYIhtitP.js.map +0 -1
  577. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +0 -1
  578. package/dist/filters-DJVAveHA.js.map +0 -1
  579. package/dist/form-field-CwH9y77i.js.map +0 -1
  580. package/dist/form-sizing-BdP_Mf5p.js.map +0 -1
  581. package/dist/forms-B9G_xwzi.js +0 -194
  582. package/dist/forms-B9G_xwzi.js.map +0 -1
  583. package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
  584. package/dist/header-BSfIEWbI.js.map +0 -1
  585. package/dist/hooks-ClH9thn4.js.map +0 -1
  586. package/dist/input-CZw8iU99.js +0 -21
  587. package/dist/input-CZw8iU99.js.map +0 -1
  588. package/dist/input-DQdEd0YD.js +0 -263
  589. package/dist/input-DQdEd0YD.js.map +0 -1
  590. package/dist/item-K5_ghvze.js +0 -275
  591. package/dist/item-K5_ghvze.js.map +0 -1
  592. package/dist/message-DZ_ruyUV.js.map +0 -1
  593. package/dist/metadata-list-8N16ZMW_.js +0 -405
  594. package/dist/metadata-list-8N16ZMW_.js.map +0 -1
  595. package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
  596. package/dist/navigation-Bnotn4AQ.js +0 -145
  597. package/dist/navigation-Bnotn4AQ.js.map +0 -1
  598. package/dist/navigation-BzhHI3lo.js.map +0 -1
  599. package/dist/navigation-row-recipes-BFLCk_Aq.js.map +0 -1
  600. package/dist/overflow-tab-bar-CWY7Nogn.js +0 -282
  601. package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
  602. package/dist/overlays-tMkF-VAN.js +0 -1003
  603. package/dist/overlays-tMkF-VAN.js.map +0 -1
  604. package/dist/page-CL9YeH_V.js +0 -224
  605. package/dist/page-CL9YeH_V.js.map +0 -1
  606. package/dist/page-header-commands-DOb6WsfD.js +0 -126
  607. package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
  608. package/dist/popover-gnTOhbFM.js +0 -198
  609. package/dist/popover-gnTOhbFM.js.map +0 -1
  610. package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
  611. package/dist/receipt-BVSOH3Xo.js.map +0 -1
  612. package/dist/rich-text-editor-cRLC-eBK.js.map +0 -1
  613. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +0 -1
  614. package/dist/settings-ybnjVwbd.js +0 -171
  615. package/dist/settings-ybnjVwbd.js.map +0 -1
  616. package/dist/sheet-ijlsjq-n.js +0 -213
  617. package/dist/sheet-ijlsjq-n.js.map +0 -1
  618. package/dist/sidebar-Db6gkh3U.js +0 -619
  619. package/dist/sidebar-Db6gkh3U.js.map +0 -1
  620. package/dist/sidebar-DkTO4VTO.js +0 -512
  621. package/dist/sidebar-DkTO4VTO.js.map +0 -1
  622. package/dist/skeleton-Byjnt7qr.js +0 -264
  623. package/dist/skeleton-Byjnt7qr.js.map +0 -1
  624. package/dist/smart-card-DiC5aac3.js +0 -604
  625. package/dist/smart-card-DiC5aac3.js.map +0 -1
  626. package/dist/table-BweFy_P9.js.map +0 -1
  627. package/dist/tabs-CDocW5D1.js.map +0 -1
  628. package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
  629. package/dist/text.styles-g4He6UIW.js.map +0 -1
  630. package/dist/theme-scope-BJ6eE2xt.js +0 -50
  631. package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
  632. package/dist/timelines-CwM_9IhD.js.map +0 -1
  633. package/dist/tooltip-yiRJUFjp.js +0 -111
  634. package/dist/tooltip-yiRJUFjp.js.map +0 -1
  635. package/dist/typography-UTnveOEy.js +0 -117
  636. package/dist/typography-UTnveOEy.js.map +0 -1
  637. package/dist/ui-provider-C_U0Xma4.js +0 -136
  638. package/dist/ui-provider-C_U0Xma4.js.map +0 -1
  639. package/dist/upload-CXyxmQBP.js.map +0 -1
  640. package/dist/upload-queue-Boscubn9.js.map +0 -1
  641. package/dist/usage-card-BhO5eqkX.js.map +0 -1
  642. package/dist/use-mobile-vaLKwgyf.js +0 -15
  643. package/dist/use-mobile-vaLKwgyf.js.map +0 -1
  644. package/dist/utils-BRhFDwuU.js.map +0 -1
  645. package/dist/value-inputs-TaX4OjNk.js +0 -963
  646. package/dist/value-inputs-TaX4OjNk.js.map +0 -1
  647. package/dist/workspace-B-OEm3Kf.js +0 -408
  648. package/dist/workspace-B-OEm3Kf.js.map +0 -1
@@ -5,16 +5,38 @@ work. Read only the relevant workflow/declarations; this is not a new design sys
5
5
 
6
6
  ## Review the task and hierarchy
7
7
 
8
+ For a new or substantially repaired screen, review the
9
+ [screen decisions](screen-decisions.md) against the actual result. Identify the
10
+ user's decision, leading subject, visible versus overflow actions, navigation
11
+ reason and surface/inset owners. The answer should explain this screen, not
12
+ just name components or repeat an archetype.
13
+
8
14
  - Can the user identify the subject, scope and next action? A contextual fact
9
15
  may be repeated for a separate purpose, but should not compete with itself.
10
16
  - Do independent records, facts, metrics and editable fields use appropriate
11
17
  owners? Inspect an existing feature before reconstructing its lifecycle.
18
+ - Does the subject cover the entity parts relevant to the task, such as order
19
+ lines and selected variants, product options/variant combinations, or payment
20
+ allocations? State missing contracts and omitted scope. Neither a summary of
21
+ top-level fields nor a library feature's existence proves app coverage.
12
22
  - Do primary commands have explicit emphasis and page/collection/record scope?
13
23
  Keep bulk actions tied to selection. Secondary/destructive importance is semantic.
14
24
  - Do rows lead with identity and useful decision information? Preserve access
15
25
  to hidden facts without forcing every fact into a tall identity stack.
26
+ - Do comparisons, allocations, dependencies and exceptions stay close to the
27
+ facts and commands they affect? Could the user make the business decision
28
+ without reconstructing relationships across generic cards? An existing block
29
+ is a good fit when its meaning and arrangement fit; an app-owned subject may
30
+ combine public parts and JSX when the data needs a different structure.
16
31
  - Does each gutter, inset and sibling/copy gap have one owner? Review the whole
17
32
  parent/child chain. A token-backed utility on the wrong owner can still drift.
33
+ - Do flat and painted peer regions align at their intended content edges?
34
+ Transparency does not remove Card padding. Does mobile reading order lead
35
+ with the operational subject rather than burying it after long evidence?
36
+ - Do table headers, main values and supporting cell copy share an intentional
37
+ alignment? Inspect custom primitives inside cells; their own alignment and
38
+ inline/block defaults can override the cell. Using the right table owner
39
+ does not validate the caller's renderCell content.
18
40
  - Does the same composition remain readable with long copy, translations,
19
41
  empty/missing values and narrow parent width? Zero and unavailable differ.
20
42
 
@@ -24,21 +46,28 @@ one solid primary command per page or surface, so the next action stays obvious.
24
46
 
25
47
  ## Done means
26
48
 
27
- UI work is done when the source checker below reports no errors on the files you
28
- changed, and the app's typecheck, lint and tests then pass. Run the checker, fix
49
+ UI work is complete only with three separate proofs: source/API checks, inspected
50
+ rendered appearance and executed interactions. A correct but confusing hierarchy
51
+ or inappropriate action/surface choice is unfinished even when all checks pass.
52
+ Inspect one representative subject before replicating it across a screen. The source checker below must
53
+ report no errors on changed files, and the app's typecheck, lint and tests must
54
+ pass. Inspect the actual narrow/wide and light/dark states relevant to the change,
55
+ including opened surfaces; execute the affected callbacks, keyboard/focus and
56
+ error/retry paths. Record any missing proof as an unverified limit. Run the checker, fix
29
57
  the owner or prop each finding names, and run it again; after three rounds, stop
30
58
  and report what remains. Warnings are review findings: fix each one or keep it
31
59
  with a reason. This is the agent's completion condition, not the build's; app CI
32
60
  may stay non-blocking on warnings. The [project instructions
33
61
  block](agents-md.md) states the same condition in the app's `AGENTS.md`.
34
62
 
35
- Hand back five lines, so a skipped check is visible:
63
+ Hand back a short evidence record, so skipped checks and missing proof are visible:
36
64
 
37
65
  1. Owners used for the route, its commands and each data region.
38
66
  2. Checker: run or not run, with its error and warning counts.
39
67
  3. Typecheck, lint and tests: each run or not run, and why.
40
68
  4. Kept warnings, each with file:line and its reason.
41
- 5. States covered or missing: loading, empty, error, disabled and validation.
69
+ 5. Rendered: widths/themes/states measured and images actually inspected, with judgment.
70
+ 6. Interactions: actions and resulting states executed, including relevant focus, cancellation, loading, error/retry and validation; list missing coverage.
42
71
 
43
72
  ## Source checker
44
73
 
@@ -58,7 +87,7 @@ command to app CI if useful; repository lint is not automatically installed.
58
87
  Errors cover unknown package entrypoints/symbols and statically detected overrides
59
88
  of protected Card/popup insets, Card badges in headerAction/headerStart rather
60
89
  than titleSuffix, control geometry/typography, fixed DisplayLabel/Badge
61
- roles, cross-role shell/inner radius replacements, display-copy margins, or
90
+ roles, cross-role surface/default radius replacements, display-copy margins, or
62
91
  redrawn focus indicators (another ring width, offset or halo strength) on imported controls. Intentional nested bodies,
63
92
  circular owners and joined-edge corner resets retain their roles. Import ownership
64
93
  follows lexical bindings, preserving locally shadowed application components. Imports of
@@ -75,9 +104,22 @@ disabled 50% treatment remain valid; component disabled props keep that dimming
75
104
  with its owner.
76
105
 
77
106
  Standalone compact Cards and Page gutter removal also produce review warnings.
107
+ `uncontained-table-in-card` flags a table in a padded Card: place DataTable in
108
+ the layout, or deliberately use Card padding="none" and a flat table.
109
+ `detached-filter-layout` recommends DataTable topbarContent for a sibling filter
110
+ strip, or DataView for the complete workflow. `wide-single-column-form` suggests
111
+ Page narrow for a simple form lacking explicit width or aside. These contextual
112
+ warnings follow qualified import bindings; unrelated same-name components are
113
+ not evidence. Deprecated resource shells use the existing deprecated-owner
114
+ warning and direct new routes to Page.
78
115
  Buttons placed in a Page or PageHeader `actions` region warn as well: pass
79
116
  commands as `primaryAction` and ordered `secondaryActions` so the header owns
80
117
  their emphasis, size and overflow. Non-command controls stay valid there.
118
+ For PageHeader's `slots.actions`, wrapping or returning the callback's
119
+ `defaultContent` retains that command behavior; a full replacement owns its
120
+ keyboard, overflow and action semantics. Inspect the compact menu below 40rem of
121
+ header width, including in a narrow parent on desktop: every command, including
122
+ primary, belongs in one More actions menu.
81
123
  A Page with more than one solid primary command, counting `header.primaryAction`
82
124
  and every Button with `tone="primary"` and no other style, warns as well. Overlays own
83
125
  their own primary command and are not counted. Raw palette classes such as
@@ -0,0 +1,93 @@
1
+ # React Hook Form workflows
2
+
3
+ Use `react-hook-form` for form state in create/edit pages, settings and overlays. Import chrome from `themelia-react-ui/base/forms`, text controls from `base/text-inputs`, choices from `base/choice-inputs`, dates from `base/date-pickers` and structured values from `base/value-inputs`. RHF is optional at package level, but the whole `base/forms` family requires its peer, including presentation-only FormField imports. A schema resolver is an application choice, not another required library dependency.
4
+
5
+ ## Screen and state ownership
6
+
7
+ For expandable editing sections, inspect compound Accordion before rebuilding
8
+ Card + Collapsible. The [retained section recipe](../examples/editable-sections.tsx)
9
+ uses multiple expansion, validation badges and AccordionContent keepMounted.
10
+ Keep one stable app-owned form and open an invalid section before focusing its
11
+ field. Controlled form state retention and field DOM retention are separate
12
+ contracts; see [disclosure composition](custom-composition.md#disclosure-sections).
13
+
14
+ The complete [order edit page](../examples/rhf-edit-page.tsx) composes:
15
+
16
+ `Page render={<form ... />}` owns the native form, containing `DirtyStateBanner / ErrorSummary → TwoColumnLayout → FormSection → ControlledFormField → sticky FormActionsBar / SubmitStateButton`.
17
+
18
+ Page owns the route title/gutters and TwoColumnLayout owns peer rhythm. FormSection owns its surface and field gaps; do not wrap a framed FormSection in another Card. Inside an already padded boundary, use `surface="flat" padding="none"`. Inside an unpadded boundary, a flat FormSection keeps its ordinary inset; flat surface alone does not remove padding. `handleSubmit` validates and awaits persistence. `isSubmitting` drives the submit button and disabled fields; `isDirty` drives dirty feedback and pristine submit protection. An in-flight ref also blocks duplicate same-tick requests. Native form validation is disabled in these RHF examples so the schema/rules produce one consistent error source.
19
+
20
+ Page forwards `render` to its existing Container, so rendering it as the form preserves one width, gutter and query-boundary owner. Its body already spaces direct subjects; no extra Container or Stack is needed around the layout and action bar. `TwoColumnLayout adaptTo="container"` adapts to that Page width. A standalone form outside Page needs its own deliberate query boundary when it selects container adaptation.
21
+
22
+ Use `useFieldArray`'s stable `field.id` as the React key, preserve names such as `lines.${index}.quantity`, and set complete append defaults. Derive totals from `useWatch`; do not persist a second total that can drift. Collect nested client/server errors into ErrorSummary while keeping each field's local message. Use `setFocus` or summary links for focusable controls when the app's error-summary design requires it.
23
+
24
+ Mount an editor with `key={record.id}` when switching records. `defaultValues` establishes the saved baseline. On accepted success call `reset(authoritativeSavedValues)` to clear dirty state and keep server normalization. `reset()` discards to that baseline. Failed validation, transport failure or cancellation keeps the draft. Do not reset on every background cache refresh. If the product allows editing during a request, reconcile the accepted response with later edits explicitly; these recipes disable editing while saving.
25
+
26
+ ## Typed control bindings
27
+
28
+ [TypedControlBindings](../examples/rhf-bindings.tsx) typechecks every supported binding without `any`, control casts or a generic spread adapter. A public control's event contract is part of its API:
29
+
30
+ | Control | Controlled state | Change and RHF focus/touch binding |
31
+ | --- | --- | --- |
32
+ | Input / Textarea | `value: string` | `onValueChange(value)` → `field.onChange`; `ref`, `onBlur` |
33
+ | Select | `value: string` | `onValueChange(value)` → `field.onChange(value ?? '')`; trigger `ref`, `onBlur` |
34
+ | Switch / Checkbox | `checked: boolean` | `onValueChange(checked)` → `field.onChange`; `ref`, `onBlur` |
35
+ | ToggleField / SwitchCard | `value: boolean` | `onValueChange(checked)`; `controlRef`, `onBlur`; their own label owns the control name |
36
+ | DatePicker (single) | `value: Date \| undefined` | `onValueChange(output)` → `field.onChange(output.date ?? null)`; `triggerRef`, `onBlur` |
37
+ | DateTimeInput | ISO `value: string \| undefined` | `onValueChange(value)` → `field.onChange(value ?? '')`; `triggerRef`, `onBlur` |
38
+ | PhoneInput | `value: string` | native `onChange(event.target.value)`; input `ref`, `onBlur` |
39
+ | TagsInput | `value: string[]` (or typed objects) | `onValueChange(values)`; `inputRef`, `onBlur` |
40
+ | SliderField (public slider name) | scalar `value: number` | `onValueChange(value)`; `inputRef`, `onBlur` |
41
+ | ColorInput | `value: string` | `onValueChange(value)`; input `ref`, `onBlur` |
42
+
43
+ For numeric Input fields normalize `event.target.valueAsNumber` according to the schema (an empty field is NaN); keep numeric validation explicit. Date-only fields need an application serialization policy; do not turn a local calendar date into a UTC instant accidentally. DateTimeInput uses ISO instants. Use `modal={false}` on pickers inside modal forms to avoid competing focus traps.
44
+
45
+ ControlledFormField accepts a ReactNode error override or a name-based error getter, falling back to RHF validation. Its render callback's error argument remains string/undefined for compatibility. A direct supported control receives the generated label/control ID and supporting-text association automatically; omit routine `htmlFor`/`id` pairs. Each mount stays unique even when forms share field names. ToggleField and SwitchCard own their visible labels and forward the automatic supporting description to their editable control; omit an outer duplicate label.
46
+
47
+ Compound children own their nested association. SliderField's `id` and forwarded `ref` name its group, while `inputRef` names the native range. The binding recipe uses visible copy with an ID, `aria-labelledby` on SliderField and `supportingTextId`/`aria-describedby` for its hint or error. Keep explicit IDs per mount when a passive wrapper separates chrome from the editable control; do not point `htmlFor` at a group or infer one common ref target across control families.
48
+
49
+ ## Transport lifecycle
50
+
51
+ The app owns transport. RHF's submit callback must return a Promise spanning the complete request; otherwise `isSubmitting` drops early and repeated submissions become possible. The [callback bridge](../examples/rhf-transport.tsx) records success/errors/cancellation, then settles only from `onFinish`. It has no framework import or runtime dependency.
52
+
53
+ For Laravel/Inertia, adapt the application's typed router and page props at this seam:
54
+
55
+ ```tsx
56
+ const submit = form.handleSubmit(async values => {
57
+ const result = await awaitCallbackSave(values, (data, lifecycle) => {
58
+ router.put(`/orders/${order.id}`, data, {
59
+ preserveScroll: true,
60
+ onSuccess: page => lifecycle.onSuccess(readSavedOrder(page)),
61
+ onError: lifecycle.onError,
62
+ onCancel: lifecycle.onCancel,
63
+ onFinish: lifecycle.onFinish,
64
+ });
65
+ });
66
+ if (result.ok) form.reset(result.values);
67
+ else {
68
+ applyServerErrors(form.setError, result.errors, {
69
+ fields: ['reference', 'email', 'notes', 'priority', 'notify',
70
+ ...values.lines.flatMap((_, index) => [
71
+ `lines.${index}.product` as const,
72
+ `lines.${index}.quantity` as const,
73
+ `lines.${index}.priceMinor` as const,
74
+ ])],
75
+ });
76
+ if (result.message) form.setError('root.server', { message: result.message });
77
+ }
78
+ });
79
+ ```
80
+
81
+ `router`, `order` and `readSavedOrder(page)` belong to the app; readSavedOrder validates/reads its typed authoritative response. Import `applyServerErrors` from `themelia-react-ui/base/forms` and `awaitCallbackSave` from the copied bridge. The helper accepts unknown payloads, maps only string/string-array messages to an explicit typed FieldPath allowlist, and sends unknown keys to `root.server`. Include current array paths. Avoid casting arbitrary server keys to `keyof FormValues`; a server key may be unknown or a nested path. Client validation, Laravel errors and transport errors then render through one RHF error state. Handle rejection with try/catch as in the complete edit recipe; do not swallow errors or reset a failed draft.
82
+
83
+ For TanStack Start/Query, pass an app-owned async function: `onSave={async values => { const saved = await saveOrder(values); await invalidateOrders(); return { ok: true, values: saved }; }}`. If server validation returns a structured result, return `{ok:false, errors, message}` instead. Await the server function/mutateAsync Promise and any cache work required before the form becomes editable. Do not pass a fire-and-forget `mutate` callback. A router/framework adapter does not replace RHF's frontend state ownership.
84
+
85
+ ## Overlay create and edit
86
+
87
+ The complete [customer drawer](../examples/rhf-overlay-form.tsx) uses ActionDrawer and useOverlayVisibility from `features/overlays`. ActionDialog uses the same formId/loading contract for shorter forms. Opening explicitly calls `reset(recordSnapshot)` (or complete empty defaults); onSubmit owns validation and persistence. The overlay footer's `formId` calls requestSubmit on that actual form. Do not combine it with onConfirm/onAsyncConfirm, which would introduce a second submit path.
88
+
89
+ Pass `loading={isSubmitting}` so confirm/cancel/close/Escape/outside dismissal follow the pending lock. A failed request shows ErrorSummary and field errors while the drawer stays open with its values. Success resets to the returned record, publishes it through onSaved, and hides the controlled overlay. Cancelling without saving leaves the committed record unchanged; reopening begins a new snapshot. If a product requires drafts across dismissal, store drafts outside the overlay and make that policy explicit rather than resetting on open.
90
+
91
+ ## Verify the real workflow
92
+
93
+ Run the bundled composition checker and the app's type/lint/test scripts. Then execute required-field errors, field focus, typed edits, arrays/reorder/removal, computed totals, duplicate-submit protection, server errors, retry with retained draft, accepted reset and discard. Open the actual date/select/tag surfaces and drawer; check keyboard/dismissal/focus return and light/dark at narrow/wide widths. Static typechecks prove the bindings and exports, not an application's server behavior.
@@ -0,0 +1,34 @@
1
+ # Screen archetypes
2
+
3
+ Choose by the user's job, then inspect the exact declaration with the [finder](discovery.md).
4
+ The [complete shipped blueprint index](../../../templates/README.md) includes
5
+ the application shell and every domain example. These are source assets at the
6
+ installed package's `templates/`; complete skill copying places them under the
7
+ shared skill's `templates/` and rebases the links below.
8
+
9
+ Start with [screen decisions](screen-decisions.md). Archetypes establish route responsibilities and supported seams. Inspect the
10
+ actual records before choosing their content regions. A detail page can combine
11
+ existing blocks with app-owned domain components and semantic JSX; comparisons,
12
+ allocations, dependencies and exceptions may need their own information
13
+ structure. Use [data-led composition](custom-composition.md#shape-the-subject-from-the-data)
14
+ to choose that structure. A dashboard does not require a metric-card row, and
15
+ a simple facts subject does not require a custom component.
16
+
17
+ | Screen | Main owner and regions | Starting blueprint | Application-owned state |
18
+ | --- | --- | --- | --- |
19
+ | Index / directory | Page header/context → DataView, or FilterProvider → DataTable topbarContent={FilterLayout}; default lg, explicit xl/full for wide comparisons | [Scoped directory](../examples/scoped-directory.tsx), [index table](../examples/index-table.tsx) | URL/query, facets, paging, selection, bulk commands, loading/empty/error/retry |
20
+ | Detail workspace | Page narrow for simple detail; page identity and task subjects, optional aside for secondary context (xl); choose continuous/flat or framed subjects deliberately | [Orders](../../../templates/orders-template.tsx), [customers](../../../templates/customers-template.tsx), [record detail](../examples/detail.tsx) | Record snapshot, section/tab, permitted commands, overlay drafts, accepted server results |
21
+ | Settings / edit | `Page narrow render={<form ... />}` → FormSection → ControlledFormField → FormActionsBar; with support use Page aside or explicit maxWidth="xl" + TwoColumnLayout | [RHF edit page](../examples/rhf-edit-page.tsx), [RHF drawer](../examples/rhf-overlay-form.tsx) | RHF values, rules/schema, arrays, computed totals, transport/errors, saved baseline |
22
+ | Order / fulfillment detail | Page header owns order identity and commands; Alert for standing notices; FulfillmentGroup per status/location; ShipmentTracking; OrderCustomer, OrderSummary and OrderTransactions as aside cards | [Order and invoice map](commerce-composition.md), [order recipe](../examples/commerce-lines.tsx) | Order snapshot, fulfillment/refund commands, payment state, accepted results |
23
+ | Invoice / receivable detail | Page header with collection commands; one document Card → InvoiceHeader + InvoiceLineItems surface="flat"; settlement ledger, payment history and customer as separate subjects | [Order and invoice map](commerce-composition.md), [invoice recipe](../examples/commerce-lines.tsx) | Invoice values, tax policy, balance, payments and reminder/credit workflows |
24
+ | Product editor | Page → product identity/media/shared details → product option definitions → generated variant list/matrix and selected editing workflow; publishing context remains distinct | [Products](../../../templates/products-template.tsx) | Product snapshot, stable option/value IDs, combination identities, per-variant drafts, publishing validation and persistence |
25
+ | User access / permissions | Page → profile and role context → editable permission groups → save/discard feedback | [User permissions](../../../templates/user-permissions-template.tsx) | Role presets, permission draft, permitted commands, accepted-save/discard baseline and server enforcement |
26
+ | Analytics overview | Page period control → numeric MetricBar/MetricGrid → ChartCard with Recharts series and comparison Cards → operations/usage regions | [Operations analytics](../../../templates/analytics-operations-template.tsx), [analytics states](../examples/analytics.tsx) | Period/query, metric formatting, accepted series, independent loading/error/retry states |
27
+
28
+ Page uses explicit maxWidth first, then narrow md (48rem), aside xl (80rem), otherwise lg (64rem). Settings navigation uses Page → SettingsShell → FormSection. Page owns its h1, gutters and direct-child rhythm; TwoColumnLayout owns the column split and peer-region rhythm. Stack/Grid own nested sibling gaps. Card owns framing and aligned header/body/footer insets. Authentication uses [AuthShell](authentication.md), and content sites use [Container/Section](../examples/website.tsx).
29
+
30
+ Keep FilterLayout inside DataTable topbarContent with variant="compact" and showClearFilters, under FilterProvider; DataView is the complete alternative. Table owns its frame/topbar/header band and sits directly in the layout. A deliberate Card host uses padding="none" and a flat table. Fixed scope belongs in page context or tabs, independently of removable criteria.
31
+
32
+ Headers carry one primary command and ordered secondary commands; below 40rem of header width all commands share one More actions trigger. Page header slots beforeTitle/titleSuffix/afterDescription/actions accept content or callbacks with {renderLink, defaultContent}. Compose status and facts with Badge/MetadataList; wrap or return actions defaultContent to retain the command row. Compatible direct actions add non-command controls. Put destructive commands behind ConfirmDialog. Longer create/edit work belongs in ActionDrawer; a short focused form uses ActionDialog. Preserve a snapshot until save succeeds. Templates are copyable application sources, not package component entrypoints.
33
+
34
+ Read only the relevant detail: [composition ownership](composition.md), [workflow states](workflows.md), [RHF transport and bindings](rhf-workflows.md), or [analytics contracts](analytics.md). The [review checklist](review.md) separates static checks from opened-surface and interaction evidence.
@@ -0,0 +1,126 @@
1
+ # Decide the screen before selecting components
2
+
3
+ Use for a new business screen or a substantial composition repair. The public
4
+ API tells you what is supported; it does not decide what deserves prominence.
5
+ Settle the following in a few working notes before JSX. This is a design step,
6
+ not an approval gate or a required document for a small edit.
7
+
8
+ ## Task, subject and priority
9
+
10
+ Name the user's job and the object being managed. Inspect a representative
11
+ record and an exception. Distinguish the product's structure from one selected
12
+ instance, current operational state from historical evidence, and editable
13
+ configuration from read-only facts.
14
+
15
+ Discover the task-specific owners and their supported parts before drawing those
16
+ regions. Use the [capability comparison](custom-composition.md#compare-capabilities-before-constructing-the-subject),
17
+ then let app markup express the relationships those owners must cooperate in.
18
+ Token-backed custom structure complements existing behavior; it does not replace
19
+ the discovery of a professionally supported subject/workflow.
20
+
21
+ Put the information needed for the immediate decision first in reading and DOM
22
+ order. Then show the supporting detail, then less frequent history or technical
23
+ evidence. A desktop aside must not bury the current balance or blocking exception
24
+ below several screens of history on mobile. A record can contain all required
25
+ fields and still have the wrong hierarchy.
26
+
27
+ For a catalogue product, product identity/media and shared details establish the
28
+ subject. Product-level option groups and values explain the generated variant
29
+ combinations; the variant list/matrix compares SKU, price, availability and
30
+ state. Editing one variant is a subordinate selection/workflow. A large selected
31
+ variant summary before the product's option structure instead resembles a buyer
32
+ picker. A storefront picker, a catalogue editor and an inventory workspace have
33
+ different priorities even when they use the same data.
34
+
35
+ An admin product workspace commonly needs distinct details, media-management
36
+ and variant work areas. Do not put a gallery beside prose simply because both
37
+ are available, or reproduce a storefront hero inside an operational editor.
38
+ Choose each region's role and placement first; selecting a dedicated component
39
+ does not decide that structure for you.
40
+
41
+ For a sold order line, purchased identity, selected options/SKU, quantity and
42
+ accepted amounts form one subject. Put a shortage, reservation or return beside
43
+ the affected goods. Do not repeat every zero-valued lifecycle counter as a
44
+ separate labeled stack. For an invoice, distinguish its issued legal document
45
+ from today's settlement/collection task; both can be present without giving
46
+ every source record equal prominence. See [domain coverage](custom-composition.md).
47
+
48
+ ## Actions and navigation
49
+
50
+ Assign each command a scope (page, collection, selection, subject or row), then
51
+ consider frequency, importance, eligibility and consequence. Make the ordinary
52
+ next action easy to find. Less frequent alternatives belong in the same scope's
53
+ overflow menu when their visible buttons would compete with the subject. A
54
+ refund on an ordinary sold line is commonly a secondary contextual action; a
55
+ returns-processing workspace can legitimately make it primary. A single action
56
+ does not automatically need a menu, and several actions do not all need buttons.
57
+
58
+ Use Page's command API for page commands and its responsive overflow behavior.
59
+ Use the public Menu/rowActions owner for item commands; give an icon-only trigger
60
+ an accessible name that identifies the object. Confirmation belongs to the
61
+ consequential action, not to opening the menu. Never hide an essential action
62
+ solely behind pointer hover.
63
+
64
+ Optional navigation is a decision too. Do not add a back button just because
65
+ Page accepts backHref. Use it for an actual return journey with a known
66
+ destination and preserved list/draft context. A persistent navigation area or
67
+ breadcrumb may already supply orientation. Respect the requested navigation
68
+ pattern; do not combine several competing return mechanisms by default.
69
+
70
+ ## Grouping, surfaces and alignment
71
+
72
+ Group facts that users need to read together. Choose a Card when a region is an
73
+ independent subject, a distinct object or a useful bounded work area. Continuous
74
+ sections of one subject can remain flat inside a shared surface. Neither every
75
+ heading nor every object in JSON requires a Card. Existing table/workflow owners
76
+ can already own their boundary; inspect before adding another frame.
77
+
78
+ Decide the inset owner separately from the surface's paint. Card
79
+ surface="flat" removes chrome and inherits its host; it retains the same default
80
+ md insets. Changing paint alone must not move a peer's content edge. Use
81
+ padding="none" when an existing ancestor already owns that inset, or when a
82
+ deliberately flush region is required—not as a synonym for transparency.
83
+ Compare heading, body and action start edges across peer regions. An unpadded
84
+ main heading next to an inset card heading is not aligned merely because their
85
+ outer grid cells align. Document-like rows and financial totals can use different
86
+ roles, but their intended label/value axes should remain clear.
87
+
88
+ For continuous sections of one subject, one padded host with unpadded internal
89
+ sections usually supplies the right rhythm. Stacking several padded flat Cards
90
+ adds both their block insets to the peer gap even though no painted boundary
91
+ explains that extra room. Keep shared inline alignment without accumulating
92
+ three inset owners along the vertical axis.
93
+
94
+ Assign page gutters to Page, surface insets to Card, peer gaps to Stack/Grid,
95
+ and specialized tracks to app-owned markup. Keep title/description copy close;
96
+ separate subjects with a larger gap. Fix the wrong owner before changing global
97
+ spacing or density. Use [token-backed domain structures](domain-structures.md)
98
+ when the standard layouts cannot express the data relationship directly.
99
+
100
+ ## Prove the decision with the result
101
+
102
+ Build one representative subject before repeating it throughout the screen.
103
+ Inspect it at the actual narrow and wide parent widths: can the user identify
104
+ the object, understand its current state and find the next appropriate action?
105
+ Check the opened menu/editor and accepted/error state. Remove duplication and
106
+ low-value explanation rather than shrinking every text role to fit more data.
107
+ Test a second record whose structure or eligibility differs.
108
+
109
+ Type checks establish API compatibility. Source checkers establish their named
110
+ rules. Neither establishes a purposeful hierarchy, appropriate commands or a
111
+ professional surface composition. Treat a correct but confusing result as
112
+ unfinished; revise the composition, then record appearance and interaction proof
113
+ separately in [review](review.md).
114
+
115
+ ## External context
116
+
117
+ These references explain useful distinctions; Themelia's APIs/tokens and the
118
+ actual product requirements remain authoritative:
119
+
120
+ - [Shopify's product model](https://shopify.dev/docs/apps/build/product-merchandising/products-and-collections)
121
+ separates product, options and purchasable variant combinations.
122
+ - [Carbon disclosures](https://www.carbondesignsystem.com/building-blocks/core/patterns/disclosures)
123
+ distinguishes a visible primary action from related disclosed alternatives.
124
+ - [GOV.UK back links](https://design-system.service.gov.uk/components/back-link/)
125
+ grounds return navigation in an actual multi-page journey. Its transaction
126
+ conventions are not a universal admin-shell prescription.
@@ -4,7 +4,7 @@ The [design contract](design-contract.md) records which geometry changes togethe
4
4
  and which variant choices remain independent. Retheme shared responsibilities;
5
5
  avoid overriding individual components to imitate another density or inset.
6
6
 
7
- Use shadcn semantic surfaces/foregrounds: background, card, popover, primary, secondary, muted, accent, destructive, border, input, ring, charts and sidebar. Central success/info/warning foreground pairs express states; never overload primary or statuses as decoration. `--input` is the one resting control boundary: fields, select and date triggers, checkboxes, radios, switch tracks and outline buttons all draw it, so adjoining controls read as one family. It provides at least 3:1 contrast on the declared background, card, popover, muted, accent and secondary surfaces in both modes. Focus and invalid edges retain their separate 3:1 contract. `--border` is for quieter dividers and surface edges. When rebranding, check resting controls as well as focused controls, including the outside edge of fields with their own fill.
7
+ Use shadcn semantic surfaces/foregrounds: background, card, popover, primary, secondary, muted, accent, destructive, border, input, ring, charts and sidebar. Central success/info/warning foreground pairs express states; never overload primary or statuses as decoration. `--input` is the shared resting control boundary: fields, select and date triggers, checkboxes, radios, switch tracks and outline buttons draw it. Its defaults follow shadcn neutral: `oklch(0.922 0 0)` in light mode and `oklch(1 0 0 / 15%)` in dark mode. `--border` remains the surface/divider role, and `--ring` owns the stronger focus indicator. No extra border variable or component opacity is needed. Resting borders have no blanket 3:1 requirement in this palette; focus retains its separate tested 3:1 contract. When rebranding, review resting, focused and invalid states on the actual surfaces; an application requiring stronger boundaries can override the existing `--input` role.
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
 
@@ -15,29 +15,21 @@ surface, use Text/Value `type="inherit"` and Label `className="text-inherit"`;
15
15
  standalone typography keeps its documented defaults. Keep secondary, link, status
16
16
  and inverse roles explicit, and use a secondary text role instead of fading text
17
17
  with opacity. Component disabled props own dimming; an extra faded wrapper can
18
- multiply it. Brand colors alone do not guarantee input/focus contrast: retain the
19
- central `--input`/`--ring` roles or verify their replacements on every host surface.
18
+ multiply it. Brand colors should preserve the shared resting `--input` palette
19
+ and `--ring` focus role; review deliberate replacements on every host surface.
20
20
 
21
- The default `--radius` is 0.75rem (12px). One public root drives two shared
22
- roles; component owners choose the role, so ordinary callers add no radius class.
21
+ The default `--radius` is 0.75rem (12px). One public root drives two corners;
22
+ component owners apply them, so ordinary callers add no radius class.
23
23
 
24
24
  | Role | Owners | Default |
25
25
  | --- | --- | --- |
26
- | `rounded-radius` | Cards, popup/command shells and other outer surfaces | 12px |
27
- | `rounded-inner` | Inputs, buttons, select/facet triggers, collection/navigation rows and intentional nested bodies | 9px |
28
-
29
- Standalone controls retain the inner role; a complete nested Card retains its
30
- outer-shell role. Physical nesting does not select a different recipe.
31
-
32
- The inner role is `min(radius × 0.75, min(height-action, height-control) ×
33
- density-scale ÷ 4)`. The height bound keeps short controls restrained when an app
34
- increases the global radius; a 0.75 multiplier alone would still produce capsules.
35
- The smaller base height preserves a common inner radius when action and field
36
- heights differ. Density scales that bound once: the default roots at density
37
- 0.875 yield 7.875px inner corners. Control size variants share the role; spacing
38
- scale and surface padding do not change it. Do not override the derived alias as
39
- another theme setting. Circular avatars/dots and joined-edge resets retain their
40
- explicit shape mechanics; Badge retains its own root-based recipe.
26
+ | `rounded-radius` | The default: inputs, buttons, select/facet triggers, badges, collection/navigation rows and nested bodies | 12px (`--radius`) |
27
+ | `rounded-surface` | Cards, popup/command shells, dialogs and other outer surfaces | 16px (4/3 × `--radius`) |
28
+ | `rounded-radius-xs` / `-sm` / `-md` | Small mechanics only: checkboxes, kbd, tooltips, inline marks, skeleton bars | 0.4× / 0.6× / 0.8× |
29
+
30
+ Changing `--radius` changes every corner together. Density, spacing scale and
31
+ surface padding do not change it. Circular avatars/dots and joined-edge resets
32
+ retain their explicit shape mechanics.
41
33
 
42
34
  CSS fits overlapping curves to the actual box, so computed values alone do not
43
35
  prove the visible shape. Inspect settled corners, borders, clipping and focus
@@ -50,8 +42,8 @@ replacing individual components' owned corners.
50
42
  --radius: 0.75rem;
51
43
  --height-action: 2.5rem;
52
44
  --height-control: 2.5rem;
53
- --surface-x: 1.25rem;
54
- --surface-y: 1.25rem;
45
+ --surface-x: 1.5rem;
46
+ --surface-y: 1.5rem;
55
47
  }
56
48
  ```
57
49
 
@@ -60,14 +52,13 @@ Action and editable-control heights are separate roles; keep roots equal for adj
60
52
  Control heights are nominal floors when custom typography needs more room.
61
53
  Native fields, Select and InputGroup frames fit their editable line plus the
62
54
  border, and cap vertical padding to the space remaining in the nominal height.
63
- The default 32/36/40px sizes and radius roles stay unchanged. Text actions grow
55
+ The default 28/32/36px sizes (2rem roots, steps in eighths) and radius roles stay unchanged. Text actions grow
64
56
  under their intentionally tighter leading, so independently enlarged type can
65
57
  produce different fitted heights even with equal action/control roots. Check
66
58
  type size, leading and height roots together when exact custom pairing matters.
67
59
 
68
- Both surface roots default to 1.25rem. At a 16px root font and space-scale 1,
69
- ordinary surface insets are 20px, compact insets are 10px and large insets are
70
- 36px. Page's default large gutters inherit that same recipe. Row insets,
60
+ Both surface roots default to 1.5rem. At a 16px root font and space-scale 1,
61
+ the xs/sm/md/lg surface tiers are 12/16/24/32px. Page's default large gutters inherit that same recipe. Row insets,
71
62
  control heights and copy gaps keep their independent roots.
72
63
 
73
64
  | Shared geometry | Root / derivation |
@@ -76,9 +67,11 @@ control heights and copy gaps keep their independent roots.
76
67
  | Native field text inset | `--control-x` times space-scale; icons/add-ons use shared derived clearance |
77
68
  | Collection inline inset | `--row-x` times space-scale |
78
69
  | Collection block inset | `--row-y` times density-scale; compact/comfortable use 0.75/1.25 multipliers |
79
- | Default / compact surfaces | `--surface-x` / `--surface-y`, times space-scale; compact uses half |
70
+ | Surface tiers | `--surface-x` / `--surface-y`, times space-scale; xs/sm/md/lg use 1/2, 2/3, 1 and 4/3 |
80
71
  | Menu header/footer inline inset | Half surface-x plus row-x, then space-scale; no additional public token |
81
72
 
73
+ Rich display popovers use the surface roots (24px by default); compact menu/list shells use the md spacing role (8px), scaled once by --space-scale. Row inline padding and density stay independent.
74
+
82
75
  Use discrete inset, density and size props for the component responsibility described in [composition](composition.md). CSS scales are independent continuous theme settings. Primary row text does not shrink to xs merely because a density is compact. Public Input and Command search retain normal desktop editable text; coarse-pointer devices use text-base at mobile and tablet widths. Typography components remain margin-free.
83
76
 
84
77
  The default primary is near-black so success and other status colors never compete
@@ -152,6 +145,11 @@ heavier border.
152
145
 
153
146
  ## Extend without drift
154
147
 
148
+ For Tailwind placement and drawing in app-owned composites, read
149
+ [app-owned composites](custom-composition.md#token-backed-placement-and-drawing).
150
+ That guide separates new content geometry from the public component anatomy
151
+ that still owns its surface, interaction and typography.
152
+
155
153
  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.
156
154
 
157
155
  Use public structures/utilities for custom composition. Missing API seams should be additive props/slots rather than copies of private code. Review light/dark foregrounds and opened portals. CSS owns theming, UIProvider stable display defaults, callbacks app state.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "themelia-react-ui",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "structural": [
5
5
  {
6
6
  "name": "--space-scale",
@@ -24,12 +24,12 @@
24
24
  },
25
25
  {
26
26
  "name": "--height-action",
27
- "default": "2.25rem",
27
+ "default": "2rem",
28
28
  "purpose": "Default button and action-trigger height."
29
29
  },
30
30
  {
31
31
  "name": "--height-control",
32
- "default": "2.25rem",
32
+ "default": "2rem",
33
33
  "purpose": "Default input, select, and field-control height."
34
34
  },
35
35
  {
@@ -49,12 +49,12 @@
49
49
  },
50
50
  {
51
51
  "name": "--surface-x",
52
- "default": "1.25rem",
52
+ "default": "1.5rem",
53
53
  "purpose": "Default inline inset for cards and multi-content surfaces."
54
54
  },
55
55
  {
56
56
  "name": "--surface-y",
57
- "default": "1.25rem",
57
+ "default": "1.5rem",
58
58
  "purpose": "Default block inset for cards and multi-content surfaces."
59
59
  },
60
60
  {
@@ -69,7 +69,7 @@
69
69
  },
70
70
  {
71
71
  "name": "--shell-header-height",
72
- "default": "4.5rem",
72
+ "default": "4rem",
73
73
  "purpose": "Minimum height of the application header shell."
74
74
  },
75
75
  {
@@ -121,10 +121,10 @@
121
121
  "radius": {
122
122
  "name": "--radius",
123
123
  "default": "0.75rem",
124
- "purpose": "Shared 12px outer corners; inner control/row corners derive from this root and stay rectangular.",
124
+ "purpose": "Default 12px corner for controls, badges and rows; outer shells use 4/3 of it.",
125
125
  "defaultUtility": "rounded-radius",
126
- "innerUtility": "rounded-inner",
127
- "innerFormula": "min(calc(var(--radius) * 0.75), calc(min(var(--height-action), var(--height-control)) * var(--density-scale) / 4))"
126
+ "surfaceUtility": "rounded-surface",
127
+ "surfaceFormula": "calc(var(--radius) * 4 / 3)"
128
128
  },
129
129
  "advanced": [
130
130
  "--font-heading",
@@ -465,7 +465,7 @@
465
465
  "rounded-radius-xs",
466
466
  "rounded-radius-sm",
467
467
  "rounded-radius-md",
468
- "rounded-radius",
468
+ "rounded-surface",
469
469
  "rounded-radius-lg",
470
470
  "rounded-radius-xl",
471
471
  "h-action-xs",
@@ -532,7 +532,7 @@
532
532
  "size-upload-avatar-small",
533
533
  "size-upload-avatar",
534
534
  "size-upload-avatar-large",
535
- "rounded-inner"
535
+ "rounded-radius"
536
536
  ],
537
537
  "layout": [
538
538
  "h-shell-header",
@@ -561,30 +561,39 @@
561
561
  "py-row-y",
562
562
  "py-row-y-lg",
563
563
  "p-surface-xs",
564
+ "p-surface-sm",
564
565
  "p-surface",
565
566
  "p-surface-lg",
566
567
  "px-surface-xs",
568
+ "px-surface-sm",
567
569
  "px-surface",
568
570
  "px-surface-lg",
569
571
  "py-surface-xs",
572
+ "py-surface-sm",
570
573
  "py-surface",
571
574
  "py-surface-lg",
572
575
  "pt-surface-xs",
576
+ "pt-surface-sm",
573
577
  "pt-surface",
574
578
  "pt-surface-lg",
575
579
  "pb-surface-xs",
580
+ "pb-surface-sm",
576
581
  "pb-surface",
577
582
  "pb-surface-lg",
578
583
  "ps-surface-xs",
584
+ "ps-surface-sm",
579
585
  "ps-surface",
580
586
  "ps-surface-lg",
581
587
  "pe-surface-xs",
588
+ "pe-surface-sm",
582
589
  "pe-surface",
583
590
  "pe-surface-lg",
584
591
  "pl-surface-xs",
592
+ "pl-surface-sm",
585
593
  "pl-surface",
586
594
  "pl-surface-lg",
587
595
  "pr-surface-xs",
596
+ "pr-surface-sm",
588
597
  "pr-surface",
589
598
  "pr-surface-lg"
590
599
  ]