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
@@ -0,0 +1,271 @@
1
+ import { CreditCard, FileText, Send } from 'lucide-react';
2
+ import { Badge } from 'themelia-react-ui/base/badge';
3
+ import { Card } from 'themelia-react-ui/base/cards';
4
+ import { Alert, AlertDescription, AlertTitle } from 'themelia-react-ui/base/feedback';
5
+ import { Stack } from 'themelia-react-ui/base/structure';
6
+ import {
7
+ AddressCard,
8
+ AmountRow,
9
+ FulfillmentGroup,
10
+ InvoiceHeader,
11
+ InvoiceLineItems,
12
+ OrderCustomer,
13
+ OrderLineItem,
14
+ OrderSummary,
15
+ OrderTimeline,
16
+ OrderTransactions,
17
+ PaymentTimeline,
18
+ ShipmentTracking,
19
+ SummaryPanel,
20
+ type InvoiceColumn,
21
+ type InvoiceLineItem,
22
+ } from 'themelia-react-ui/blocks/commerce';
23
+ import { Page } from 'themelia-react-ui/layout/page';
24
+ import { Money, Number as NumberValue } from 'themelia-react-ui/primitives';
25
+ import { Text } from 'themelia-react-ui/typography';
26
+
27
+ /** Mock accepted order values; the app owns tax, shipping and price calculations. */
28
+ export function SoldProductWithSummary() {
29
+ return (
30
+ <Card title="Items and totals">
31
+ <Stack gap="xl">
32
+ <OrderLineItem
33
+ id="mug-sand-350"
34
+ title="Ceramic mug"
35
+ variantTitle="350 ml / Sand"
36
+ sku="MUG-350-SAND"
37
+ unitPrice="€18.00"
38
+ quantity={2}
39
+ total="€36.00"
40
+ />
41
+ <SummaryPanel>
42
+ <AmountRow label="Subtotal" amount="€36.00" />
43
+ <AmountRow label="Shipping" amount="€6.50" />
44
+ <AmountRow label="Tax" note="20%" amount="€8.50" />
45
+ <AmountRow label="Grand total" amount="€51.00" total rollup />
46
+ </SummaryPanel>
47
+ </Stack>
48
+ </Card>
49
+ );
50
+ }
51
+
52
+ /** Custom JSX values keep their roles: quiet regular breakdown, bold financial total. */
53
+ export function CustomServiceInvoice() {
54
+ // Custom columns replace the default four-column/mobile recipe with this two-column grid.
55
+ const serviceColumns: InvoiceColumn<InvoiceLineItem>[] = [
56
+ {
57
+ id: 'service',
58
+ header: 'Service',
59
+ width: 'minmax(0, 1fr)',
60
+ cell: (item) => (
61
+ <Stack gap="xs">
62
+ <Text type="inherit" className="wrap-anywhere">{item.description}</Text>
63
+ <Text tag="span" size="xs" type="secondary">
64
+ <NumberValue value={item.qty} /> × <Money amount={item.price} currency="EUR" />
65
+ </Text>
66
+ </Stack>
67
+ ),
68
+ },
69
+ {
70
+ id: 'line-total',
71
+ header: 'Line total',
72
+ width: 'max-content',
73
+ align: 'right',
74
+ cell: (item) => <Money type="inherit" amount={item.total} currency="EUR" weight="regular" />,
75
+ },
76
+ ];
77
+
78
+ return (
79
+ <InvoiceLineItems
80
+ items={[
81
+ { description: 'Design services', qty: 1, price: 335, total: 335 },
82
+ { description: 'Research workshop', qty: 2, price: 380, total: 760 },
83
+ { description: 'Implementation support', qty: 3, price: 425, total: 1275 },
84
+ ]}
85
+ columns={serviceColumns}
86
+ footerRows={[
87
+ { label: 'Subtotal', value: <Money type="inherit" amount={2370} currency="EUR" weight="regular" /> },
88
+ { label: 'VAT (20%)', value: <Money type="inherit" amount={474} currency="EUR" weight="regular" /> },
89
+ // emphasis controls the label/spacing; this React-node value owns its weight.
90
+ { label: 'Invoice total', value: <Money type="inherit" amount={2844} currency="EUR" weight="bold" />, emphasis: 'total' },
91
+ ]}
92
+ />
93
+ );
94
+ }
95
+
96
+ export interface OrderFulfillmentDetailProps {
97
+ /** Requests fulfillment of the open group; the app accepts and reloads the order. */
98
+ onFulfill: () => void;
99
+ onPrintPackingSlip: () => void;
100
+ /** Opens the app's refund workflow, for example in an ActionDrawer. */
101
+ onRefund: () => void;
102
+ }
103
+
104
+ /**
105
+ * One order route: Page owns the heading and commands, each subject is framed
106
+ * once, and the buyer and payment ledger sit in the aside. Mock accepted values.
107
+ */
108
+ export function OrderFulfillmentDetail({ onFulfill, onPrintPackingSlip, onRefund }: OrderFulfillmentDetailProps) {
109
+ return (
110
+ <Page
111
+ header={{
112
+ title: 'Order #1042',
113
+ slots: { titleSuffix: <><Badge tone="warning">Partially fulfilled</Badge><Badge tone="success">Paid</Badge></> },
114
+ primaryAction: { label: 'Fulfill items', onClick: onFulfill },
115
+ secondaryActions: [{ label: 'Print packing slip', onClick: onPrintPackingSlip }, { label: 'Refund', onClick: onRefund }],
116
+ }}
117
+ aside={(
118
+ <>
119
+ <OrderCustomer
120
+ surface="card"
121
+ name="Ava Chen"
122
+ email="ava.chen@example.com"
123
+ orderCount={4}
124
+ shippingAddress={{ name: 'Ava Chen', line1: '18 Ermou Street', city: 'Athens', postalCode: '105 63', country: 'Greece' }}
125
+ billingSameAsShipping
126
+ />
127
+ <OrderSummary
128
+ surface="card"
129
+ goods={[{ label: 'Subtotal', amount: '€104.00' }, { label: 'Shipping', amount: '€6.50' }]}
130
+ total={{ label: 'Total', amount: '€110.50' }}
131
+ payments={[{ label: 'Paid by card', amount: '€110.50' }]}
132
+ paymentStatus="paid"
133
+ />
134
+ <OrderTransactions
135
+ surface="card"
136
+ transactions={[
137
+ { id: 'auth', kind: 'authorization', status: 'success', amount: '€110.50', processedAt: '12 Oct, 09:14', method: 'Visa •••• 4242' },
138
+ { id: 'capture', kind: 'capture', status: 'success', amount: '€110.50', processedAt: '12 Oct, 09:15', reference: 'ch_3PqL2x' },
139
+ ]}
140
+ />
141
+ </>
142
+ )}
143
+ >
144
+ <Alert tone="warning">
145
+ <AlertTitle>Confirm the delivery address</AlertTitle>
146
+ <AlertDescription>The courier flagged the postal code; confirm it with the customer before the Athens parcel ships.</AlertDescription>
147
+ </Alert>
148
+ <FulfillmentGroup
149
+ status="unfulfilled"
150
+ location="Athens warehouse"
151
+ items={[{ id: 'shirt', title: 'Linen overshirt', variantTitle: 'Navy / M', sku: 'LIN-OVR-NVY-M', unitPrice: '€68.00', quantity: 1, total: '€68.00' }]}
152
+ actions={[{ id: 'fulfill', label: 'Fulfill items', onClick: onFulfill }, { id: 'slip', label: 'Print packing slip', onClick: onPrintPackingSlip }]}
153
+ />
154
+ <FulfillmentGroup
155
+ status="fulfilled"
156
+ location="Thessaloniki store"
157
+ items={[{ id: 'mug', title: 'Stoneware mug', variantTitle: 'Salt', sku: 'MUG-STW-SALT', unitPrice: '€18.00', quantity: 2, total: '€36.00' }]}
158
+ />
159
+ <ShipmentTracking
160
+ surface="card"
161
+ carrier="ACS Courier"
162
+ trackingNumber="7781 2290 114"
163
+ status="in_transit"
164
+ steps={[
165
+ { label: 'Label created', done: true, timestamp: '12 Oct, 11:02' },
166
+ { label: 'Picked up', done: true, timestamp: '12 Oct, 16:40' },
167
+ { label: 'Out for delivery', done: false },
168
+ { label: 'Delivered', done: false },
169
+ ]}
170
+ />
171
+ {/* OrderTimeline owns its title; the Card only frames it. */}
172
+ <Card>
173
+ <OrderTimeline
174
+ title="History"
175
+ events={[
176
+ { id: 'placed', title: 'Order placed', timestamp: '12 Oct, 09:14', status: 'completed' },
177
+ { id: 'shipped', title: 'Mugs shipped from Thessaloniki', timestamp: '12 Oct, 16:40', status: 'completed' },
178
+ { id: 'athens', title: 'Overshirt awaiting fulfillment', timestamp: 'Now', status: 'current' },
179
+ ]}
180
+ />
181
+ </Card>
182
+ </Page>
183
+ );
184
+ }
185
+
186
+ export interface ReceivableInvoiceDetailProps {
187
+ onRecordPayment: () => void;
188
+ onSendReminder: () => void;
189
+ onApplyCredit: () => void;
190
+ onExportPdf: () => void;
191
+ }
192
+
193
+ /**
194
+ * One invoice route: the document Card is the only frame around its header,
195
+ * flat line items and ledger; settlement and history are separate subjects.
196
+ * Long secondary labels stay in the More actions menu beside the primary command.
197
+ */
198
+ export function ReceivableInvoiceDetail({ onRecordPayment, onSendReminder, onApplyCredit, onExportPdf }: ReceivableInvoiceDetailProps) {
199
+ return (
200
+ <Page
201
+ header={{
202
+ title: 'INV-2026-118',
203
+ slots: { titleSuffix: <Badge tone="destructive">Overdue</Badge> },
204
+ primaryAction: { label: 'Record payment', onClick: onRecordPayment },
205
+ secondaryActions: [
206
+ { label: 'Send reminder', onClick: onSendReminder },
207
+ { label: 'Apply approved credit', onClick: onApplyCredit },
208
+ { label: 'Export PDF', onClick: onExportPdf },
209
+ ],
210
+ maxVisibleSecondaryActions: 1,
211
+ }}
212
+ aside={(
213
+ <>
214
+ <Card title="Settlement">
215
+ <SummaryPanel>
216
+ <AmountRow label="Invoice total" amount="€2,199.76" />
217
+ <AmountRow label="Bank transfer, 14 Oct" amount="€1,000.00" deduction />
218
+ <AmountRow label="Balance due" amount="€1,199.76" total rollup />
219
+ </SummaryPanel>
220
+ </Card>
221
+ <AddressCard
222
+ surface="card"
223
+ kind="billing"
224
+ name="Kalliope Studio IKE"
225
+ line1="42 Tsimiski Street"
226
+ city="Thessaloniki"
227
+ postalCode="546 23"
228
+ country="Greece"
229
+ />
230
+ </>
231
+ )}
232
+ >
233
+ <Card>
234
+ <Stack gap="2xl">
235
+ <InvoiceHeader
236
+ invoiceNumber="INV-2026-118"
237
+ status="overdue"
238
+ from={{ name: 'Ledgerline Accounting', location: 'Athens' }}
239
+ to={{ name: 'Kalliope Studio IKE', location: 'Thessaloniki' }}
240
+ issuedDate="12 Oct 2026"
241
+ dueDate="26 Oct 2026"
242
+ amount="€1,199.76"
243
+ />
244
+ <InvoiceLineItems
245
+ surface="flat"
246
+ currency="EUR"
247
+ items={[
248
+ { description: 'Quarterly bookkeeping retainer, July to September 2026', qty: 1, price: 1275, total: 1275 },
249
+ { description: 'Payroll processing (per employee)', qty: 14, price: 18.5, total: 259 },
250
+ { description: 'VAT return preparation', qty: 1, price: 240, total: 240 },
251
+ ]}
252
+ footerRows={[
253
+ { label: 'Subtotal', value: <Money type="inherit" amount={1774} currency="EUR" weight="regular" /> },
254
+ { label: 'VAT (24%)', value: <Money type="inherit" amount={425.76} currency="EUR" weight="regular" /> },
255
+ { label: 'Invoice total', value: <Money type="inherit" amount={2199.76} currency="EUR" weight="bold" />, emphasis: 'total' },
256
+ ]}
257
+ />
258
+ </Stack>
259
+ </Card>
260
+ <Card title="Payment history">
261
+ <PaymentTimeline
262
+ events={[
263
+ { label: 'Invoice issued', date: '12 Oct', icon: FileText, done: true },
264
+ { label: 'Partial payment received', date: '14 Oct', amount: '€1,000.00', icon: CreditCard, done: true },
265
+ { label: 'Reminder due', date: '28 Oct', icon: Send, done: false },
266
+ ]}
267
+ />
268
+ </Card>
269
+ </Page>
270
+ );
271
+ }
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from 'react';
2
+ import { Stack } from 'themelia-react-ui/base/structure';
3
+ import { InlineStat } from 'themelia-react-ui/blocks/data-display';
4
+ import { Money } from 'themelia-react-ui/primitives';
5
+
6
+ /** Card-free app content: its parent owns the subject title and any surface. */
7
+ export function AssessmentComparison({declared, assessed, currency, labels, actions}: {
8
+ declared: number;
9
+ assessed: number;
10
+ currency: string;
11
+ labels: {declared: string; assessed: string};
12
+ actions?: ReactNode;
13
+ }) {
14
+ return <Stack gap="xl" className="@container min-w-0">
15
+ <div className="grid min-w-0 grid-cols-1 gap-space-xl @lg:grid-cols-2">
16
+ <InlineStat layout="stacked" label={labels.declared} value={<Money amount={declared} currency={currency} />} />
17
+ <InlineStat layout="stacked" label={labels.assessed} value={<Money amount={assessed} currency={currency} />} />
18
+ </div>
19
+ {actions && <Stack direction="horizontal" justify="end" gap="md">{actions}</Stack>}
20
+ </Stack>;
21
+ }
@@ -1,4 +1,5 @@
1
1
  import { useState, type ReactNode } from 'react';
