themelia-react-ui 2.0.4 → 2.0.6

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 (715) hide show
  1. package/CHANGELOG.md +211 -0
  2. package/MIGRATION.md +119 -0
  3. package/README.md +122 -20
  4. package/dist/{accordion-96o0pN62.js → accordion-0tQUZ20r.js} +13 -13
  5. package/dist/accordion-0tQUZ20r.js.map +1 -0
  6. package/dist/{action-menu-CHgs8vmj.js → action-menu-C0gjzLyE.js} +48 -45
  7. package/dist/action-menu-C0gjzLyE.js.map +1 -0
  8. package/dist/{affordance-geometry.generated-B8yGOr8-.js → affordance-geometry.generated-P-aVJisu.js} +36 -36
  9. package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
  10. package/dist/{ai-artifact-BZUGwBq6.js → ai-artifact-CGGpQryR.js} +281 -230
  11. package/dist/ai-artifact-CGGpQryR.js.map +1 -0
  12. package/dist/app-shell-EHuuRDGy.js +321 -0
  13. package/dist/app-shell-EHuuRDGy.js.map +1 -0
  14. package/dist/{attachment-DkoqHPPl.js → attachment-BCpA4e7i.js} +10 -10
  15. package/dist/{attachment-DkoqHPPl.js.map → attachment-BCpA4e7i.js.map} +1 -1
  16. package/dist/{auth-D2FVZ1MH.js → auth-B0girIk_.js} +49 -52
  17. package/dist/auth-B0girIk_.js.map +1 -0
  18. package/dist/{avatar-DWO_HHhB.js → avatar-B9Jnp-T-.js} +8 -8
  19. package/dist/avatar-B9Jnp-T-.js.map +1 -0
  20. package/dist/{badge-DErMA7ul.js → badge-wWauMgAt.js} +5 -5
  21. package/dist/{badge-DErMA7ul.js.map → badge-wWauMgAt.js.map} +1 -1
  22. package/dist/base/accordion.js +1 -1
  23. package/dist/base/action-menu.js +1 -1
  24. package/dist/base/attachment.js +1 -1
  25. package/dist/base/avatar.js +1 -1
  26. package/dist/base/badge.js +1 -1
  27. package/dist/base/batch-action-bar.js +1 -1
  28. package/dist/base/buttons.js +1 -1
  29. package/dist/base/cards.js +2 -2
  30. package/dist/base/carousel.js +3 -3
  31. package/dist/base/cascader.js +2 -372
  32. package/dist/base/chart.js +1 -1
  33. package/dist/base/choice-inputs.js +2 -2
  34. package/dist/base/code-block.js +1 -1
  35. package/dist/base/combobox.js +2 -2
  36. package/dist/base/command.js +1 -1
  37. package/dist/base/copyable.js +1 -1
  38. package/dist/base/date-pickers.js +2 -2
  39. package/dist/base/display.js +6 -6
  40. package/dist/base/feedback.js +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 +10 -10
  44. package/dist/base/item.js +1 -1
  45. package/dist/base/media-gallery.js +1 -1
  46. package/dist/base/metadata-list.js +1 -1
  47. package/dist/base/navigation.js +7 -7
  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 +200 -193
  52. package/dist/base/repeaters.js.map +1 -1
  53. package/dist/base/sheet.js +1 -1
  54. package/dist/base/sidebar.js +2 -2
  55. package/dist/base/signature-pad.js +8 -8
  56. package/dist/base/signature-pad.js.map +1 -1
  57. package/dist/base/skeleton.js +1 -1
  58. package/dist/base/spinner.js +6 -6
  59. package/dist/base/spinner.js.map +1 -1
  60. package/dist/base/structure.js +1 -1
  61. package/dist/base/table.js +1 -1
  62. package/dist/base/text-inputs.js +2 -2
  63. package/dist/base/toaster.js +36 -36
  64. package/dist/base/toaster.js.map +1 -1
  65. package/dist/base/tree.js +1 -1
  66. package/dist/base/upload-queue.js +1 -1
  67. package/dist/base/upload.js +3 -3
  68. package/dist/base/value-inputs.js +1 -1
  69. package/dist/{batch-action-bar-CdfIkCsV.js → batch-action-bar-BoqWIIpV.js} +7 -7
  70. package/dist/batch-action-bar-BoqWIIpV.js.map +1 -0
  71. package/dist/blocks/admin.js +21 -21
  72. package/dist/blocks/admin.js.map +1 -1
  73. package/dist/blocks/ai.js +267 -247
  74. package/dist/blocks/ai.js.map +1 -1
  75. package/dist/blocks/analytics/usage-card.js +1 -1
  76. package/dist/blocks/analytics.js +537 -543
  77. package/dist/blocks/analytics.js.map +1 -1
  78. package/dist/blocks/collaboration.js +1 -1
  79. package/dist/blocks/commerce/receipt.js +1 -1
  80. package/dist/blocks/commerce.js +1330 -1250
  81. package/dist/blocks/commerce.js.map +1 -1
  82. package/dist/blocks/data-display.js +2 -2
  83. package/dist/blocks/onboarding.js +6 -6
  84. package/dist/blocks/onboarding.js.map +1 -1
  85. package/dist/blocks/planning.js +11 -11
  86. package/dist/blocks/timelines.js +1 -1
  87. package/dist/{breadcrumbs-B-WFKecD.js → breadcrumbs-Bp9Ke7kd.js} +7 -7
  88. package/dist/breadcrumbs-Bp9Ke7kd.js.map +1 -0
  89. package/dist/{button-DkmK-z8E.js → button-ChBovTx0.js} +3 -3
  90. package/dist/button-ChBovTx0.js.map +1 -0
  91. package/dist/{buttons-BbfzgczK.js → buttons-DeW0bQeK.js} +16 -16
  92. package/dist/buttons-DeW0bQeK.js.map +1 -0
  93. package/dist/cards-CNXnmvV5.js +69 -0
  94. package/dist/cards-CNXnmvV5.js.map +1 -0
  95. package/dist/cascader-CrAl9zD5.js +439 -0
  96. package/dist/cascader-CrAl9zD5.js.map +1 -0
  97. package/dist/chart-I7ROnsl8.js +162 -0
  98. package/dist/chart-I7ROnsl8.js.map +1 -0
  99. package/dist/{checkbox-CzYUTPeJ.js → checkbox-MoyHIAPs.js} +3 -3
  100. package/dist/{checkbox-CzYUTPeJ.js.map → checkbox-MoyHIAPs.js.map} +1 -1
  101. package/dist/choice-inputs-DHGtx0QV.js +789 -0
  102. package/dist/choice-inputs-DHGtx0QV.js.map +1 -0
  103. package/dist/{code-block-CGNaUtAE.js → code-block-BSJyq9e-.js} +9 -9
  104. package/dist/code-block-BSJyq9e-.js.map +1 -0
  105. package/dist/{collapsible-Do4G0zcC.js → collapsible-BzJ91LUG.js} +5 -5
  106. package/dist/{collapsible-Do4G0zcC.js.map → collapsible-BzJ91LUG.js.map} +1 -1
  107. package/dist/{collection-content-C0e8SsTm.js → collection-content-CSnwtOTH.js} +3 -3
  108. package/dist/{collection-content-C0e8SsTm.js.map → collection-content-CSnwtOTH.js.map} +1 -1
  109. package/dist/combobox-Bcvu5J8O.js +363 -0
  110. package/dist/combobox-Bcvu5J8O.js.map +1 -0
  111. package/dist/combobox-C2JiSQPc.js +915 -0
  112. package/dist/combobox-C2JiSQPc.js.map +1 -0
  113. package/dist/{command-D8NrBj-b.js → command-9e52NPgK.js} +11 -11
  114. package/dist/command-9e52NPgK.js.map +1 -0
  115. package/dist/{comments-Di4w0H_S.js → comments-BsgErEqd.js} +44 -39
  116. package/dist/comments-BsgErEqd.js.map +1 -0
  117. package/dist/components/base/action-menu/action-menu.d.ts +7 -1
  118. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  119. package/dist/components/base/cards/card.recipes.d.ts +6 -4
  120. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
  121. package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
  122. package/dist/components/base/cards/smart-card.types.d.ts +3 -4
  123. package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
  124. package/dist/components/base/chart/chart.d.ts +6 -1
  125. package/dist/components/base/choice-inputs/choice-types.d.ts +5 -1
  126. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
  127. package/dist/components/base/combobox/combobox-field.d.ts +2 -2
  128. package/dist/components/base/combobox/index.d.ts +4 -2
  129. package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
  130. package/dist/components/base/date-pickers/datepicker.types.d.ts +10 -4
  131. package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
  132. package/dist/components/base/feedback/alert.d.ts +1 -1
  133. package/dist/components/base/feedback/state-display.d.ts +5 -1
  134. package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
  135. package/dist/components/base/forms/form-field.d.ts +7 -2
  136. package/dist/components/base/forms/form-sizing.d.ts +7 -7
  137. package/dist/components/base/forms/workflow.d.ts +7 -1
  138. package/dist/components/base/forms-numeric/coordinates-input.d.ts +8 -1
  139. package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
  140. package/dist/components/base/forms-numeric/dimensions-input.d.ts +4 -1
  141. package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
  142. package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
  143. package/dist/components/base/metadata-list/metadata-list.d.ts +1 -1
  144. package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
  145. package/dist/components/base/navigation/language-switcher.d.ts +12 -4
  146. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
  147. package/dist/components/base/navigation/page-header/page-header.d.ts +10 -3
  148. package/dist/components/base/popover/popover.d.ts +3 -3
  149. package/dist/components/base/popover/popover.recipes.d.ts +10 -6
  150. package/dist/components/base/repeaters/key-value-editor.d.ts +2 -1
  151. package/dist/components/base/sheet/sheet.d.ts +2 -0
  152. package/dist/components/base/sidebar/index.d.ts +1 -1
  153. package/dist/components/base/sidebar/sidebar.d.ts +29 -5
  154. package/dist/components/base/toaster/index.d.ts +1 -0
  155. package/dist/components/base/upload/avatar-upload.d.ts +2 -1
  156. package/dist/components/base/upload/image-upload.d.ts +2 -1
  157. package/dist/components/blocks/ai/ai-citation/types.d.ts +2 -0
  158. package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
  159. package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
  160. package/dist/components/blocks/ai/ai-sources/types.d.ts +2 -0
  161. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +5 -1
  162. package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
  163. package/dist/components/blocks/analytics/metric/metric.d.ts +4 -0
  164. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +4 -0
  165. package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
  166. package/dist/components/blocks/analytics/types.d.ts +2 -2
  167. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
  168. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
  169. package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
  170. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
  171. package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
  172. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
  173. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
  174. package/dist/components/blocks/commerce/index.d.ts +7 -6
  175. package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
  176. package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
  177. package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
  178. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  179. package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
  180. package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
  181. package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
  182. package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
  183. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
  184. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
  185. package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
  186. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  187. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
  188. package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
  189. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  190. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
  191. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  192. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
  193. package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +4 -3
  194. package/dist/components/features/activities/activities.types.d.ts +26 -13
  195. package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
  196. package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
  197. package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
  198. package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
  199. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
  200. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +4 -2
  201. package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
  202. package/dist/components/features/combobox/combobox.d.ts +2 -2
  203. package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -1
  204. package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
  205. package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
  206. package/dist/components/features/combobox/types.d.ts +37 -8
  207. package/dist/components/features/email-composer/types.d.ts +3 -1
  208. package/dist/components/features/event-calendar/colors.d.ts +2 -2
  209. package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
  210. package/dist/components/features/filters/facets/date-facet.d.ts +4 -2
  211. package/dist/components/features/filters/facets/range-facet.d.ts +12 -0
  212. package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
  213. package/dist/components/features/filters/filters.strings.d.ts +4 -0
  214. package/dist/components/features/filters/filters.types.d.ts +6 -3
  215. package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
  216. package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
  217. package/dist/components/features/filters/partials/filter-popover-content.d.ts +5 -3
  218. package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
  219. package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
  220. package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
  221. package/dist/components/features/filters/utils/filter-utils.d.ts +25 -3
  222. package/dist/components/features/global-search/global-search.types.d.ts +2 -0
  223. package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
  224. package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
  225. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  226. package/dist/components/features/media-library/media-library.d.ts +1 -1
  227. package/dist/components/features/media-library/media-library.strings.d.ts +8 -0
  228. package/dist/components/features/media-library/media-library.types.d.ts +50 -12
  229. package/dist/components/features/media-library/partials/media-library-partials.d.ts +4 -4
  230. package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
  231. package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +5 -1
  232. package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +1 -7
  233. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
  234. package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
  235. package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
  236. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  237. package/dist/components/features/products/products.strings.d.ts +9 -1
  238. package/dist/components/features/products/products.types.d.ts +45 -8
  239. package/dist/components/features/questionnaire/questionnaire.types.d.ts +3 -0
  240. package/dist/components/features/resource/resource.d.ts +6 -2
  241. package/dist/components/features/resource/resource.types.d.ts +14 -1
  242. package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
  243. package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +1 -1
  244. package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
  245. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
  246. package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +3 -1
  247. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
  248. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +17 -3
  249. package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -1
  250. package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
  251. package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
  252. package/dist/components/features/suggestions/suggestions.types.d.ts +1 -1
  253. package/dist/components/features/table/data-table.d.ts +1 -1
  254. package/dist/components/features/table/index.d.ts +1 -0
  255. package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
  256. package/dist/components/features/table/table-body.d.ts +1 -1
  257. package/dist/components/features/table/table-helpers.d.ts +6 -3
  258. package/dist/components/features/table/table.strings.d.ts +3 -0
  259. package/dist/components/features/table/table.types.d.ts +18 -2
  260. package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
  261. package/dist/components/layout/app-shell/index.d.ts +1 -1
  262. package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
  263. package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
  264. package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
  265. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  266. package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
  267. package/dist/components/layout/header/header.recipes.d.ts +6 -0
  268. package/dist/components/layout/header/header.types.d.ts +9 -8
  269. package/dist/components/layout/layout.types.d.ts +5 -3
  270. package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
  271. package/dist/components/layout/navigation/side-nav.d.ts +3 -2
  272. package/dist/components/layout/normalize-layout-path.d.ts +1 -0
  273. package/dist/components/layout/page/index.d.ts +2 -1
  274. package/dist/components/layout/page/page.d.ts +1 -0
  275. package/dist/components/layout/page/page.strings.d.ts +11 -0
  276. package/dist/components/layout/page/page.types.d.ts +69 -17
  277. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  278. package/dist/components/layout/settings/settings.d.ts +10 -3
  279. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  280. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
  281. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
  282. package/dist/components/layout/sidebar/index.d.ts +2 -1
  283. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +38 -0
  284. package/dist/components/layout/sidebar/sidebar.context.d.ts +6 -7
  285. package/dist/components/layout/sidebar/sidebar.types.d.ts +50 -10
  286. package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
  287. package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
  288. package/dist/components/primitives/link.d.ts +3 -2
  289. package/dist/components/primitives/money.d.ts +1 -1
  290. package/dist/components/primitives/number.d.ts +1 -1
  291. package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
  292. package/dist/components/ui/alert-dialog.d.ts +2 -2
  293. package/dist/components/ui/combobox.d.ts +1 -1
  294. package/dist/components/ui/dialog.d.ts +2 -2
  295. package/dist/components/ui/overlay-layer.d.ts +18 -0
  296. package/dist/components/ui/sheet.d.ts +5 -1
  297. package/dist/components/ui/sidebar-state.d.ts +82 -0
  298. package/dist/components/ui/sidebar.d.ts +5 -17
  299. package/dist/{containers-CRmHf7GP.js → containers-CSdc32h9.js} +26 -18
  300. package/dist/containers-CSdc32h9.js.map +1 -0
  301. package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
  302. package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
  303. package/dist/{copyable-CnGCZdX4.js → copyable-3fdHfMR3.js} +7 -7
  304. package/dist/{copyable-CnGCZdX4.js.map → copyable-3fdHfMR3.js.map} +1 -1
  305. package/dist/{data-display-D4oujtx0.js → data-display-Cmj-xZYl.js} +271 -279
  306. package/dist/data-display-Cmj-xZYl.js.map +1 -0
  307. package/dist/{date-Q7jnXxpk.js → date-Br0FicVv.js} +5 -5
  308. package/dist/{date-Q7jnXxpk.js.map → date-Br0FicVv.js.map} +1 -1
  309. package/dist/date-picker-CyQlFYsP.js +1617 -0
  310. package/dist/date-picker-CyQlFYsP.js.map +1 -0
  311. package/dist/date-pickers-tj2MXmXd.js +185 -0
  312. package/dist/date-pickers-tj2MXmXd.js.map +1 -0
  313. package/dist/{display-BB4BL_-K.js → display-CT_N2a3w.js} +9 -9
  314. package/dist/{display-BB4BL_-K.js.map → display-CT_N2a3w.js.map} +1 -1
  315. package/dist/dropdown-menu-C08iIugv.js +194 -0
  316. package/dist/dropdown-menu-C08iIugv.js.map +1 -0
  317. package/dist/features/activities.js +388 -326
  318. package/dist/features/activities.js.map +1 -1
  319. package/dist/features/ai-chat.js +46 -32
  320. package/dist/features/ai-chat.js.map +1 -1
  321. package/dist/features/appointment-calendar.js +130 -130
  322. package/dist/features/appointment-calendar.js.map +1 -1
  323. package/dist/features/async-preview.js +11 -10
  324. package/dist/features/async-preview.js.map +1 -1
  325. package/dist/features/combobox.js +1 -1
  326. package/dist/features/comments.js +1 -1
  327. package/dist/features/data-view.js +13 -13
  328. package/dist/features/data-view.js.map +1 -1
  329. package/dist/features/email-composer.js +243 -239
  330. package/dist/features/email-composer.js.map +1 -1
  331. package/dist/features/event-calendar.js +197 -199
  332. package/dist/features/event-calendar.js.map +1 -1
  333. package/dist/features/filters.js +2 -2
  334. package/dist/features/global-search.js +168 -143
  335. package/dist/features/global-search.js.map +1 -1
  336. package/dist/features/kanban.js +19 -30
  337. package/dist/features/kanban.js.map +1 -1
  338. package/dist/features/map/style.css +15 -0
  339. package/dist/features/map.js +369 -343
  340. package/dist/features/map.js.map +1 -1
  341. package/dist/features/media-library.js +1202 -975
  342. package/dist/features/media-library.js.map +1 -1
  343. package/dist/features/mentions.js +2 -2
  344. package/dist/features/overlays.js +1 -1
  345. package/dist/features/products.js +1270 -1183
  346. package/dist/features/products.js.map +1 -1
  347. package/dist/features/questionnaire.js +160 -153
  348. package/dist/features/questionnaire.js.map +1 -1
  349. package/dist/features/resource-assignment.js +8 -8
  350. package/dist/features/resource.js +119 -113
  351. package/dist/features/resource.js.map +1 -1
  352. package/dist/features/rich-text-editor.js +28 -19
  353. package/dist/features/rich-text-editor.js.map +1 -1
  354. package/dist/features/schema-form.js +297 -256
  355. package/dist/features/schema-form.js.map +1 -1
  356. package/dist/features/suggestions.js +57 -50
  357. package/dist/features/suggestions.js.map +1 -1
  358. package/dist/features/sync.js +3 -3
  359. package/dist/features/table.js +1 -1
  360. package/dist/features/theme-tweaker.js +470 -470
  361. package/dist/features/theme-tweaker.js.map +1 -1
  362. package/dist/feedback-Dzo1xtAU.js +246 -0
  363. package/dist/feedback-Dzo1xtAU.js.map +1 -0
  364. package/dist/{field-affordance-recipes-DjwGx8eM.js → field-affordance-recipes-D6H7tVJi.js} +5 -5
  365. package/dist/field-affordance-recipes-D6H7tVJi.js.map +1 -0
  366. package/dist/field-control-attributes-B6i335wr.js +18 -0
  367. package/dist/field-control-attributes-B6i335wr.js.map +1 -0
  368. package/dist/{field-state-recipes-BVA2CWHo.js → field-state-recipes-7sza8QbC.js} +4 -2
  369. package/dist/{field-state-recipes-BVA2CWHo.js.map → field-state-recipes-7sza8QbC.js.map} +1 -1
  370. package/dist/filters-Dl80yYtN.js +2415 -0
  371. package/dist/filters-Dl80yYtN.js.map +1 -0
  372. package/dist/form-field-CAPdwdnZ.js +74 -0
  373. package/dist/form-field-CAPdwdnZ.js.map +1 -0
  374. package/dist/{form-sizing-NXgjkmBG.js → form-sizing-CgcrUbLU.js} +5 -5
  375. package/dist/form-sizing-CgcrUbLU.js.map +1 -0
  376. package/dist/{forms-BV5m5aQF.js → forms-B3W8CH7-.js} +17 -13
  377. package/dist/forms-B3W8CH7-.js.map +1 -0
  378. package/dist/forms-numeric-CwjQJe-O.js +991 -0
  379. package/dist/forms-numeric-CwjQJe-O.js.map +1 -0
  380. package/dist/{header-BA697l4a.js → header-ZIIsRKxP.js} +145 -141
  381. package/dist/header-ZIIsRKxP.js.map +1 -0
  382. package/dist/header.recipes-BigdJjw1.js +6 -0
  383. package/dist/header.recipes-BigdJjw1.js.map +1 -0
  384. package/dist/hooks/use-files.d.ts +2 -0
  385. package/dist/{hooks-BQ-L7Uu2.js → hooks-BitHSh-Y.js} +27 -15
  386. package/dist/hooks-BitHSh-Y.js.map +1 -0
  387. package/dist/{icon-badge-COWbCCWu.js → icon-badge-npxF1SLX.js} +4 -4
  388. package/dist/{icon-badge-COWbCCWu.js.map → icon-badge-npxF1SLX.js.map} +1 -1
  389. package/dist/index.js +4 -5
  390. package/dist/{input-Cdw4k0fb.js → input-7KAc7XQL.js} +9 -9
  391. package/dist/{input-Cdw4k0fb.js.map → input-7KAc7XQL.js.map} +1 -1
  392. package/dist/input-DIREVYHs.js +21 -0
  393. package/dist/input-DIREVYHs.js.map +1 -0
  394. package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-4wZ2tvfb.js} +2 -2
  395. package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-4wZ2tvfb.js.map} +1 -1
  396. package/dist/item-FfWnaYST.js +278 -0
  397. package/dist/item-FfWnaYST.js.map +1 -0
  398. package/dist/layout/app-shell.js +1 -1
  399. package/dist/layout/auth.js +1 -1
  400. package/dist/layout/containers.js +1 -1
  401. package/dist/layout/header.js +1 -1
  402. package/dist/layout/hooks.js +1 -1
  403. package/dist/layout/navigation.js +1 -1
  404. package/dist/layout/page.js +2 -2
  405. package/dist/layout/settings.js +1 -1
  406. package/dist/layout/sidebar.js +3 -3
  407. package/dist/layout/workspace.js +1 -1
  408. package/dist/layout.js +12 -12
  409. package/dist/layout.types-E_GAApzO.js +30 -0
  410. package/dist/layout.types-E_GAApzO.js.map +1 -0
  411. package/dist/lib/affordance-geometry.generated.d.ts +35 -35
  412. package/dist/lib/control-group-recipes.d.ts +5 -5
  413. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  414. package/dist/lib/field-control-attributes.d.ts +11 -0
  415. package/dist/lib/field-state-recipes.d.ts +2 -0
  416. package/dist/lib/format.d.ts +1 -0
  417. package/dist/lib/motion-recipes.d.ts +3 -0
  418. package/dist/lib/navigation-row-recipes.d.ts +7 -7
  419. package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
  420. package/dist/lib/portal-recipes.d.ts +3 -0
  421. package/dist/lib/surface-recipes.d.ts +1 -1
  422. package/dist/lib/token-merge.generated.d.ts +18 -15
  423. package/dist/lib/utils.js +1 -1
  424. package/dist/map-demo-tile.svg +1 -1
  425. package/dist/{media-gallery-CSl5W1Fy.js → media-gallery-C81DAnKI.js} +6 -6
  426. package/dist/{media-gallery-CSl5W1Fy.js.map → media-gallery-C81DAnKI.js.map} +1 -1
  427. package/dist/{mentions-RKOQaaIB.js → mentions-qOnedSt4.js} +237 -168
  428. package/dist/mentions-qOnedSt4.js.map +1 -0
  429. package/dist/message-BJHnn43M.js +135 -0
  430. package/dist/message-BJHnn43M.js.map +1 -0
  431. package/dist/{metadata-list-qVV7AVxa.js → metadata-list-XkqZ_UXH.js} +64 -64
  432. package/dist/metadata-list-XkqZ_UXH.js.map +1 -0
  433. package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
  434. package/dist/motion-recipes-DitYv6P2.js.map +1 -0
  435. package/dist/navigation-BgtPJAhi.js +288 -0
  436. package/dist/navigation-BgtPJAhi.js.map +1 -0
  437. package/dist/navigation-Bt-v7rWP.js +261 -0
  438. package/dist/navigation-Bt-v7rWP.js.map +1 -0
  439. package/dist/{navigation-row-recipes-WZEs-hYo.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
  440. package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
  441. package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
  442. package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
  443. package/dist/{number-E_OiIfJz.js → number-CYqBcrSj.js} +79 -87
  444. package/dist/number-CYqBcrSj.js.map +1 -0
  445. package/dist/overflow-tab-bar-BQCA2Zn2.js +172 -0
  446. package/dist/overflow-tab-bar-BQCA2Zn2.js.map +1 -0
  447. package/dist/overlays-CC8zI3Du.js +1017 -0
  448. package/dist/overlays-CC8zI3Du.js.map +1 -0
  449. package/dist/page-BoQ1VaFJ.js +331 -0
  450. package/dist/page-BoQ1VaFJ.js.map +1 -0
  451. package/dist/page-header-commands-DIKspJfx.js +193 -0
  452. package/dist/page-header-commands-DIKspJfx.js.map +1 -0
  453. package/dist/{pagination-Ch8X_47u.js → pagination-Br8TdV9A.js} +7 -7
  454. package/dist/{pagination-Ch8X_47u.js.map → pagination-Br8TdV9A.js.map} +1 -1
  455. package/dist/popover-k8TdUcAt.js +201 -0
  456. package/dist/popover-k8TdUcAt.js.map +1 -0
  457. package/dist/{popover-menu-BYaCdFhf.js → popover-menu-yn-o0kyA.js} +7 -7
  458. package/dist/{popover-menu-BYaCdFhf.js.map → popover-menu-yn-o0kyA.js.map} +1 -1
  459. package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DJ0AkUan.js} +19 -12
  460. package/dist/popover.recipes-DJ0AkUan.js.map +1 -0
  461. package/dist/portal-recipes-DyUXqUtD.js +9 -0
  462. package/dist/portal-recipes-DyUXqUtD.js.map +1 -0
  463. package/dist/{primitives-Du64iDbb.js → primitives-BkkQjYl7.js} +23 -18
  464. package/dist/primitives-BkkQjYl7.js.map +1 -0
  465. package/dist/primitives.js +4 -4
  466. package/dist/{progress-BvF2oCdV.js → progress-DZFXXzPs.js} +9 -9
  467. package/dist/{progress-BvF2oCdV.js.map → progress-DZFXXzPs.js.map} +1 -1
  468. package/dist/{receipt-D789Jwyy.js → receipt-C7LhOg7Q.js} +7 -7
  469. package/dist/receipt-C7LhOg7Q.js.map +1 -0
  470. package/dist/rich-text-BnTzZjIo.js +45 -0
  471. package/dist/rich-text-BnTzZjIo.js.map +1 -0
  472. package/dist/{rich-text-editor-Cm1dpUpQ.js → rich-text-editor-CAurDwT5.js} +501 -424
  473. package/dist/rich-text-editor-CAurDwT5.js.map +1 -0
  474. package/dist/rich-text-editor-toolbar-DbXig7Jk.js +99 -0
  475. package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +1 -0
  476. package/dist/rich-text-tree-BqyQ_7-R.js +66 -0
  477. package/dist/rich-text-tree-BqyQ_7-R.js.map +1 -0
  478. package/dist/{sanitize-html-DsQmI48u.js → sanitize-html-BWkH4dLM.js} +29 -16
  479. package/dist/sanitize-html-BWkH4dLM.js.map +1 -0
  480. package/dist/{scroll-area-La5RXsEk.js → scroll-area-Bj6CRUif.js} +2 -2
  481. package/dist/{scroll-area-La5RXsEk.js.map → scroll-area-Bj6CRUif.js.map} +1 -1
  482. package/dist/{separator-DAEV0w65.js → separator-B9ewiCGO.js} +2 -2
  483. package/dist/{separator-DAEV0w65.js.map → separator-B9ewiCGO.js.map} +1 -1
  484. package/dist/{separator-GNfPG-90.js → separator-DM6gs2vu.js} +3 -3
  485. package/dist/{separator-GNfPG-90.js.map → separator-DM6gs2vu.js.map} +1 -1
  486. package/dist/services/actions.js +1 -1
  487. package/dist/settings-DZPHgpx4.js +155 -0
  488. package/dist/settings-DZPHgpx4.js.map +1 -0
  489. package/dist/sheet-C4DHsgLk.js +250 -0
  490. package/dist/sheet-C4DHsgLk.js.map +1 -0
  491. package/dist/sidebar-C8BnDwTH.js +709 -0
  492. package/dist/sidebar-C8BnDwTH.js.map +1 -0
  493. package/dist/sidebar-CmD6a-HK.js +1004 -0
  494. package/dist/sidebar-CmD6a-HK.js.map +1 -0
  495. package/dist/skeleton-DDgdhmu9.js +265 -0
  496. package/dist/skeleton-DDgdhmu9.js.map +1 -0
  497. package/dist/smart-card-B6vLxqa_.js +617 -0
  498. package/dist/smart-card-B6vLxqa_.js.map +1 -0
  499. package/dist/{structure-C0V0_Fyf.js → structure-DZJ2wbAU.js} +2 -2
  500. package/dist/{structure-C0V0_Fyf.js.map → structure-DZJ2wbAU.js.map} +1 -1
  501. package/dist/style.css +1 -1
  502. package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-C8mNycaY.js} +2 -2
  503. package/dist/{surface-recipes-BKRVW8Os.js.map → surface-recipes-C8mNycaY.js.map} +1 -1
  504. package/dist/{table-DH7rozUv.js → table-CBonSdTp.js} +573 -519
  505. package/dist/table-CBonSdTp.js.map +1 -0
  506. package/dist/{table-CpvnzJn9.js → table-CXSPHH25.js} +75 -71
  507. package/dist/table-CXSPHH25.js.map +1 -0
  508. package/dist/tabs-C4Kr_hCr.js +192 -0
  509. package/dist/tabs-C4Kr_hCr.js.map +1 -0
  510. package/dist/{text-inputs-DXItiR0O.js → text-inputs-jdkS3ReG.js} +18 -18
  511. package/dist/text-inputs-jdkS3ReG.js.map +1 -0
  512. package/dist/theme.css +40 -37
  513. package/dist/{timelines-DmtztAY_.js → timelines-CoPwdJP0.js} +13 -12
  514. package/dist/timelines-CoPwdJP0.js.map +1 -0
  515. package/dist/tooltip-31NwIpTo.js +113 -0
  516. package/dist/tooltip-31NwIpTo.js.map +1 -0
  517. package/dist/{tree-CV11PURP.js → tree-CeYVzdFE.js} +9 -9
  518. package/dist/{tree-CV11PURP.js.map → tree-CeYVzdFE.js.map} +1 -1
  519. package/dist/typography/rich-text.js +1 -1
  520. package/dist/{typography-CSyJrh28.js → typography-C7-YMW1S.js} +12 -12
  521. package/dist/{typography-CSyJrh28.js.map → typography-C7-YMW1S.js.map} +1 -1
  522. package/dist/typography.js +1 -1
  523. package/dist/ui-provider-C-74NVLc.js +178 -0
  524. package/dist/ui-provider-C-74NVLc.js.map +1 -0
  525. package/dist/ui-provider.js +2 -3
  526. package/dist/{upload-C9SA0X-8.js → upload-Hdm5gObf.js} +309 -296
  527. package/dist/upload-Hdm5gObf.js.map +1 -0
  528. package/dist/{upload-queue-DhQJiSRc.js → upload-queue-D0sYPuqo.js} +16 -14
  529. package/dist/upload-queue-D0sYPuqo.js.map +1 -0
  530. package/dist/{usage-card-DVTRDmGz.js → usage-card-9s8hLDfn.js} +24 -17
  531. package/dist/usage-card-9s8hLDfn.js.map +1 -0
  532. package/dist/{utils-CF3c95Io.js → utils-DhuoqFy4.js} +255 -165
  533. package/dist/utils-DhuoqFy4.js.map +1 -0
  534. package/dist/value-inputs-D3aPgq9H.js +980 -0
  535. package/dist/value-inputs-D3aPgq9H.js.map +1 -0
  536. package/dist/{value-typography-ClupF0Gz.js → value-typography-uSzzG9Gf.js} +32 -26
  537. package/dist/value-typography-uSzzG9Gf.js.map +1 -0
  538. package/dist/{workspace-9EFVXUyk.js → workspace-CC8Vchiu.js} +51 -50
  539. package/dist/workspace-CC8Vchiu.js.map +1 -0
  540. package/docs/consumer-skill/SKILL.md +4 -3
  541. package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
  542. package/docs/consumer-skill/examples/app-layout.tsx +52 -1
  543. package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
  544. package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
  545. package/docs/consumer-skill/examples/detail.tsx +5 -4
  546. package/docs/consumer-skill/examples/edit.tsx +3 -3
  547. package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
  548. package/docs/consumer-skill/examples/index-table.tsx +4 -4
  549. package/docs/consumer-skill/examples/manifest.json +38 -1
  550. package/docs/consumer-skill/examples/product-media.tsx +41 -0
  551. package/docs/consumer-skill/examples/product-parts.tsx +81 -0
  552. package/docs/consumer-skill/examples/rhf-edit-page.tsx +1 -1
  553. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +24 -11
  554. package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
  555. package/docs/consumer-skill/references/agents-md.md +21 -19
  556. package/docs/consumer-skill/references/analytics.md +33 -1
  557. package/docs/consumer-skill/references/commerce-composition.md +97 -0
  558. package/docs/consumer-skill/references/component-contracts.json +21249 -14205
  559. package/docs/consumer-skill/references/composition-mapping.md +17 -3
  560. package/docs/consumer-skill/references/composition.md +177 -32
  561. package/docs/consumer-skill/references/critique-rubric.md +98 -0
  562. package/docs/consumer-skill/references/custom-composition.md +261 -0
  563. package/docs/consumer-skill/references/data-reading.md +79 -0
  564. package/docs/consumer-skill/references/design-contract.md +12 -9
  565. package/docs/consumer-skill/references/discovery.md +27 -3
  566. package/docs/consumer-skill/references/domain-structures.md +124 -0
  567. package/docs/consumer-skill/references/installation.md +62 -8
  568. package/docs/consumer-skill/references/integration.md +59 -1
  569. package/docs/consumer-skill/references/product-composition.md +94 -0
  570. package/docs/consumer-skill/references/public-api.json +3044 -445
  571. package/docs/consumer-skill/references/review.md +87 -10
  572. package/docs/consumer-skill/references/rhf-workflows.md +79 -0
  573. package/docs/consumer-skill/references/screen-archetypes.md +19 -7
  574. package/docs/consumer-skill/references/screen-decisions.md +126 -0
  575. package/docs/consumer-skill/references/theming.md +24 -20
  576. package/docs/consumer-skill/references/tokens.json +9 -9
  577. package/docs/consumer-skill/references/view-craft.md +153 -0
  578. package/docs/consumer-skill/references/view-spec.md +73 -0
  579. package/docs/consumer-skill/references/workflows.md +7 -1
  580. package/docs/consumer-skill/scripts/composition-policy.mjs +176 -26
  581. package/docs/consumer-skill/scripts/composition-schema.mjs +1 -1
  582. package/docs/consumer-skill/scripts/composition.mjs +61 -5
  583. package/docs/consumer-skill/scripts/discovery.mjs +54 -0
  584. package/docs/consumer-skill/scripts/inspect-component.mjs +1 -1
  585. package/docs/consumer-skill/scripts/inspection.mjs +73 -18
  586. package/docs/consumer-skill/scripts/setup-skills.mjs +79 -7
  587. package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
  588. package/docs/consumer-skills/themelia-components/SKILL.md +14 -13
  589. package/docs/consumer-skills/themelia-composition/SKILL.md +16 -17
  590. package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
  591. package/docs/consumer-skills/themelia-foundation/SKILL.md +2 -1
  592. package/docs/consumer-skills/themelia-tokenization/SKILL.md +24 -17
  593. package/package.json +4 -2
  594. package/templates/admin-shell-template.tsx +1 -2
  595. package/templates/customers-template.tsx +18 -16
  596. package/dist/accordion-96o0pN62.js.map +0 -1
  597. package/dist/action-menu-CHgs8vmj.js.map +0 -1
  598. package/dist/affordance-geometry.generated-B8yGOr8-.js.map +0 -1
  599. package/dist/ai-artifact-BZUGwBq6.js.map +0 -1
  600. package/dist/app-shell-D63ATkIK.js +0 -237
  601. package/dist/app-shell-D63ATkIK.js.map +0 -1
  602. package/dist/auth-D2FVZ1MH.js.map +0 -1
  603. package/dist/avatar-DWO_HHhB.js.map +0 -1
  604. package/dist/base/cascader.js.map +0 -1
  605. package/dist/batch-action-bar-CdfIkCsV.js.map +0 -1
  606. package/dist/breadcrumbs-B-WFKecD.js.map +0 -1
  607. package/dist/button-DkmK-z8E.js.map +0 -1
  608. package/dist/buttons-BbfzgczK.js.map +0 -1
  609. package/dist/cards-4JTWqvVe.js +0 -68
  610. package/dist/cards-4JTWqvVe.js.map +0 -1
  611. package/dist/chart-C19flDQb.js +0 -155
  612. package/dist/chart-C19flDQb.js.map +0 -1
  613. package/dist/choice-inputs-JLtij2y4.js +0 -776
  614. package/dist/choice-inputs-JLtij2y4.js.map +0 -1
  615. package/dist/code-block-CGNaUtAE.js.map +0 -1
  616. package/dist/combobox-CBJDs6w_.js +0 -877
  617. package/dist/combobox-CBJDs6w_.js.map +0 -1
  618. package/dist/combobox-hbhSS18O.js +0 -355
  619. package/dist/combobox-hbhSS18O.js.map +0 -1
  620. package/dist/command-D8NrBj-b.js.map +0 -1
  621. package/dist/comments-Di4w0H_S.js.map +0 -1
  622. package/dist/containers-CRmHf7GP.js.map +0 -1
  623. package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
  624. package/dist/data-display-D4oujtx0.js.map +0 -1
  625. package/dist/date-picker-zOt1oNss.js +0 -1542
  626. package/dist/date-picker-zOt1oNss.js.map +0 -1
  627. package/dist/date-pickers-cj8IXbDC.js +0 -179
  628. package/dist/date-pickers-cj8IXbDC.js.map +0 -1
  629. package/dist/dropdown-menu-CjY8Vt7W.js +0 -193
  630. package/dist/dropdown-menu-CjY8Vt7W.js.map +0 -1
  631. package/dist/feedback-DZNL5Lg1.js +0 -239
  632. package/dist/feedback-DZNL5Lg1.js.map +0 -1
  633. package/dist/field-affordance-recipes-DjwGx8eM.js.map +0 -1
  634. package/dist/filters-BcT-uoFy.js +0 -2209
  635. package/dist/filters-BcT-uoFy.js.map +0 -1
  636. package/dist/form-field-CsgRmdit.js +0 -63
  637. package/dist/form-field-CsgRmdit.js.map +0 -1
  638. package/dist/form-sizing-NXgjkmBG.js.map +0 -1
  639. package/dist/forms-BV5m5aQF.js.map +0 -1
  640. package/dist/forms-numeric-Cd33AKbD.js +0 -906
  641. package/dist/forms-numeric-Cd33AKbD.js.map +0 -1
  642. package/dist/header-BA697l4a.js.map +0 -1
  643. package/dist/hooks-BQ-L7Uu2.js.map +0 -1
  644. package/dist/input-DOPL5_QE.js +0 -21
  645. package/dist/input-DOPL5_QE.js.map +0 -1
  646. package/dist/item-BvZ2DR_x.js +0 -277
  647. package/dist/item-BvZ2DR_x.js.map +0 -1
  648. package/dist/layout.types-Cn7aUzJp.js +0 -20
  649. package/dist/layout.types-Cn7aUzJp.js.map +0 -1
  650. package/dist/mentions-RKOQaaIB.js.map +0 -1
  651. package/dist/message-INU2xsxu.js +0 -128
  652. package/dist/message-INU2xsxu.js.map +0 -1
  653. package/dist/metadata-list-qVV7AVxa.js.map +0 -1
  654. package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
  655. package/dist/navigation-BQNcg1jT.js +0 -269
  656. package/dist/navigation-BQNcg1jT.js.map +0 -1
  657. package/dist/navigation-DLF3E1IC.js +0 -145
  658. package/dist/navigation-DLF3E1IC.js.map +0 -1
  659. package/dist/navigation-row-recipes-WZEs-hYo.js.map +0 -1
  660. package/dist/number-E_OiIfJz.js.map +0 -1
  661. package/dist/overflow-tab-bar-CrbqMteP.js +0 -284
  662. package/dist/overflow-tab-bar-CrbqMteP.js.map +0 -1
  663. package/dist/overlays-BlKynmde.js +0 -1004
  664. package/dist/overlays-BlKynmde.js.map +0 -1
  665. package/dist/page-CIwNUtGr.js +0 -227
  666. package/dist/page-CIwNUtGr.js.map +0 -1
  667. package/dist/page-header-commands-DFMlNYzN.js +0 -128
  668. package/dist/page-header-commands-DFMlNYzN.js.map +0 -1
  669. package/dist/popover-uwzX2vo7.js +0 -198
  670. package/dist/popover-uwzX2vo7.js.map +0 -1
  671. package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
  672. package/dist/primitives-Du64iDbb.js.map +0 -1
  673. package/dist/receipt-D789Jwyy.js.map +0 -1
  674. package/dist/rich-text-CLJEf76s.js +0 -78
  675. package/dist/rich-text-CLJEf76s.js.map +0 -1
  676. package/dist/rich-text-editor-Cm1dpUpQ.js.map +0 -1
  677. package/dist/rich-text-editor-toolbar-L__e4x47.js +0 -94
  678. package/dist/rich-text-editor-toolbar-L__e4x47.js.map +0 -1
  679. package/dist/safe-image-src-C6kQSMBZ.js +0 -17
  680. package/dist/safe-image-src-C6kQSMBZ.js.map +0 -1
  681. package/dist/sanitize-html-DsQmI48u.js.map +0 -1
  682. package/dist/settings-BA2iboic.js +0 -174
  683. package/dist/settings-BA2iboic.js.map +0 -1
  684. package/dist/sheet-DoAxTb2J.js +0 -213
  685. package/dist/sheet-DoAxTb2J.js.map +0 -1
  686. package/dist/sidebar-ByqKR_W5.js +0 -512
  687. package/dist/sidebar-ByqKR_W5.js.map +0 -1
  688. package/dist/sidebar-D2iSnGJ7.js +0 -619
  689. package/dist/sidebar-D2iSnGJ7.js.map +0 -1
  690. package/dist/skeleton-CUj8O5Bd.js +0 -264
  691. package/dist/skeleton-CUj8O5Bd.js.map +0 -1
  692. package/dist/smart-card-CqkzQsK-.js +0 -614
  693. package/dist/smart-card-CqkzQsK-.js.map +0 -1
  694. package/dist/table-CpvnzJn9.js.map +0 -1
  695. package/dist/table-DH7rozUv.js.map +0 -1
  696. package/dist/tabs-eqVsJZWO.js +0 -191
  697. package/dist/tabs-eqVsJZWO.js.map +0 -1
  698. package/dist/text-inputs-DXItiR0O.js.map +0 -1
  699. package/dist/theme-scope-BJ6eE2xt.js +0 -50
  700. package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
  701. package/dist/timelines-DmtztAY_.js.map +0 -1
  702. package/dist/tooltip-B4hjKtoV.js +0 -111
  703. package/dist/tooltip-B4hjKtoV.js.map +0 -1
  704. package/dist/ui-provider-CQCuCBcy.js +0 -136
  705. package/dist/ui-provider-CQCuCBcy.js.map +0 -1
  706. package/dist/upload-C9SA0X-8.js.map +0 -1
  707. package/dist/upload-queue-DhQJiSRc.js.map +0 -1
  708. package/dist/usage-card-DVTRDmGz.js.map +0 -1
  709. package/dist/use-mobile-vaLKwgyf.js +0 -15
  710. package/dist/use-mobile-vaLKwgyf.js.map +0 -1
  711. package/dist/utils-CF3c95Io.js.map +0 -1
  712. package/dist/value-inputs-C0o70p-U.js +0 -980
  713. package/dist/value-inputs-C0o70p-U.js.map +0 -1
  714. package/dist/value-typography-ClupF0Gz.js.map +0 -1
  715. package/dist/workspace-9EFVXUyk.js.map +0 -1