2
+ import { Badge } from 'themelia-react-ui/base/badge';
2
3
  import { Button } from 'themelia-react-ui/base/buttons';
3
4
  import { Card } from 'themelia-react-ui/base/cards';
4
5
  import { MetadataList } from 'themelia-react-ui/base/metadata-list';
@@ -21,7 +22,7 @@ export interface AccountDetailProps {
21
22
 
22
23
  /** One framed subject for a drawer or dashboard: one quick control, no page chrome. */
23
24
  export function AccountDetail({ account, onEdit }: AccountDetailProps) {
24
- return <Card title={account.name} headerPlacement="frame"
25
+ return <Card title={account.name}
25
26
  headerAction={<Button onClick={() => onEdit(account.id)}>Edit</Button>}>
26
27
  <AccountFacts account={account}/>
27
28
  </Card>;
@@ -52,9 +53,9 @@ export function AccountDetailPage({ account, onEdit, onBack, section, onSectionC
52
53
  { label: 'Send statement', onClick: () => onSendStatement(account.id) },
53
54
  { label: 'Delete account', destructive: true, onClick: () => { setError(undefined); deletion.show(); } },
54
55
  ];
55
- return <Page header={{
56
+ return <Page narrow header={{
56
57
  title: account.name, onBack, backLabel: 'Back to accounts',
57
- titleBadges: account.overdue ? [{ label: 'Overdue', tone: 'warning' }] : undefined,
58
+ slots: { titleSuffix: account.overdue ? <Badge tone="warning">Overdue</Badge> : null },
58
59
  primaryAction: { label: 'Edit account', onClick: () => onEdit(account.id) },
59
60
  secondaryActions: commands,
60
61
  tabs: {
@@ -68,7 +69,7 @@ export function AccountDetailPage({ account, onEdit, onBack, section, onSectionC
68
69
  },
69
70
  }}>
70
71
  {section === 'overview'
71
- ? <Card title="Contact and billing" headerPlacement="frame"><AccountFacts account={account}/></Card>
72
+ ? <Card title="Contact and billing"><AccountFacts account={account}/></Card>
72
73
  : children}
73
74
  <ConfirmDialog {...deletion.overlayProps} destructive
74
75
  title={`Delete ${account.name}?`} description="This permanently removes the account."
@@ -2,7 +2,7 @@ import { useRef, useState } from 'react';
2
2
  import { useForm } from 'react-hook-form';
3
3
  import { Button } from 'themelia-react-ui/base/buttons';
4
4
  import { Card } from 'themelia-react-ui/base/cards';
5
- import { ControlledFormField, DirtyStateBanner, ErrorSummary, FormActionsBar, SubmitStateButton } from 'themelia-react-ui/base/forms';
5
+ import { ControlledFormField, DirtyStateBanner, ErrorSummary, SubmitStateButton } from 'themelia-react-ui/base/forms';
6
6
  import { Stack } from 'themelia-react-ui/base/structure';
7
7
  import { Input } from 'themelia-react-ui/base/text-inputs';
8
8
  import { Text } from 'themelia-react-ui/typography';
@@ -43,10 +43,10 @@ export function AccountEdit({ initial, onSave, onCancel }: AccountEditProps) {
43
43
  onValueChange={value => field.onChange(value)} onBlur={field.onBlur} invalid={invalid} disabled={isSubmitting} />}
44
44
  </ControlledFormField>
45
45
  {saved && !isDirty && <Text role="status">Account saved.</Text>}
46
- <FormActionsBar>
46
+ <Stack direction="horizontal" wrap justify="end" gap="md">
47
47
  <Button type="button" disabled={isSubmitting} onClick={onCancel}>Cancel edit</Button>
48
48
  <SubmitStateButton dirty={isDirty} disableWhenPristine submitting={isSubmitting}>Save account</SubmitStateButton>
49
- </FormActionsBar>
49
+ </Stack>
50
50
  </Stack>
51
51
  </form>
52
52
  </Card>;
@@ -0,0 +1,38 @@
1
+ import type { ReactNode } from 'react';
2
+ import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from 'themelia-react-ui/base/accordion';
3
+ import { Badge } from 'themelia-react-ui/base/badge';
4
+ import { Stack } from 'themelia-react-ui/base/structure';
5
+ import { Heading, Text } from 'themelia-react-ui/typography';
6
+
7
+ export interface EditableSection {
8
+ id: string;
9
+ title: string;
10
+ content: ReactNode;
11
+ /** App-localized validation status, e.g. "2 errors"; omit when valid. */
12
+ validationMessage?: string;
13
+ }
14
+
15
+ /** Place inside the app's one form. Closing a panel retains the same field DOM. */
16
+ export function EditableSections({title, sections, openSections, onOpenSectionsChange}: {
17
+ title: string;
18
+ sections: EditableSection[];
19
+ openSections: string[];
20
+ onOpenSectionsChange: (values: string[]) => void;
21
+ }) {
22
+ return <Stack gap="xl">
23
+ <Heading tag="h2" size="base">{title}</Heading>
24
+ <Accordion multiple value={openSections} onValueChange={onOpenSectionsChange} aria-label={title}>
25
+ {sections.map(section => <AccordionItem key={section.id} value={section.id}>
26
+ <AccordionTrigger>
27
+ <Stack render={<span />} direction="horizontal" gap="md" className="min-w-0">
28
+ <Text tag="span" size="inherit" type="inherit" weight="medium">{section.title}</Text>
29
+ {section.validationMessage && <>{' '}<Badge tone="destructive">{section.validationMessage}</Badge></>}
30
+ </Stack>
31
+ </AccordionTrigger>
32
+ <AccordionContent keepMounted>
33
+ <Stack gap="xl">{section.content}</Stack>
34
+ </AccordionContent>
35
+ </AccordionItem>)}
36
+ </Accordion>
37
+ </Stack>;
38
+ }
@@ -1,5 +1,5 @@
1
1
  import { Button } from 'themelia-react-ui/base/buttons';
2
- import { Card } from 'themelia-react-ui/base/cards';
2
+ import { Page } from 'themelia-react-ui/layout/page';
3
3
  import { Stack } from 'themelia-react-ui/base/structure';
4
4
  import { DataTable, type DataTableProps } from 'themelia-react-ui/features/table';
5
5
  import { Email, Name } from 'themelia-react-ui/primitives';
@@ -23,14 +23,14 @@ export function AccountIndex({ state, onRetry, hrefFor, onNavigate }: AccountInd
23
23
  { accessorKey: 'name', header: 'Name', cell: ({ row }) => <Name value={row.original.name} /> },
24
24
  { accessorKey: 'email', header: 'Email', cell: ({ row }) => <Email value={row.original.email} /> },
25
25
  ];
26
- return <Card title="Accounts" surface="card">
26
+ return <Page header={{ title: 'Accounts' }}>
27
27
  {state.status === 'loading' ? <Text role="status">Loading accounts…</Text> :
28
28
  state.status === 'error' ? <Stack gap="md">
29
29
  <Text role="alert" type="error">{state.message}</Text>
30
30
  <Button onClick={onRetry}>Retry loading</Button>
31
- </Stack> : <DataTable columns={columns} data={state.records} surface="flat"
31
+ </Stack> : <DataTable columns={columns} data={state.records}
32
32
  getRowId={account => account.id} enablePagination={false} showFullscreenToggle={false}
33
33
  emptyStateMessage="No accounts yet." emptyStateAction={<Button onClick={onRetry}>Refresh accounts</Button>}
34
34
  rowActions={[{ id: 'open', label: 'Open account', onClick: account => onNavigate(hrefFor(account)) }]} />}
35
- </Card>;
35
+ </Page>;
36
36
  }
@@ -1,6 +1,42 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "examples": [
4
+ {
5
+ "file": "product-parts.tsx",
6
+ "exports": ["ProductOptionDefinitions", "ProductVariantManagement", "VariantComparison", "VariantInspectionAndEditor"],
7
+ "phase": "optional",
8
+ "optionalPeers": ["@tanstack/react-table", "react-hook-form"]
9
+ },
10
+ {
11
+ "file": "product-media.tsx",
12
+ "exports": ["LocalProductImages", "AttachedProductImages", "MediaOnlyProductOverview"],
13
+ "phase": "optional",
14
+ "optionalPeers": ["@dnd-kit/core", "@dnd-kit/sortable", "@dnd-kit/utilities", "@tanstack/react-table", "react-hook-form"]
15
+ },
16
+ {
17
+ "file": "token-domain-structure.tsx",
18
+ "exports": ["AllocationByLocation", "AllocationSubjectExample"],
19
+ "phase": "basic",
20
+ "optionalPeers": []
21
+ },
22
+ {
23
+ "file": "commerce-lines.tsx",
24
+ "exports": ["SoldProductWithSummary", "CustomServiceInvoice", "OrderFulfillmentDetail", "ReceivableInvoiceDetail"],
25
+ "phase": "optional",
26
+ "optionalPeers": ["react-day-picker", "react-hook-form", "sonner"]
27
+ },
28
+ {
29
+ "file": "editable-sections.tsx",
30
+ "exports": ["EditableSections"],
31
+ "phase": "basic",
32
+ "optionalPeers": []
33
+ },
34
+ {
35
+ "file": "custom-composition.tsx",
36
+ "exports": ["AssessmentComparison"],
37
+ "phase": "basic",
38
+ "optionalPeers": []
39
+ },
4
40
  {
5
41
  "file": "website.tsx",
6
42
  "exports": [
@@ -162,7 +198,8 @@
162
198
  {
163
199
  "file": "rhf-overlay-form.tsx",
164
200
  "exports": [
165
- "RHFOverlayForm"
201
+ "RHFOverlayForm",
202
+ "RHFDialogForm"
166
203
  ],
167
204
  "phase": "optional",
168
205
  "optionalPeers": [
@@ -0,0 +1,41 @@
1
+ import { FormField } from 'themelia-react-ui/base/forms';
2
+ import { MediaGallery } from 'themelia-react-ui/base/media-gallery';
3
+ import { MediaResourceGallery, type MediaLibraryAccessors } from 'themelia-react-ui/features/media-library';
4
+ import { ProductOverview } from 'themelia-react-ui/features/products';
5
+
6
+ /** New local files remain File[]; the caller owns transfer and persistence. */
7
+ export function LocalProductImages({ files, onFilesChange }: { files: File[]; onFilesChange: (files: File[]) => void }) {
8
+ return <FormField label="New product images" hint="The first image is the cover. Drag or use the keyboard to change order.">
9
+ <MediaGallery value={files} onValueChange={onFilesChange} accept="image/*" maxFiles={6} />
10
+ </FormField>;
11
+ }
12
+
13
+ export interface ProductAsset { key: string; filename: string; url: string; altText: string; }
14
+ const accessors: MediaLibraryAccessors<ProductAsset> = {
15
+ getId: item => item.key, getName: item => item.filename, getType: () => 'image',
16
+ getSrc: item => item.url, getAlt: item => item.altText,
17
+ };
18
+
19
+ /** Existing records stay records; callbacks propose resource attachment changes. */
20
+ export function AttachedProductImages({ assets, primaryId, onAssetsChange, onPrimaryChange, onAdd }: {
21
+ assets: ProductAsset[];
22
+ primaryId?: string;
23
+ onAssetsChange: (assets: ProductAsset[]) => void;
24
+ onPrimaryChange: (id: string | undefined) => void;
25
+ onAdd?: () => void;
26
+ }) {
27
+ return <MediaResourceGallery items={assets} accessors={accessors} title="Product media" layout="grid"
28
+ primaryId={primaryId} onPrimaryChange={id => onPrimaryChange(id)} onAdd={onAdd}
29
+ onReorder={(_ids, next) => onAssetsChange(next)} onRemove={id => {
30
+ const next = assets.filter(asset => asset.key !== id);
31
+ onAssetsChange(next);
32
+ if (id === (primaryId ?? assets[0]?.key)) onPrimaryChange(next[0]?.key);
33
+ }} />;
34
+ }
35
+
36
+ /** ProductOverview owns the subject; media enters through details.media, not a top-level media prop. */
37
+ export function MediaOnlyProductOverview({ assets }: { assets: ProductAsset[] }) {
38
+ return <ProductOverview details={{ title: 'Product media', description: false,
39
+ media: <MediaResourceGallery items={assets} accessors={accessors} readOnly layout="field" />,
40
+ }} />;
41
+ }
@@ -0,0 +1,81 @@
1
+ import { useState, type ReactNode } from 'react';
2
+ import { Alert, AlertDescription } from 'themelia-react-ui/base/feedback';
3
+ import { Stack } from 'themelia-react-ui/base/structure';
4
+ import {
5
+ ProductOptionsMatrix, ProductVariantDetails, ProductVariantEditor,
6
+ ProductVariantsBulkTable, ProductVariantsManager,
7
+ type ProductOptionEditDraft, type ProductOptionGroup,
8
+ type ProductVariantEditorValues, type ProductVariantRow,
9
+ } from 'themelia-react-ui/features/products';
10
+ import { Money } from 'themelia-react-ui/primitives';
11
+
12
+ const colors: ProductOptionGroup[] = [{
13
+ id: 'color', name: 'Color', values: [{ id: 'olive', label: 'Olive' }, { id: 'natural', label: 'Natural' }],
14
+ }];
15
+ const rows: ProductVariantRow[] = [
16
+ { id: 'weekender-olive', name: 'Olive', sku: 'WEEK-OLIVE', price: '€68.00', inventory: '7 available', status: 'Active', optionValueIds: { color: 'olive' } },
17
+ { id: 'weekender-natural', name: 'Natural', sku: 'WEEK-NATURAL', price: '€68.00', inventory: '12 available', status: 'Active', optionValueIds: { color: 'natural' } },
18
+ ];
19
+
20
+ /** Local definition-editing example. Variant reconciliation is a separate app rule. */
21
+ export function ProductOptionDefinitions() {
22
+ const [groups, setGroups] = useState(colors);
23
+ const [editingId, setEditingId] = useState<string | null>(null);
24
+ return <ProductOptionsMatrix optionGroups={groups} editingOptionId={editingId}
25
+ onEditingOptionIdChange={setEditingId} showVariantToggle={false}
26
+ onSaveEditingOption={(option, draft) => {
27
+ setGroups(current => current.map(group => group.id === option.id ? { ...group, name: draft.name, values: draft.values } : group));
28
+ }} />;
29
+ }
30
+
31
+ /** Callbacks apply app-owned accepted definitions/rows; the manager does not generate business data. */
32
+ export function ProductVariantManagement({ optionGroups, variants, onSaveOption, onInspectVariant }: {
33
+ optionGroups: ProductOptionGroup[];
34
+ variants: ProductVariantRow[];
35
+ onSaveOption: (option: ProductOptionGroup, draft: ProductOptionEditDraft) => void | Promise<void>;
36
+ onInspectVariant: (variant: ProductVariantRow) => void;
37
+ }) {
38
+ const [editingId, setEditingId] = useState<string | null>(null);
39
+ return <ProductVariantsManager optionGroups={optionGroups} variants={variants}
40
+ editingOptionId={editingId} onEditingOptionIdChange={setEditingId}
41
+ onSaveEditingOption={onSaveOption}
42
+ onSelectVariant={onInspectVariant} groupByOptionId={null}
43
+ visibleColumns={['variant', 'sku', 'price', 'inventory', 'status']} selectionMode="none" cellDisplay="text" />;
44
+ }
45
+
46
+ /** A comparison can use the table independently from option-definition editing. */
47
+ export function VariantComparison({ onInspectVariant }: { onInspectVariant: (variant: ProductVariantRow) => void }) {
48
+ return <ProductVariantsBulkTable variants={rows} optionGroups={colors} groupByOptionId={null}
49
+ visibleColumns={['variant', 'sku', 'price', 'inventory', 'status']} selectionMode="none"
50
+ cellDisplay="text" onSelectVariant={onInspectVariant} />;
51
+ }
52
+
53
+ /** The caller validates/persists and returns accepted fields; a failed save keeps the editor draft. */
54
+ export function VariantInspectionAndEditor({ id, initialValue, media, detailFooter, onSave }: {
55
+ id: string;
56
+ initialValue: ProductVariantEditorValues;
57
+ media?: ReactNode;
58
+ detailFooter?: ReactNode;
59
+ onSave: (draft: ProductVariantEditorValues) => Promise<ProductVariantEditorValues>;
60
+ }) {
61
+ const [accepted, setAccepted] = useState(initialValue);
62
+ const [draft, setDraft] = useState(initialValue);
63
+ const [editing, setEditing] = useState(false);
64
+ const [error, setError] = useState('');
65
+ return <Stack gap="2xl">
66
+ <ProductVariantDetails variant={{ id, name: accepted.name || 'Variant', sku: accepted.sku,
67
+ price: accepted.price ? <Money amount={Number(accepted.price)} currency="EUR" /> : undefined,
68
+ inventory: accepted.inventory, status: accepted.status,
69
+ options: Object.values(accepted.options ?? {}).filter((value): value is string => value !== undefined),
70
+ }} media={media} footerSlot={detailFooter} onEditVariant={() => {
71
+ setDraft(accepted); setError(''); setEditing(true);
72
+ }} />
73
+ {editing && <Stack gap="xl">
74
+ {error && <Alert tone="destructive"><AlertDescription>{error}</AlertDescription></Alert>}
75
+ <ProductVariantEditor value={draft} onValueChange={setDraft}
76
+ onSubmit={async value => { const saved = await onSave(value); setAccepted(saved); setEditing(false); }}
77
+ onError={() => setError('Variant could not be saved. Your draft is kept; retry Save variant.')}
78
+ onCancel={() => setEditing(false)} />
79
+ </Stack>}
80
+ </Stack>;
81
+ }
@@ -82,7 +82,7 @@ export function RHFEditPage({ initial, onSave, onCancel }: RHFEditPageProps) {
82
82
  form.setError('root.server', { type: 'transport', message: 'Saving failed. Your draft is kept; retry Save order.' });
83
83
  } finally { lock.current = false; }
84
84
  });
85
- return <Page
85
+ return <Page maxWidth="xl"
86
86
  render={<form id={`${id}-form`} onSubmit={submit} noValidate aria-busy={isSubmitting} />}
87
87
  header={{ title: 'Edit order', description: 'Update customer, fulfillment and line items.' }}>
88
88
  {isDirty && <DirtyStateBanner title="Unsaved changes" description="Save to commit this draft, or discard to restore the last saved version." />}