@@ -27,7 +27,9 @@ TypeScript, optional component peers or the consumer's application code.
27
27
  in the main region and record facts in the supporting region. A responsibility
28
28
  is a role tag reported by `--roles`; a complete business brief is not a role.
29
29
  2. Use `--role` to inspect a role's mapped owners. Role names accept spaces or
30
- kebab-case. A qualified `themelia-react-ui/<family>#<Symbol>` selector chooses
30
+ kebab-case. A phrase that matches no role stays `unresolved` and may list
31
+ `suggestedRoles` that share its words; retry with one of them only when it
32
+ names the same job. A qualified `themelia-react-ui/<family>#<Symbol>` selector chooses
31
33
  an exact mapped contract when a role has several candidates.
32
34
  3. Select a pattern and repeat `--main` or `--aside` for each subject. Supported
33
35
  patterns are `record-detail`, `collection`, `edit`, `analytics` and `embedded`.
@@ -46,11 +48,23 @@ installed setup and matching versions. An empty additional list does not remove
46
48
  React or Base UI requirements.
47
49
 
48
50
  The record-detail example resolves a route owner and, because support is
49
- requested, a main/support layout. Its `tree.slots` uses actual insertion props
50
- such as `children`, `main` and `aside`. Parent-surface content can receive a
51
+ requested, Page's mapped aside slot. Without support, edit/detail plans recommend narrow when its contract supports that prop. Its `tree.slots` uses actual insertion props
52
+ such as `children` and Page's direct `aside`. Older bundles without Page aside anatomy retain their explicit main/support layout. Parent-surface content can receive a
51
53
  subject Card at that boundary. Already framed owners keep their own surface;
52
54
  variant-dependent owners require inspection before choosing framing.
53
55
 
56
+ Collection plans can place an explicit toolbar need in the table seam:
57
+
58
+ ```sh
59
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern collection --main comparison-table --main query-toolbar
60
+ ```
61
+
62
+ The mapped FilterLayout goes into DataTable's topbarContent with compact/clear
63
+ props, and the mapped FilterProvider wraps that table. Supply its definitions,
64
+ activeFilters and onFilterChange using the app's query transport. Toolbar order
65
+ in the request does not matter. Missing/ambiguous table seams or context mappings
66
+ remain unresolved; no detached filter strip or guessed provider is emitted.
67
+
54
68
  For an existing Card boundary:
55
69
 
56
70
  ```sh
@@ -16,6 +16,12 @@ keep placement, width, wrapping and overflow with the surrounding composition.
16
16
  | Reusable subject presentation | Blocks |
17
17
  | Editing/selection/async lifecycle | Features with app callbacks |
18
18
 
19
+ Base controls, layouts and blocks also own their local interaction and
20
+ accessibility; features coordinate a complete business workflow. For choosing
21
+ compound APIs and building token-backed app content, read
22
+ [app-owned composites](custom-composition.md). It includes disclosure sections,
23
+ layer boundaries and a custom comparison seam.
24
+
19
25
  ## Compose from the task
20
26
 
21
27
  Identify the user's next decision before selecting components. Establish fixed
@@ -29,11 +35,11 @@ a detail workspace or a form; they need different information hierarchies.
29
35
  | DataView | Its coordinated query, view and collection lifecycle fits | DataTable with app-owned query transport and native toolbar slots when coordination differs; base Table for presentation without TanStack behavior |
30
36
  | ResourceCell | Identity inside a table cell | Item for independent list entries; MetadataList for label/value facts about one subject |
31
37
  | Page / application shell | Route identity, navigation, content bounds and page commands | Card for an independent subject within that route; do not repeat the same heading merely to frame a table |
32
- | Card | One subject needs a frame and headed regions | `surface="flat" padding="none"` inside an existing boundary; nested DataTable uses its own `surface="flat"` |
38
+ | Card | One subject needs a frame and headed regions | `surface="flat" padding="none"` inside an existing boundary; prefer DataTable directly in the layout, or Card padding="none" with a flat table |
33
39
  | Metric / MetricGrid / MetricBar | A KPI needs formatted value, comparison/trend or peer layout | UsageCard for used/limit quotas; InlineStat for one plain fact, MetadataList for several record facts |
34
40
  | FormField / InlineEdit | A field needs label/hint/error, or isolated save/cancel | Complete feature/overlay for a workflow; app form owns whole-record submission |
35
41
 
36
- For a DataTable composition, put queries in `topbarContent`, exports or collection
42
+ For a DataTable composition, wrap it in FilterProvider and put `FilterLayout variant="compact" showClearFilters` in `topbarContent`, exports or collection
37
43
  tools in `topbarEnd`, selection commands in `bulkActions`, and record commands
38
44
  in `rowActions`. `bulkActions` render in the shared `BatchActionBar`, docked to
39
45
  the viewport while rows are selected (`selectionToolbarPlacement="inline"` keeps
@@ -57,20 +63,31 @@ or supported comparison controls. Avoid automatically appending every hidden
57
63
  column to identity metadata. There is no universal row-line limit: long names,
58
64
  accessibility needs and the task can justify richer rows. Explain the priority.
59
65
  Custom ResourceCell metadata is caller content; use shared supporting typography
60
- and CellStack where its smaller secondary-value contract fits.
66
+ and CellStack where its smaller secondary-value contract fits. ResourceCell draws
67
+ its media circle only when you pass `imageUrl`, `icon` or `fallback`: order and
68
+ invoice identifiers stay plain text, and a person opts in with
69
+ `fallback={<Initials value={name} />}`.
61
70
 
62
71
  Commands need explicit importance as well as scope. Describe page commands by
63
72
  role in Page's header: `primaryAction` is the route's one main command, and
64
73
  `secondaryActions` lists supporting commands in priority order. The header owns
65
74
  their treatment and order: outline secondary buttons, the solid primary button,
66
75
  then a More actions menu for overflow, destructive commands and narrow screens,
67
- which always ends the row. WorkspaceRecordHeader, ResourceHeader, the resource
76
+ which always ends the desktop row. Below 40rem of actual header width, every
77
+ command, including primary, moves into one More actions menu. WorkspaceRecordHeader, ResourceHeader, the resource
68
78
  shells and SettingsShell take the same props and render the same row. Choosing which
69
79
  command is primary, which are `destructive`, and which are `visible` remains an
70
80
  application decision; confirm destructive commands in their handler. Use
71
- `actions` only for non-command controls such as a period select. A back link,
81
+ the compatible direct `actions` prop for non-command controls such as a period select. A back link,
72
82
  export and destructive command should not all inherit the same visual emphasis.
73
83
 
84
+ Scope this hierarchy to route commands. A local lookup or independently saved
85
+ settings form keeps its primary submit beside its fields or in its own footer;
86
+ it does not compete with the route's primary action. A whole-page editor can
87
+ deliberately expose one submit in its header. Preserve native form association
88
+ and validation instead of moving local saves to header DOM-lookup handlers just
89
+ to silence a primary-command warning.
90
+
74
91
  ```tsx
75
92
  <Page header={{
76
93
  title: 'Contacts',
@@ -92,7 +109,7 @@ leave the others plain.
92
109
  ```tsx
93
110
  <Page header={{
94
111
  title: member.name,
95
- titleBadges: [{ label: 'Needs attention', tone: 'warning' }],
112
+ slots: { titleSuffix: <Badge tone="warning">Needs attention</Badge> },
96
113
  primaryAction: { label: 'Generate report', onClick: onReport },
97
114
  secondaryActions: [
98
115
  { label: 'Update profile', onClick: onEdit },
@@ -210,7 +227,7 @@ See the [website example](../examples/website.tsx) for both hero and section emp
210
227
 
211
228
  ## Card anatomy
212
229
 
213
- Card surface="card" is the ordinary bordered surface; surface="framed" retains its ring recipe; surface="flat" padding="none" composes within an existing boundary. headerPlacement="frame" places title/icon/actions above an inset body, retaining default corners and using rounded-inner on that body.
230
+ Card surface="card" is the ordinary bordered surface; surface="framed" retains its ring recipe; surface="flat" padding="none" composes within an existing boundary. headerPlacement="frame" places title/icon/actions above an inset body, retaining the surface corner and using rounded-radius on that body.
214
231
 
215
232
  Choose one ordinary Card surface through UIProvider's `card.defaultSurface` and
216
233
  let sibling subjects inherit it. Explicit per-card surfaces win: mixing `card`
@@ -223,9 +240,9 @@ for richer content. Facts and rows follow the same rule: one glyph repeated on
223
240
  every MetadataList item or Item row is decoration, so leave `icon`/media empty.
224
241
 
225
242
  Card `gap` owns spacing between regions; `contentGap` owns direct body-child
226
- spacing; `textGap` owns title/supporting-copy rhythm. `contentGap` is unset by
227
- default, so raw body children retain their inline or caller-owned layout.
228
- Choose `contentGap="xl"` for related siblings and `contentGap="2xl"` for
243
+ spacing; `textGap` owns title/supporting-copy rhythm. Body children default to
244
+ the shared related `xl` gap (16px at default roots).
245
+ Use `contentGap="2xl"` for
229
246
  independent sections. Omit it around an existing Grid/Stack or a single feature
230
247
  that already owns its layout:
231
248
 
@@ -325,26 +342,28 @@ primitives rather than replacing labels and values with undifferentiated Text.
325
342
 
326
343
  ## Menus and controls
327
344
 
328
- PopoverContent type="display" owns substantive-content padding; type="menu" compact collection padding around already-padded rows. Popover and Command share inset="default" and inset="compact" paradigms. Mixed searchable shells use inset="flush"; public header/search/list/footer anatomy owns its insets automatically. CommandInput composes the public Input for control geometry and focus styling; its search region adds only outer spacing. Do not pass padding through className, contentClassName or inline styles. Compact header controls and footer actions align with row highlight edges; header text and footer captions align with row labels. Use PopoverHeader start for a leading control and PopoverFooter caption for supporting content alongside trailing action children. Dividers use the same semantic recipe. density selects vertical row rhythm without changing inline padding. ActionMenu owns action definitions, PopoverMenu searchable selection, DropdownMenu bespoke menu anatomy. Shared appearance preserves their accessible menu/listbox/dialog behavior.
345
+ PopoverContent type="display" owns substantive-content padding; type="menu" compact collection padding around already-padded rows. Popover and Command share inset="default" and inset="compact" paradigms. Mixed searchable shells use inset="flush"; public header/search/list/footer anatomy owns its insets automatically. CommandInput composes the public Input for control geometry and focus styling; its search region adds only outer spacing. Do not pass padding through className, contentClassName or inline styles. Compact header controls and footer actions align with row highlight edges and the search field; header text and footer captions sit one small step inside that edge. Use PopoverHeader start for a leading control and PopoverFooter caption for supporting content alongside trailing action children. Dividers use the same semantic recipe. density selects vertical row rhythm without changing inline padding. ActionMenu owns action definitions, PopoverMenu searchable selection, DropdownMenu bespoke menu anatomy. Shared appearance preserves their accessible menu/listbox/dialog behavior.
329
346
 
330
347
  | Choice | Responsibility |
331
348
  | --- | --- |
332
349
  | PopoverContent type="display" / type="menu" | Display versus collection anatomy and typography |
333
- | inset="default" / "compact" | Full versus half surface-root inset |
350
+ | inset="default" / "compact" | Rich surface inset versus small collection shell |
334
351
  | inset="flush" | Delegate insets to owned regions; not a density |
335
352
  | density="compact" / "default" / "comfortable" | Collection row block rhythm, independent from inline spacing |
336
353
  | size="sm" / "md" / "lg" | Supported control's scale; consult its declaration and provider precedence |
337
354
 
338
- Input, Button, Select and filter-facet triggers share bounded inner corners
339
- and corresponding heights; Card and popup shells use the global outer radius. Omitted sizes inherit the provider; explicit sizes win.
355
+ Input, Button, Select, filter-facet triggers and badges share the default
356
+ `rounded-radius` corner; Card and popup shells use the larger `rounded-surface`.
357
+ Fields and actions use their corresponding height scales; badges remain content-sized.
358
+ Omitted sizes inherit the provider; explicit sizes win.
340
359
  Keep action/control roots equal when those controls adjoin. Compact menu rows,
341
- surface insets and control sizes remain independent; density can tighten the
342
- inner-radius height bound without changing outer corners.
360
+ surface insets and control sizes remain independent; density does not change
361
+ the corner.
343
362
  Inset segmented children use the supported compound owner's same-height frame.
344
363
 
345
364
  PopoverContent defaults to display/default; Command defaults to compact. An explicit PopoverContent type controls anatomy; explicit inset controls padding and takes precedence over the type's inferred inset. Without type, compact implies menu, other insets imply display. Put type="menu" inset="flush" on PopoverContent for a headed searchable picker. Popover is the interaction root and receives no surface props. PopoverMenu already assembles that picker anatomy; use its declared selection/search props. ComboboxPopup is flush because ComboboxList owns its inset. Do not add another wrapper inset around a normal collection list.
346
365
 
347
- At shipped roots, compact shell padding is 8px; row inline padding is 12px; default row block padding is 8px and minimum height 36px. Compact/comfortable rows use 6/10px block padding and 32/40px minimum heights. Content can grow when it wraps. These are token-derived measurements, not app constants. Flush compact header/footer shell padding matches the list (8px inline). Header text bodies without a leading control and footer captions add the row inset once, aligning text at 20px. Actions keep the 8px shell edge. Nested public slots do not repeat these insets.
366
+ At shipped roots, rich display padding is 24px and compact collection shell padding is 8px; row inline padding is 12px. Anchored collection rows use 6px block padding and a 32px minimum height by default. Compact/comfortable rows use 2/8px block padding and 28/36px minimum heights. These differ from Item/table row density recipes; content can grow when it wraps. These are token-derived measurements, not app constants. Flush compact header/footer bands match the list's 8px inset. Plain header text and footer captions add a small xs step (4px) to that md band inset, rather than the full row inset; leading controls and actions stay on the band edge. Nested public slots do not repeat these insets.
348
367
 
349
368
  Input frames and outline buttons share the input semantic token; collection dividers use border/60; focus uses ring separately and draws one indicator everywhere (a full-strength edge inside a soft halo). Equal responsibilities share recipes, while different semantic roles retain their own treatment. CommandInput keeps its existing onValueChange search contract and native refs; use the actual public Input through its default composition rather than restyling an unframed native field.
350
369
 
@@ -356,7 +375,10 @@ Overflow menus use ActionMenu's own trigger: the ⋯ glyph named "More actions",
356
375
 
357
376
  ## Migration
358
377
 
359
- Use exact themelia-react-ui paths. Presentation imports use blocks/<family>, replacing composed/<family>. Raw UI, Radix, cmdk and routers are not consumer foundations. Read installed types instead of assuming historical CSS-kit props.
378
+ Use exact `themelia-react-ui` paths. Presentation imports move from
379
+ `admin-ui-starter-kit/composed/<family>` to `themelia-react-ui/blocks/<family>`.
380
+ Read `MIGRATION.md` in the installed package for setup, tools and changed
381
+ defaults. Check the installed types when migrating a composition.
360
382
 
361
383
 
362
384
  ## Copy rhythm
@@ -446,6 +468,40 @@ to the existing shell and retains its typed slots; topbar props and toolbar
446
468
  props are specific to their variants. The low-level TopbarSidebarLayout,
447
469
  SidebarInsetLayout and StackedLayout remain available for deliberate composition.
448
470
 
471
+ Choose the structure before its options: a global Header above navigation, a
472
+ full-height AppSidebar beside the content Header, or the shadcn-style inset page
473
+ beside navigation. The catalogue leads with these three structures and reuses
474
+ the exact AppSidebar example from the Sidebar page. Single/dual navigation,
475
+ attached/floating frames and icon/offcanvas collapse configure a structure.
476
+ Example child destinations are text-only; an explicit child icon is reserved
477
+ for a case where it carries information.
478
+
479
+ Header-first light/dark variants accept `contentSurface="inset"` for a quiet
480
+ secondary canvas around the card-colored main surface; omission keeps plain.
481
+ SidebarInsetLayout retains `surface="inset" | "flush"`, and the sidebar/inset
482
+ presets retain their defaults. AppSidebar/LayoutSidebar `surface="transparent"`
483
+ shares the docked canvas; drawer surfaces remain opaque. This uses the existing
484
+ theme roles and structural roots.
485
+
486
+ The shared global header-height root defaults to 4rem. Use the playground's
487
+ full-viewport `?page=shells&layout=header|sidebar|inset` views to inspect
488
+ the composition, optionally with `&theme=dark`.
489
+
490
+ Sidebar shells accept `slots.sidebar` (primary) and `slots.secondarySidebar`
491
+ (contextual navigation). Each missing region removes its track. `sidebarWidth`
492
+ and `secondarySidebarWidth` size their own expanded region, with the
493
+ shared shell width as fallback. `sidebarPresentation="rail"` selects dedicated
494
+ primary navigation geometry independently of full-sidebar icon collapse. Use SidebarNavigationRail from
495
+ layout/sidebar for area navigation with items, value/onValueChange and
496
+ renderLink; it preserves accessible labels/tooltips and defaults to
497
+ collapsible="none". Its default background surface and divider distinguish it
498
+ from the contextual canvas. The 48px default derives from a 32px action plus
499
+ two 8px insets; full-sidebar icon collapse remains 60px. These are private
500
+ recipes, not extra consumer knobs. SidebarRail remains the collapse affordance.
501
+ The rail also accepts header, beforeNavigation, afterNavigation and footer
502
+ nodes or render callbacks with named state. Header/footer are pinned;
503
+ before/after content scrolls with its navigation.
504
+
449
505
  The shell owns one PageViewport and framing. Give the root a constrained height
450
506
  (`h-svh min-h-0` for full-screen apps). Page owns width, page gutters and
451
507
  header/body rhythm, Card owns its insets, and Stack/Grid owns peer gaps. With
@@ -453,12 +509,49 @@ stacked/contained content, use Page gutter="none" to avoid repeating the shell's
453
509
  Container gutter. Metric card size changes copy/media scale, keeping the default
454
510
  surface inset in ready, loading and error states.
455
511
 
456
- Compose LayoutSidebarProvider around AppSidebar and SidebarTrigger. Use
457
- `adaptTo="container"` on the provider for embedded workspaces: it measures its
458
- own width and switches navigation to the same mobile drawer below 768px, even
459
- on a wide viewport. The default remains viewport-driven. Account/search/page
460
- actions remain application callbacks. Do not add another scroll viewport
461
- inside the page. Header menus retain the header theme through their portal host.
512
+ Keep the dual area rail docked on the left beside the full navigation panel,
513
+ and choose that panel's AppSidebar/LayoutSidebar `collapsible` independently
514
+ of its skin or AppLayout variant. `icon` minimizes it to a second compact
515
+ column, `offcanvas` hides it and leaves only the original rail, and `none`
516
+ keeps it expanded. Current examples default to `icon` and expose a preview
517
+ selector for the same modes; standalone navigation supports the same choice.
518
+ The primary area rail keeps its own `collapsible="none"` policy. One explicit
519
+ trigger controls the contextual panel; selecting an area opens it. At narrow widths the inline cluster pans a
520
+ minimum page canvas while its area rail stays pinned. It preserves the chosen
521
+ expansion state rather than silently minimizing. Do not repeat a contextual
522
+ group heading already supplied by its pinned
523
+ header. KPI peers use MetricGrid. Shared header/page/navigation recipes own the
524
+ spacing; Page remains the one page-padding owner.
525
+
526
+ Compose one LayoutSidebarProvider around the shell and its triggers. Shell slots
527
+ establish named scopes, so AppSidebar, LayoutSidebar and useLayoutSidebar() infer
528
+ their panel ID; ordinary compositions need no repeated IDs or nested provider.
529
+ Manual compositions can pass a panel ID explicitly. `SidebarTrigger panelId`
530
+ targets primary/secondary/aside; omission uses provider `navigationPanel`
531
+ (primary by default). That also selects the Ctrl/Command+B shortcut target;
532
+ keyboardShortcut changes the key or accepts false.
533
+
534
+ Desktop expansion uses openPanels/defaultOpenPanels/onOpenPanelsChange. Closed
535
+ icon panels leave a rail, offcanvas removes their track, and none remains visible.
536
+ Controlled openPanels wins over legacy primary open; otherwise open controls
537
+ primary and the provider owns other regions. defaultOpenPanels defines the
538
+ initial uncontrolled set; without it, defaultOpen keeps its primary meaning.
539
+ Primary changes notify onOpenChange and set changes notify onOpenPanelsChange.
540
+ The app accepts controlled proposals by updating the matching props; additional
541
+ persistence remains application-owned.
542
+
543
+ mobilePanel/onMobilePanelChange select one active undocked drawer, preserving
544
+ desktop preferences. Context presentation is docked/drawer; isMobile is its
545
+ drawer alias, including when a contextual panel undocks on a desktop viewport.
546
+ Other panel/drawer compositions retain default thresholds of 768/1024/1440px
547
+ for primary/secondary/aside against available shell width. The featured dual
548
+ cluster uses `mobileSidebarMode="inline"` to keep the rail and its adjacent
549
+ collapsible panel docked. Use adaptTo="container" on embedded providers to contain
550
+ their drawer and backdrop inside that provider. Essential
551
+ undocked regions need reachable targeted triggers. Account/search/page actions
552
+ remain application callbacks. Do not add another scroll viewport inside Page.
553
+ Use Header partials in shell slots to retain one header/inset owner. Header menus
554
+ retain the header theme through their portal host.
462
555
 
463
556
  Header forwards native attributes, handlers and refs. PageHeader supports
464
557
  textGap="normal" or "dense" without changing control or page insets. Header
@@ -471,12 +564,23 @@ The installed [app-shell recipe](../examples/app-layout.tsx) exports a copyable
471
564
  `WorkspaceLayout` that hosts route children directly. Put `AccountDetailPage` or
472
565
  another route Page inside it. `WorkspaceExamplePage` separately demonstrates a
473
566
  Workspace title, Create callback and narrow measure; replace that example when
474
- composing a real route. This recipe name is local to the copied file; the public
567
+ composing a real route. `WorkspaceRegionsLayout` accepts primaryNavigation and
568
+ sidebarPresentation="rail" for a static SidebarNavigationRail beside contextual
569
+ navigation; omitted primaryNavigation builds the alternative grouped sidebar.
570
+ It coordinates controlled named state under one provider. The app's area rail
571
+ can use useLayoutSidebar('secondary') to open context when an area is selected.
572
+ A defined
573
+ secondarySidebar replacement wins over contextualNavigationGroups; null removes
574
+ that region. Without a replacement, groups build the standard AppSidebar with
575
+ `contextualCollapsible?: AppSidebarProps['collapsible']`, defaulting to `icon`.
576
+ Pass `offcanvas` to hide it or `none` to retain expanded navigation; a supplied
577
+ secondarySidebar owns its own policy. These recipe names are
578
+ local to the copied file; the public
475
579
  `WorkspaceLayout` from `layout/workspace` is the record shell described below.
476
580
 
477
581
  PageViewport owns scrolling and adds no padding. Page defaults to `gutter="lg"`
478
582
  and `padding="lg"` (32px at shipped roots), so it owns inline/block space once.
479
- `narrow` selects centered `md` width; explicit `maxWidth` wins. Header copy
583
+ `narrow` selects centered `md` width (48rem); otherwise an aside selects `xl` (80rem), and a single column uses `lg` (64rem). Explicit `maxWidth` wins over both. Header copy
480
584
  defaults to dense; `textGap="normal"` is an explicit alternative. Do not assume
481
585
  an app shell supplies gutters because it supplies a viewport. Set `gutter="none"`
482
586
  only when an actual parent Container/surface supplies the inline inset, such as
@@ -484,24 +588,63 @@ StackedLayout's contained mode. Block padding remains independent.
484
588
  That contained measure uses the same large gutter as Page; ordinary Container
485
589
  defaults remain unchanged.
486
590
 
591
+
592
+ Page is the canonical route owner for new index/detail/edit screens. Its header
593
+ keeps title, description, back navigation, commands and tabs. Add content through
594
+ `header.slots.beforeTitle`, `titleSuffix`, `afterDescription` and `actions`.
595
+ Each accepts a React node or a callback receiving `{ renderLink, defaultContent }`.
596
+ Compose Badge for a title status and MetadataList for facts below the description;
597
+ there is no automatic metadata item shape or avatar column. Title, description and afterDescription stay in one tight left copy column;
598
+ actions occupy a separate right column aligned to the top. beforeTitle spans
599
+ above the columns, and tabs sit below. An actions renderer
600
+ can wrap or return `defaultContent` to retain the responsive command row; replacing
601
+ it owns its own command semantics. Legacy `slots.back`, `titleBadges`, `titleIcon`
602
+ and direct `actions` remain compatible. Direct toolbar, aside and lifecycle props compose at that
603
+ same boundary; explicit slots override matching direct regions. beforeHeader
604
+ precedes the header; afterHeader is the compatible toolbar fallback. Loading
605
+ precedes error, then empty, replacing only the main body while the header,
606
+ toolbar and aside remain mounted. Customize state strings or loading/error/empty
607
+ slots and wire onRetry. ResourceHeader/ResourceIndexShell/ResourceShowShell/
608
+ TabbedResourceShell retain legacy embedding behavior for migration.
609
+
487
610
  Select width from the task: a single focused resource/form can use `narrow`;
488
- a record with a supporting aside can retain the default `lg` measure and use
489
- TwoColumnLayout. A wide comparison/directory can deliberately use `maxWidth="full"`.
611
+ a record with supporting context uses Page `aside` and infers `xl` (80rem).
612
+ An explicit TwoColumnLayout inside Page should set `maxWidth="xl"`; it retains its own split contract. A wide comparison/directory can deliberately use `maxWidth="full"`.
490
613
  Setting full on every route defeats the resource measure. Do not remove Page's
491
614
  gutters to make its title touch the sidebar; align the header and body through
492
615
  the same Page. Density, container measure and page inset are separate choices.
493
616
  The [detail recipe](../examples/detail.tsx) includes `AccountDetailPage`: the
494
- default record measure, a status badge, route-level commands and section tabs in
617
+ narrow record measure, a status badge, route-level commands and section tabs in
495
618
  the header, and MetadataList facts in one framed Card, with no duplicated subject
496
619
  header or gutter.
497
620
 
621
+ Page's measure contains both header and body. On a mixed route with wide tables
622
+ and focused settings panels, keep Page's width stable across tabs. Constrain
623
+ only the focused panel with `Container maxWidth="md" gutter="none"`; Container
624
+ uses `gutter`, not a `padding` prop. An intentional responsive route width is
625
+ different from changing the header's width on every section selection.
626
+
498
627
  Compose HeaderUserMenu in topbar `slots.headerEnd` or a local toolbar, and
499
628
  SidebarNavigationUser in AppSidebar `slots.footer` when account access belongs
500
629
  in navigation. Use SidebarWorkspaceDropdown for workspace links, or add a
501
630
  custom control through `slots.headerEnd` alongside the logo. `headerStart` and
502
- `headerEnd` stay inside the padded, fixed header; `slots.header` replaces it all.
503
- `beforeNavigation` scrolls with the links. SidebarFooter owns its rule and inset.
504
- LayoutSidebarProvider defaults to compact row gaps; explicit density still wins.
631
+ `headerEnd` stay inside the padded, fixed header. The four header,
632
+ beforeNavigation, afterNavigation and footer slots accept nodes or callbacks
633
+ receiving `{ panelId, collapsed, presentation, isMobile, renderLink, defaultContent }`.
634
+ A legacy header node replaces the entire header; a callback supplies content
635
+ inside its library-owned inset. Both footer forms retain SidebarFooter's rule and
636
+ inset. Before/after navigation content scrolls with the links, so tall supporting
637
+ content belongs there. Ordered `{ id, label?, items }` navigation groups supplement
638
+ the Record form; use stable item IDs for branch state and live badges.
639
+ renderItemContent changes noninteractive row content while preserving the owning
640
+ link/disclosure/focus treatment; renderItem remains the full row escape hatch.
641
+ Current matching selects the most-specific href; render contexts expose ancestor
642
+ state separately from current active state. In icon mode, searchable
643
+ AppSidebar preserves its search band as an icon button that expands and focuses
644
+ the field without clearing the query. LayoutSidebarProvider defaults to
645
+ comfortable rows with a shared xs gap. Default keeps that gap with smaller
646
+ rows; compact uses a tighter 2xs gap. Caption and group spacing keep their own
647
+ larger roles. Explicit density still wins.
505
648
  WorkspaceLayout owns its own bounded content inset; do not add a padded Page
506
649
  inside it. WorkspaceRecordHeader and WorkspaceLocaleStrip align to the same
507
650
  large inline surface role. Record copy supports textGap with a dense default.
@@ -526,3 +669,5 @@ formatted-value and structure owners. Drawn rings and mini charts retain private
526
669
  geometry and semantic chart/status colors. Read the
527
670
  [workflow contracts](workflows.md#task-summaries-usage-and-inline-editing) and
528
671
  [typed workspace recipe](../examples/planning-usage-edit.tsx) for integration.
672
+
673
+ Explicit `type="display" inset="compact"` retains the small rich-surface tier (12px); collection compact insets use 8px. Display/default remains 24px. Chart tooltips and explicit small async previews retain their rich-content surface sizing.
@@ -0,0 +1,98 @@
1
+ # Critique rubric
2
+
3
+ Use to judge a rendered view: after building one, before handing it back, or when
4
+ reviewing someone else's screen. Judge screenshots and measurements, not source.
5
+ Valid API usage, passing checks and a correct data model do not make a view
6
+ clear.
7
+
8
+ Render the view at 390×844 and 1440×900, in light and dark, with the states the
9
+ task touches (opened menu or editor, error, accepted). Run the census below at
10
+ each width, then score every criterion.
11
+
12
+ ## Criteria
13
+
14
+ Score each criterion 0 (fails), 1 (partly) or 2 (passes). Criteria marked
15
+ **blocking** must score 2 before the work is handed back.
16
+
17
+ | # | Criterion | Question | How to measure |
18
+ | --- | --- | --- | --- |
19
+ | 1 | Five-second test (**blocking**) | From the first viewport alone, can you say what this is, what state it is in and what to do next? | Write the three answers from the screenshot before reading source. Compare them with the data brief's decision and facts |
20
+ | 2 | Focal point | Is there one dominant element per view and per region, and is it the one the brief chose? | Look at a reduced screenshot; census `focalCandidates` lists the largest text and its position. The focal element is in the first viewport at both widths |
21
+ | 3 | Hierarchy (**blocking**) | Does each region use at most three text levels, ordered title, value, supporting? | Census `regions[].textLevels`; above 4 needs a reason (a badge or a value primitive's secondary part). Compare `textStyles` outliers with their owners |
22
+ | 4 | Emphasis budget | One solid primary command per page or surface; tones only where status changes the action? | Census `primaryCommands`: 0 means the next action has no emphasis, 2 or more on one surface means competition. Read each toned badge and name the status it states |
23
+ | 5 | Data integrity (**blocking**) | Do figures, units, signs and totals match the records; zero and missing differ; nothing invented? | Check three figures against the data and recompute one total or delta |
24
+ | 6 | Encoding fit | Does each chart answer a question you can write in one sentence, and does each table compare rows on shared columns? | Write the question beside each chart. Name the compared column for each table |
25
+ | 7 | Grouping and rhythm | Do gaps grow from within a group to between groups to between sections, without filler or box-in-box? | Census `regions[].insideFrame` lists frames inside frames. Measure sibling gaps in the DOM; equal gaps at every level fail |
26
+ | 8 | Alignment | Do peer regions share content start edges, and do numbers right-align on one axis? | Census `regions[].left` and `inset`: peers differ by at most 1px. A leading badge adds its own padding to `inset`; check it in the image |
27
+ | 9 | Narrow reading order | At 390 wide, does the decision content come before evidence, with no sideways page scroll? | `overflowX` is 0. Scroll position of the focal element and the primary command. Tables may scroll inside their own region |
28
+ | 10 | Theme and states | Does dark keep the same hierarchy and contrast, and are loading, empty, error and accepted states designed? | Dark screenshots of the same viewports; trigger each state the view supports |
29
+
30
+ Hand back at 16 of 20 or more with every blocking criterion at 2. Otherwise fix
31
+ the lowest-scoring criterion at its owner and score again. After three rounds,
32
+ stop and report what remains and why.
33
+
34
+ ## Census
35
+
36
+ Run in the page through the browser tool's JavaScript evaluation. It reads
37
+ computed styles only and changes nothing.
38
+
39
+ ```js
40
+ (() => {
41
+ const shown = el => { const r = el.getBoundingClientRect(); const s = getComputedStyle(el); return r.width > 0 && r.height > 0 && s.visibility !== 'hidden' && s.opacity !== '0'; };
42
+ const hasText = el => [...el.childNodes].some(node => node.nodeType === 3 && node.textContent.trim());
43
+ const words = el => (el.getAttribute('aria-label') || el.textContent || '').trim().replace(/\s+/g, ' ').slice(0, 40);
44
+ const probe = document.body.appendChild(Object.assign(document.createElement('span'), { style: 'background: var(--primary)' }));
45
+ const primary = getComputedStyle(probe).backgroundColor; probe.remove();
46
+ const all = [...document.querySelectorAll('body *')].filter(shown);
47
+ const texts = all.filter(hasText);
48
+ const style = el => { const s = getComputedStyle(el); return `${s.fontSize} ${s.fontWeight}`; };
49
+ const isFrame = el => { const s = getComputedStyle(el); const r = el.getBoundingClientRect();
50
+ return ['Top', 'Right', 'Bottom', 'Left'].every(side => parseFloat(s[`border${side}Width`]) > 0) && r.height >= 64 && r.width >= 160
51
+ && !el.matches('input, textarea, select, button, [role="combobox"], [role="group"]') && !el.querySelector('h1'); };
52
+ const frames = all.filter(isFrame);
53
+ const owner = el => frames.filter(frame => frame !== el && frame.contains(el)).at(-1);
54
+ const regions = frames.map(frame => {
55
+ const own = texts.filter(el => frame.contains(el) && owner(el) === frame);
56
+ const first = own[0];
57
+ return { region: first ? words(first) : '(no text)', top: Math.round(frame.getBoundingClientRect().top + scrollY), left: Math.round(frame.getBoundingClientRect().left),
58
+ inset: first ? Math.round(first.getBoundingClientRect().left - frame.getBoundingClientRect().left) : null,
59
+ textLevels: new Set(own.map(style)).size, insideFrame: owner(frame) ? words(texts.find(el => owner(frame).contains(el)) || owner(frame)) : null };
60
+ }).sort((a, b) => a.top - b.top || a.left - b.left);
61
+ const counts = new Map(texts.map(style).map(key => [key, 0]));
62
+ for (const el of texts) counts.set(style(el), counts.get(style(el)) + 1);
63
+ return {
64
+ viewport: `${innerWidth}x${innerHeight}`,
65
+ overflowX: document.documentElement.scrollWidth - document.documentElement.clientWidth,
66
+ primaryCommands: all.filter(el => el.matches('button, a') && getComputedStyle(el).backgroundColor === primary).map(words),
67
+ focalCandidates: texts.map(el => ({ el, size: parseFloat(getComputedStyle(el).fontSize) })).sort((a, b) => b.size - a.size).slice(0, 3).map(({ el, size }) => `${size}px ${words(el)} @${Math.round(el.getBoundingClientRect().top + scrollY)}`),
68
+ textStyles: [...counts].sort((a, b) => b[1] - a[1]).map(([key, count]) => `${key} ×${count}`),
69
+ regions,
70
+ };
71
+ })()
72
+ ```
73
+
74
+ The census lists signals, not verdicts. The application shell's frame (any frame
75
+ containing the page `h1`) is excluded. Frames are bordered regions at least
76
+ 160×64px, so tables, cards and drawers appear. A surface without a border is not
77
+ listed: judge it in the image.
78
+
79
+ ## Write findings
80
+
81
+ One finding per problem, most severe first:
82
+
83
+ ```text
84
+ [criterion #] <where: route, region, width/theme>
85
+ Seen: <what the screenshot or census shows>
86
+ Why it matters: <the user's decision or reading it harms>
87
+ Fix: <owner and prop, or the content to remove or move>
88
+ ```
89
+
90
+ A finding names the owner that should change. "Looks cluttered" is not a
91
+ finding; "Purchased goods uses 9 text levels at 1440, so quantity, SKU and
92
+ location compete with the product name" is.
93
+
94
+ ## Report the score
95
+
96
+ State the score per criterion, with the measurement behind each 1 or 0, for
97
+ every width and theme inspected. Say which states were not rendered: an
98
+ unrendered state is unverified, not passed.