themelia-react-ui 2.0.3 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (648) hide show
  1. package/CHANGELOG.md +185 -0
  2. package/README.md +168 -36
  3. package/dist/{accordion-Cjb6sx0G.js → accordion-B9MHG0cT.js} +11 -11
  4. package/dist/accordion-B9MHG0cT.js.map +1 -0
  5. package/dist/action-menu-Dr8K-ghE.js +284 -0
  6. package/dist/action-menu-Dr8K-ghE.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-P-aVJisu.js} +42 -36
  8. package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
  9. package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-C58tQcBy.js} +387 -350
  10. package/dist/ai-artifact-C58tQcBy.js.map +1 -0
  11. package/dist/app-shell-B_IuNWOo.js +321 -0
  12. package/dist/app-shell-B_IuNWOo.js.map +1 -0
  13. package/dist/{attachment-BxDfL2mw.js → attachment-Dg_69lPS.js} +9 -9
  14. package/dist/{attachment-BxDfL2mw.js.map → attachment-Dg_69lPS.js.map} +1 -1
  15. package/dist/{auth-BGua8ouh.js → auth-DTkkshS8.js} +44 -47
  16. package/dist/auth-DTkkshS8.js.map +1 -0
  17. package/dist/{avatar-DAPlDvhJ.js → avatar-CeZaFmNH.js} +8 -8
  18. package/dist/avatar-CeZaFmNH.js.map +1 -0
  19. package/dist/{badge-HpFqoqSY.js → badge-xIiV_E7f.js} +5 -5
  20. package/dist/{badge-HpFqoqSY.js.map → badge-xIiV_E7f.js.map} +1 -1
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/batch-action-bar.js +1 -1
  27. package/dist/base/buttons.js +1 -1
  28. package/dist/base/cards.js +2 -2
  29. package/dist/base/carousel.js +3 -3
  30. package/dist/base/cascader.js +2 -372
  31. package/dist/base/chart.js +1 -1
  32. package/dist/base/choice-inputs.js +2 -2
  33. package/dist/base/code-block.js +1 -1
  34. package/dist/base/combobox.js +2 -2
  35. package/dist/base/command.js +1 -1
  36. package/dist/base/copyable.js +1 -1
  37. package/dist/base/date-pickers.js +2 -2
  38. package/dist/base/display.js +6 -6
  39. package/dist/base/feedback.js +3 -3
  40. package/dist/base/forms-numeric.js +1 -1
  41. package/dist/base/forms.js +3 -3
  42. package/dist/base/inline-edit.js +10 -10
  43. package/dist/base/item.js +1 -1
  44. package/dist/base/media-gallery.js +1 -1
  45. package/dist/base/metadata-list.js +1 -1
  46. package/dist/base/navigation.js +7 -7
  47. package/dist/base/popover-menu.js +1 -1
  48. package/dist/base/popover.js +1 -1
  49. package/dist/base/qr-code.js +1 -1
  50. package/dist/base/repeaters.js +12 -12
  51. package/dist/base/repeaters.js.map +1 -1
  52. package/dist/base/sheet.js +1 -1
  53. package/dist/base/sidebar.js +2 -2
  54. package/dist/base/signature-pad.js +7 -7
  55. package/dist/base/signature-pad.js.map +1 -1
  56. package/dist/base/skeleton.js +1 -1
  57. package/dist/base/spinner.js +4 -4
  58. package/dist/base/structure.js +1 -1
  59. package/dist/base/table.js +1 -1
  60. package/dist/base/text-inputs.js +2 -2
  61. package/dist/base/toaster.js +36 -36
  62. package/dist/base/toaster.js.map +1 -1
  63. package/dist/base/tree.js +1 -1
  64. package/dist/base/upload-queue.js +1 -1
  65. package/dist/base/upload.js +3 -3
  66. package/dist/base/value-inputs.js +1 -1
  67. package/dist/{batch-action-bar-DnUJ21NQ.js → batch-action-bar-Cb8cuvyy.js} +6 -6
  68. package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
  69. package/dist/blocks/admin.js +23 -23
  70. package/dist/blocks/admin.js.map +1 -1
  71. package/dist/blocks/ai.js +230 -216
  72. package/dist/blocks/ai.js.map +1 -1
  73. package/dist/blocks/analytics/usage-card.js +1 -1
  74. package/dist/blocks/analytics.js +326 -307
  75. package/dist/blocks/analytics.js.map +1 -1
  76. package/dist/blocks/collaboration.js +1 -1
  77. package/dist/blocks/commerce/receipt.js +1 -1
  78. package/dist/blocks/commerce.js +1247 -1169
  79. package/dist/blocks/commerce.js.map +1 -1
  80. package/dist/blocks/data-display.js +2 -2
  81. package/dist/blocks/onboarding.js +6 -6
  82. package/dist/blocks/onboarding.js.map +1 -1
  83. package/dist/blocks/planning.js +11 -11
  84. package/dist/blocks/timelines.js +1 -1
  85. package/dist/{breadcrumbs-C-oqs1sQ.js → breadcrumbs-J-K2kl4c.js} +6 -6
  86. package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
  87. package/dist/{button-DVzspB_G.js → button-S2Cubiiz.js} +3 -3
  88. package/dist/button-S2Cubiiz.js.map +1 -0
  89. package/dist/{buttons-DPZekJFu.js → buttons-BedGfygC.js} +16 -16
  90. package/dist/buttons-BedGfygC.js.map +1 -0
  91. package/dist/cards-rNX1M4Xn.js +69 -0
  92. package/dist/cards-rNX1M4Xn.js.map +1 -0
  93. package/dist/cascader-B1MiqkBq.js +439 -0
  94. package/dist/cascader-B1MiqkBq.js.map +1 -0
  95. package/dist/chart-Darg_0Kv.js +162 -0
  96. package/dist/chart-Darg_0Kv.js.map +1 -0
  97. package/dist/{checkbox-AWIhNhmo.js → checkbox-fflqmODR.js} +9 -5
  98. package/dist/checkbox-fflqmODR.js.map +1 -0
  99. package/dist/choice-inputs-zUgBZfE4.js +777 -0
  100. package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
  101. package/dist/{code-block-DeneBJR_.js → code-block-BzmM9Eig.js} +9 -9
  102. package/dist/code-block-BzmM9Eig.js.map +1 -0
  103. package/dist/{collapsible-C-_l4hpy.js → collapsible-BkAI_XD4.js} +5 -5
  104. package/dist/{collapsible-C-_l4hpy.js.map → collapsible-BkAI_XD4.js.map} +1 -1
  105. package/dist/{collection-content-By56pLog.js → collection-content-gDh1v6O4.js} +3 -3
  106. package/dist/{collection-content-By56pLog.js.map → collection-content-gDh1v6O4.js.map} +1 -1
  107. package/dist/combobox-BEx0vJgF.js +362 -0
  108. package/dist/combobox-BEx0vJgF.js.map +1 -0
  109. package/dist/{combobox-Dxo2fAYQ.js → combobox-BwzoXFSG.js} +254 -247
  110. package/dist/combobox-BwzoXFSG.js.map +1 -0
  111. package/dist/{command-C25VMRII.js → command-CrlPIL6m.js} +12 -12
  112. package/dist/command-CrlPIL6m.js.map +1 -0
  113. package/dist/{comments-DD0DUPwJ.js → comments-Dmpp0YIc.js} +380 -379
  114. package/dist/comments-Dmpp0YIc.js.map +1 -0
  115. package/dist/components/base/action-menu/action-menu.d.ts +9 -1
  116. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  117. package/dist/components/base/cards/card.recipes.d.ts +16 -7
  118. package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
  119. package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
  120. package/dist/components/base/cards/smart-card.types.d.ts +11 -7
  121. package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
  122. package/dist/components/base/chart/chart.d.ts +6 -1
  123. package/dist/components/base/choice-inputs/checkbox.d.ts +7 -2
  124. package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
  125. package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
  126. package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
  127. package/dist/components/base/combobox/index.d.ts +4 -2
  128. package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
  129. package/dist/components/base/feedback/alert.d.ts +1 -1
  130. package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
  131. package/dist/components/base/forms/form-field.d.ts +5 -3
  132. package/dist/components/base/forms/form-sizing.d.ts +7 -7
  133. package/dist/components/base/forms/index.d.ts +1 -0
  134. package/dist/components/base/forms/server-errors.d.ts +16 -0
  135. package/dist/components/base/forms/workflow.d.ts +11 -2
  136. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
  137. package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
  138. package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
  139. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
  140. package/dist/components/base/navigation/page-header/page-header.d.ts +13 -4
  141. package/dist/components/base/popover/popover.d.ts +3 -3
  142. package/dist/components/base/popover/popover.recipes.d.ts +10 -6
  143. package/dist/components/base/sheet/sheet.d.ts +2 -0
  144. package/dist/components/base/sidebar/index.d.ts +1 -1
  145. package/dist/components/base/sidebar/sidebar.d.ts +27 -5
  146. package/dist/components/base/structure/composition.recipes.d.ts +17 -0
  147. package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
  148. package/dist/components/base/text-inputs/input.d.ts +4 -2
  149. package/dist/components/base/text-inputs/textarea.d.ts +4 -2
  150. package/dist/components/base/toaster/index.d.ts +1 -0
  151. package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
  152. package/dist/components/base/value-inputs/slider.d.ts +5 -1
  153. package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
  154. package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
  155. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
  156. package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
  157. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  158. package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
  159. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
  160. package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
  161. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
  162. package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
  163. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
  164. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
  165. package/dist/components/blocks/commerce/index.d.ts +7 -6
  166. package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
  167. package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
  168. package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
  169. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  170. package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
  171. package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
  172. package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
  173. package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
  174. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
  175. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
  176. package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
  177. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
  178. package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
  179. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  180. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
  181. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  182. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
  183. package/dist/components/features/activities/activities.types.d.ts +8 -2
  184. package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
  185. package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
  186. package/dist/components/features/event-calendar/colors.d.ts +2 -2
  187. package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
  188. package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
  189. package/dist/components/features/filters/filters.strings.d.ts +4 -0
  190. package/dist/components/features/filters/filters.types.d.ts +3 -0
  191. package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
  192. package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
  193. package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
  194. package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
  195. package/dist/components/features/filters/utils/filter-utils.d.ts +21 -3
  196. package/dist/components/features/global-search/global-search.types.d.ts +2 -0
  197. package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
  198. package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
  199. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  200. package/dist/components/features/media-library/media-library.types.d.ts +14 -4
  201. package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
  202. package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
  203. package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
  204. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  205. package/dist/components/features/products/products.strings.d.ts +9 -1
  206. package/dist/components/features/products/products.types.d.ts +43 -6
  207. package/dist/components/features/resource/resource.d.ts +5 -1
  208. package/dist/components/features/resource/resource.types.d.ts +12 -1
  209. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
  210. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
  211. package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
  212. package/dist/components/features/table/table.types.d.ts +1 -1
  213. package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
  214. package/dist/components/layout/app-shell/index.d.ts +1 -1
  215. package/dist/components/layout/app-shell/shell-regions.d.ts +27 -0
  216. package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
  217. package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
  218. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  219. package/dist/components/layout/containers/two-column-layout.d.ts +2 -0
  220. package/dist/components/layout/header/header.recipes.d.ts +6 -0
  221. package/dist/components/layout/header/header.types.d.ts +6 -6
  222. package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
  223. package/dist/components/layout/page/index.d.ts +2 -1
  224. package/dist/components/layout/page/page.d.ts +1 -0
  225. package/dist/components/layout/page/page.strings.d.ts +11 -0
  226. package/dist/components/layout/page/page.types.d.ts +69 -17
  227. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  228. package/dist/components/layout/settings/settings.d.ts +9 -2
  229. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  230. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
  231. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
  232. package/dist/components/layout/sidebar/index.d.ts +2 -1
  233. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +36 -0
  234. package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
  235. package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -10
  236. package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
  237. package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
  238. package/dist/components/typography/text.styles.d.ts +26 -1
  239. package/dist/components/ui/alert-dialog.d.ts +2 -2
  240. package/dist/components/ui/combobox.d.ts +1 -1
  241. package/dist/components/ui/dialog.d.ts +2 -2
  242. package/dist/components/ui/overlay-layer.d.ts +18 -0
  243. package/dist/components/ui/sheet.d.ts +5 -1
  244. package/dist/components/ui/sidebar-state.d.ts +82 -0
  245. package/dist/components/ui/sidebar.d.ts +5 -17
  246. package/dist/composition.recipes-COdiFhxB.js +19 -0
  247. package/dist/composition.recipes-COdiFhxB.js.map +1 -0
  248. package/dist/containers-CIxwbZt5.js +112 -0
  249. package/dist/containers-CIxwbZt5.js.map +1 -0
  250. package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
  251. package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
  252. package/dist/{copyable-ClBuk_UK.js → copyable-DIznBqiT.js} +7 -7
  253. package/dist/{copyable-ClBuk_UK.js.map → copyable-DIznBqiT.js.map} +1 -1
  254. package/dist/{data-display-DT_khPl_.js → data-display-BdgCAw8T.js} +277 -285
  255. package/dist/data-display-BdgCAw8T.js.map +1 -0
  256. package/dist/{date-DCrsDTZc.js → date-Cq8ioE4o.js} +5 -5
  257. package/dist/{date-DCrsDTZc.js.map → date-Cq8ioE4o.js.map} +1 -1
  258. package/dist/{date-picker-B2K3ucWn.js → date-picker-RlIzKom_.js} +501 -480
  259. package/dist/date-picker-RlIzKom_.js.map +1 -0
  260. package/dist/date-pickers-DY-CpXS1.js +179 -0
  261. package/dist/date-pickers-DY-CpXS1.js.map +1 -0
  262. package/dist/{display-hAc1HjpI.js → display-KsZLw9Ov.js} +9 -9
  263. package/dist/{display-hAc1HjpI.js.map → display-KsZLw9Ov.js.map} +1 -1
  264. package/dist/dropdown-menu-CLs8Lihj.js +194 -0
  265. package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
  266. package/dist/features/activities.js +302 -253
  267. package/dist/features/activities.js.map +1 -1
  268. package/dist/features/ai-chat.js +15 -14
  269. package/dist/features/ai-chat.js.map +1 -1
  270. package/dist/features/appointment-calendar.js +222 -220
  271. package/dist/features/appointment-calendar.js.map +1 -1
  272. package/dist/features/async-preview.js +11 -10
  273. package/dist/features/async-preview.js.map +1 -1
  274. package/dist/features/combobox.js +1 -1
  275. package/dist/features/comments.js +1 -1
  276. package/dist/features/data-view.js +13 -13
  277. package/dist/features/data-view.js.map +1 -1
  278. package/dist/features/email-composer.js +249 -249
  279. package/dist/features/email-composer.js.map +1 -1
  280. package/dist/features/event-calendar.js +264 -269
  281. package/dist/features/event-calendar.js.map +1 -1
  282. package/dist/features/filters.js +1 -1
  283. package/dist/features/global-search.js +167 -138
  284. package/dist/features/global-search.js.map +1 -1
  285. package/dist/features/kanban.js +6 -7
  286. package/dist/features/kanban.js.map +1 -1
  287. package/dist/features/map.js +269 -260
  288. package/dist/features/map.js.map +1 -1
  289. package/dist/features/media-library.js +827 -777
  290. package/dist/features/media-library.js.map +1 -1
  291. package/dist/features/mentions.js +1 -1
  292. package/dist/features/overlays.js +1 -1
  293. package/dist/features/products.js +1246 -1169
  294. package/dist/features/products.js.map +1 -1
  295. package/dist/features/questionnaire.js +13 -13
  296. package/dist/features/questionnaire.js.map +1 -1
  297. package/dist/features/resource-assignment.js +8 -8
  298. package/dist/features/resource.js +127 -123
  299. package/dist/features/resource.js.map +1 -1
  300. package/dist/features/rich-text-editor.js +2 -2
  301. package/dist/features/schema-form.js +254 -253
  302. package/dist/features/schema-form.js.map +1 -1
  303. package/dist/features/suggestions.js +3 -3
  304. package/dist/features/sync.js +3 -3
  305. package/dist/features/table.js +1 -1
  306. package/dist/features/theme-tweaker.js +95 -96
  307. package/dist/features/theme-tweaker.js.map +1 -1
  308. package/dist/{feedback-BYIhtitP.js → feedback-Dm4izqFn.js} +81 -80
  309. package/dist/feedback-Dm4izqFn.js.map +1 -0
  310. package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
  311. package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
  312. package/dist/{filters-DJVAveHA.js → filters-DzgSJpMK.js} +693 -645
  313. package/dist/filters-DzgSJpMK.js.map +1 -0
  314. package/dist/{form-field-CwH9y77i.js → form-field-BriWAXyg.js} +14 -8
  315. package/dist/form-field-BriWAXyg.js.map +1 -0
  316. package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-Bs2qFUeE.js} +4 -4
  317. package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
  318. package/dist/forms-C0RGnJTe.js +216 -0
  319. package/dist/forms-C0RGnJTe.js.map +1 -0
  320. package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-DIhghX1Q.js} +295 -291
  321. package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
  322. package/dist/{header-BSfIEWbI.js → header-DMMxG__r.js} +67 -63
  323. package/dist/header-DMMxG__r.js.map +1 -0
  324. package/dist/header.recipes-BigdJjw1.js +6 -0
  325. package/dist/header.recipes-BigdJjw1.js.map +1 -0
  326. package/dist/hooks/useFormErrors.d.ts +1 -1
  327. package/dist/{hooks-ClH9thn4.js → hooks-DB6CJ4MR.js} +26 -14
  328. package/dist/hooks-DB6CJ4MR.js.map +1 -0
  329. package/dist/{icon-badge-DYKIwvOV.js → icon-badge-DZF-YjQp.js} +4 -4
  330. package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
  331. package/dist/index.js +4 -5
  332. package/dist/input-CvyDQlY7.js +289 -0
  333. package/dist/input-CvyDQlY7.js.map +1 -0
  334. package/dist/input-DMBwAZmr.js +21 -0
  335. package/dist/input-DMBwAZmr.js.map +1 -0
  336. package/dist/item-DjCcM18E.js +277 -0
  337. package/dist/item-DjCcM18E.js.map +1 -0
  338. package/dist/layout/app-shell.js +1 -1
  339. package/dist/layout/auth.js +1 -1
  340. package/dist/layout/containers.js +1 -1
  341. package/dist/layout/header.js +1 -1
  342. package/dist/layout/hooks.js +1 -1
  343. package/dist/layout/navigation.js +1 -1
  344. package/dist/layout/page.js +2 -2
  345. package/dist/layout/settings.js +1 -1
  346. package/dist/layout/sidebar.js +3 -3
  347. package/dist/layout/workspace.js +1 -1
  348. package/dist/layout.js +11 -11
  349. package/dist/lib/affordance-geometry.generated.d.ts +41 -35
  350. package/dist/lib/control-group-recipes.d.ts +5 -5
  351. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  352. package/dist/lib/motion-recipes.d.ts +3 -0
  353. package/dist/lib/navigation-row-recipes.d.ts +7 -7
  354. package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
  355. package/dist/lib/portal-recipes.d.ts +3 -0
  356. package/dist/lib/token-merge.generated.d.ts +13 -10
  357. package/dist/lib/ui-provider/types.d.ts +1 -1
  358. package/dist/lib/utils.js +1 -1
  359. package/dist/map-demo-tile.svg +1 -1
  360. package/dist/{media-gallery-3zIVLMWH.js → media-gallery-C-vChPmE.js} +6 -6
  361. package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-C-vChPmE.js.map} +1 -1
  362. package/dist/{mentions-CGlEJ15c.js → mentions-0_4nWuI-.js} +10 -10
  363. package/dist/{mentions-CGlEJ15c.js.map → mentions-0_4nWuI-.js.map} +1 -1
  364. package/dist/{message-DZ_ruyUV.js → message-g8p7eVtN.js} +7 -7
  365. package/dist/message-g8p7eVtN.js.map +1 -0
  366. package/dist/metadata-list-C3MkU-Om.js +443 -0
  367. package/dist/metadata-list-C3MkU-Om.js.map +1 -0
  368. package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
  369. package/dist/motion-recipes-DitYv6P2.js.map +1 -0
  370. package/dist/navigation-C90-oQFq.js +255 -0
  371. package/dist/navigation-C90-oQFq.js.map +1 -0
  372. package/dist/{navigation-BzhHI3lo.js → navigation-DaRjthVk.js} +101 -82
  373. package/dist/navigation-DaRjthVk.js.map +1 -0
  374. package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
  375. package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
  376. package/dist/{number-DbV1Dija.js → number-CRU3kGuk.js} +5 -5
  377. package/dist/{number-DbV1Dija.js.map → number-CRU3kGuk.js.map} +1 -1
  378. package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
  379. package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
  380. package/dist/overlays-BSgCtM2v.js +1013 -0
  381. package/dist/overlays-BSgCtM2v.js.map +1 -0
  382. package/dist/page-DUUKDAjo.js +331 -0
  383. package/dist/page-DUUKDAjo.js.map +1 -0
  384. package/dist/page-header-commands-7P3sfE9u.js +193 -0
  385. package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
  386. package/dist/{pagination-BL25hu2s.js → pagination-CgCjElfu.js} +7 -7
  387. package/dist/{pagination-BL25hu2s.js.map → pagination-CgCjElfu.js.map} +1 -1
  388. package/dist/popover-B85RenIl.js +201 -0
  389. package/dist/popover-B85RenIl.js.map +1 -0
  390. package/dist/{popover-menu-Cn9rUkdc.js → popover-menu-DlnQ2zlR.js} +7 -7
  391. package/dist/{popover-menu-Cn9rUkdc.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
  392. package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
  393. package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
  394. package/dist/portal-recipes-BpsV_iRw.js +9 -0
  395. package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
  396. package/dist/{primitives-BFK08r9M.js → primitives-ByWgGUgt.js} +6 -6
  397. package/dist/{primitives-BFK08r9M.js.map → primitives-ByWgGUgt.js.map} +1 -1
  398. package/dist/primitives.js +4 -4
  399. package/dist/{progress-B1VnCT0K.js → progress-BJhQP9WX.js} +9 -9
  400. package/dist/{progress-B1VnCT0K.js.map → progress-BJhQP9WX.js.map} +1 -1
  401. package/dist/{receipt-BVSOH3Xo.js → receipt-tOc7B3hw.js} +7 -7
  402. package/dist/receipt-tOc7B3hw.js.map +1 -0
  403. package/dist/{rich-text-GOUyKQ-s.js → rich-text-Dth5E882.js} +4 -4
  404. package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-Dth5E882.js.map} +1 -1
  405. package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-C1fOjBTd.js} +429 -430
  406. package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
  407. package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-laT3tpBT.js} +33 -29
  408. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
  409. package/dist/{scroll-area-DcI-M1UT.js → scroll-area-B0dB2cBi.js} +2 -2
  410. package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
  411. package/dist/{separator-Bom7NsGO.js → separator-Bb17I4pu.js} +2 -2
  412. package/dist/{separator-Bom7NsGO.js.map → separator-Bb17I4pu.js.map} +1 -1
  413. package/dist/{separator-BDV-Y648.js → separator-Ct_WSWTJ.js} +3 -3
  414. package/dist/{separator-BDV-Y648.js.map → separator-Ct_WSWTJ.js.map} +1 -1
  415. package/dist/services/actions.js +1 -1
  416. package/dist/settings-Bar5wiSo.js +167 -0
  417. package/dist/settings-Bar5wiSo.js.map +1 -0
  418. package/dist/sheet-BGPERY55.js +250 -0
  419. package/dist/sheet-BGPERY55.js.map +1 -0
  420. package/dist/sidebar-D-JYMMbY.js +686 -0
  421. package/dist/sidebar-D-JYMMbY.js.map +1 -0
  422. package/dist/sidebar-f9gRWXIR.js +1001 -0
  423. package/dist/sidebar-f9gRWXIR.js.map +1 -0
  424. package/dist/skeleton-BapcJd9C.js +265 -0
  425. package/dist/skeleton-BapcJd9C.js.map +1 -0
  426. package/dist/smart-card-CW0hjetE.js +617 -0
  427. package/dist/smart-card-CW0hjetE.js.map +1 -0
  428. package/dist/{structure-BmisBK-3.js → structure-DuxKl954.js} +3 -3
  429. package/dist/{structure-BmisBK-3.js.map → structure-DuxKl954.js.map} +1 -1
  430. package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
  431. package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
  432. package/dist/style.css +1 -1
  433. package/dist/{table-DsfzoUia.js → table-B4TE7iOV.js} +3 -3
  434. package/dist/{table-DsfzoUia.js.map → table-B4TE7iOV.js.map} +1 -1
  435. package/dist/{table-BweFy_P9.js → table-CFOWY9pQ.js} +394 -388
  436. package/dist/table-CFOWY9pQ.js.map +1 -0
  437. package/dist/{tabs-CDocW5D1.js → tabs-e7ko9S2o.js} +11 -11
  438. package/dist/tabs-e7ko9S2o.js.map +1 -0
  439. package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-B1culiSK.js} +107 -104
  440. package/dist/text-inputs-B1culiSK.js.map +1 -0
  441. package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
  442. package/dist/text.styles-B64My8RZ.js.map +1 -0
  443. package/dist/theme.css +192 -149
  444. package/dist/{timelines-CwM_9IhD.js → timelines-D3Sl9ueq.js} +13 -12
  445. package/dist/timelines-D3Sl9ueq.js.map +1 -0
  446. package/dist/tooltip-8wz5S_Zr.js +113 -0
  447. package/dist/tooltip-8wz5S_Zr.js.map +1 -0
  448. package/dist/{tree-WnKQzwbq.js → tree-CzUJHnFs.js} +9 -9
  449. package/dist/{tree-WnKQzwbq.js.map → tree-CzUJHnFs.js.map} +1 -1
  450. package/dist/typography/rich-text.js +1 -1
  451. package/dist/typography-BQnine1k.js +117 -0
  452. package/dist/typography-BQnine1k.js.map +1 -0
  453. package/dist/typography.js +1 -1
  454. package/dist/ui-provider-C-74NVLc.js +178 -0
  455. package/dist/ui-provider-C-74NVLc.js.map +1 -0
  456. package/dist/ui-provider.js +2 -3
  457. package/dist/{upload-CXyxmQBP.js → upload-BOW6U2tI.js} +25 -24
  458. package/dist/upload-BOW6U2tI.js.map +1 -0
  459. package/dist/{upload-queue-Boscubn9.js → upload-queue-qUXn1ykN.js} +16 -14
  460. package/dist/upload-queue-qUXn1ykN.js.map +1 -0
  461. package/dist/{usage-card-BhO5eqkX.js → usage-card-BeSLY0i0.js} +145 -137
  462. package/dist/usage-card-BeSLY0i0.js.map +1 -0
  463. package/dist/{utils-BRhFDwuU.js → utils-B6kKb8jB.js} +303 -144
  464. package/dist/utils-B6kKb8jB.js.map +1 -0
  465. package/dist/value-inputs-skdVB2zh.js +980 -0
  466. package/dist/value-inputs-skdVB2zh.js.map +1 -0
  467. package/dist/{value-typography-BP8OG6h5.js → value-typography-uAmWUAL1.js} +2 -2
  468. package/dist/{value-typography-BP8OG6h5.js.map → value-typography-uAmWUAL1.js.map} +1 -1
  469. package/dist/workspace-DHeHv0qw.js +411 -0
  470. package/dist/workspace-DHeHv0qw.js.map +1 -0
  471. package/docs/consumer-skill/SKILL.md +15 -129
  472. package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
  473. package/docs/consumer-skill/examples/app-layout.tsx +74 -13
  474. package/docs/consumer-skill/examples/authentication.tsx +77 -0
  475. package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
  476. package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
  477. package/docs/consumer-skill/examples/detail.tsx +5 -4
  478. package/docs/consumer-skill/examples/edit.tsx +30 -38
  479. package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
  480. package/docs/consumer-skill/examples/index-table.tsx +4 -4
  481. package/docs/consumer-skill/examples/manifest.json +88 -1
  482. package/docs/consumer-skill/examples/product-media.tsx +41 -0
  483. package/docs/consumer-skill/examples/product-parts.tsx +81 -0
  484. package/docs/consumer-skill/examples/rhf-bindings.tsx +86 -0
  485. package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
  486. package/docs/consumer-skill/examples/rhf-overlay-form.tsx +105 -0
  487. package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
  488. package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
  489. package/docs/consumer-skill/references/agents-md.md +23 -11
  490. package/docs/consumer-skill/references/analytics.md +18 -1
  491. package/docs/consumer-skill/references/authentication.md +42 -0
  492. package/docs/consumer-skill/references/commerce-composition.md +97 -0
  493. package/docs/consumer-skill/references/component-contracts.json +325201 -0
  494. package/docs/consumer-skill/references/composition-mapping.md +106 -0
  495. package/docs/consumer-skill/references/composition.md +198 -46
  496. package/docs/consumer-skill/references/critique-rubric.md +98 -0
  497. package/docs/consumer-skill/references/custom-composition.md +261 -0
  498. package/docs/consumer-skill/references/data-reading.md +79 -0
  499. package/docs/consumer-skill/references/design-contract.md +43 -9
  500. package/docs/consumer-skill/references/discovery.md +109 -8
  501. package/docs/consumer-skill/references/domain-structures.md +124 -0
  502. package/docs/consumer-skill/references/installation.md +51 -36
  503. package/docs/consumer-skill/references/integration.md +41 -2
  504. package/docs/consumer-skill/references/product-composition.md +94 -0
  505. package/docs/consumer-skill/references/public-api.json +4390 -475
  506. package/docs/consumer-skill/references/review.md +47 -5
  507. package/docs/consumer-skill/references/rhf-workflows.md +93 -0
  508. package/docs/consumer-skill/references/screen-archetypes.md +34 -0
  509. package/docs/consumer-skill/references/screen-decisions.md +126 -0
  510. package/docs/consumer-skill/references/theming.md +25 -27
  511. package/docs/consumer-skill/references/tokens.json +20 -11
  512. package/docs/consumer-skill/references/view-craft.md +153 -0
  513. package/docs/consumer-skill/references/view-spec.md +73 -0
  514. package/docs/consumer-skill/references/workflows.md +9 -2
  515. package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
  516. package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
  517. package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
  518. package/docs/consumer-skill/scripts/composition.mjs +254 -0
  519. package/docs/consumer-skill/scripts/discovery.mjs +96 -10
  520. package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
  521. package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
  522. package/docs/consumer-skill/scripts/inspection.mjs +193 -0
  523. package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
  524. package/docs/consumer-skill/scripts/setup-skills.mjs +111 -0
  525. package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
  526. package/docs/consumer-skills/themelia-components/SKILL.md +31 -0
  527. package/docs/consumer-skills/themelia-composition/SKILL.md +34 -0
  528. package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
  529. package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
  530. package/docs/consumer-skills/themelia-foundation/SKILL.md +15 -0
  531. package/docs/consumer-skills/themelia-tokenization/SKILL.md +42 -0
  532. package/package.json +4 -2
  533. package/templates/README.md +39 -0
  534. package/templates/admin-shell-template.tsx +382 -0
  535. package/templates/analytics-operations-template.tsx +376 -0
  536. package/templates/customers-template.tsx +509 -0
  537. package/templates/index.ts +29 -0
  538. package/templates/orders-template.tsx +1102 -0
  539. package/templates/products-template.tsx +834 -0
  540. package/templates/user-permissions-template.tsx +450 -0
  541. package/dist/accordion-Cjb6sx0G.js.map +0 -1
  542. package/dist/action-menu-CllU52Mm.js +0 -280
  543. package/dist/action-menu-CllU52Mm.js.map +0 -1
  544. package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
  545. package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
  546. package/dist/app-shell-C4FhvCqF.js +0 -236
  547. package/dist/app-shell-C4FhvCqF.js.map +0 -1
  548. package/dist/auth-BGua8ouh.js.map +0 -1
  549. package/dist/avatar-DAPlDvhJ.js.map +0 -1
  550. package/dist/base/cascader.js.map +0 -1
  551. package/dist/batch-action-bar-DnUJ21NQ.js.map +0 -1
  552. package/dist/button-DVzspB_G.js.map +0 -1
  553. package/dist/buttons-DPZekJFu.js.map +0 -1
  554. package/dist/cards-BaBZR-AU.js +0 -68
  555. package/dist/cards-BaBZR-AU.js.map +0 -1
  556. package/dist/chart-ZOYyK2xG.js +0 -155
  557. package/dist/chart-ZOYyK2xG.js.map +0 -1
  558. package/dist/checkbox-AWIhNhmo.js.map +0 -1
  559. package/dist/choice-inputs-CNHvARCJ.js +0 -770
  560. package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
  561. package/dist/code-block-DeneBJR_.js.map +0 -1
  562. package/dist/combobox-DaHESuiL.js +0 -355
  563. package/dist/combobox-DaHESuiL.js.map +0 -1
  564. package/dist/combobox-Dxo2fAYQ.js.map +0 -1
  565. package/dist/command-C25VMRII.js.map +0 -1
  566. package/dist/comments-DD0DUPwJ.js.map +0 -1
  567. package/dist/containers-Mu1LMGV1.js +0 -103
  568. package/dist/containers-Mu1LMGV1.js.map +0 -1
  569. package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
  570. package/dist/data-display-DT_khPl_.js.map +0 -1
  571. package/dist/date-picker-B2K3ucWn.js.map +0 -1
  572. package/dist/date-pickers-Ds8gLaoP.js +0 -175
  573. package/dist/date-pickers-Ds8gLaoP.js.map +0 -1
  574. package/dist/dropdown-menu-Cl4X7L5S.js +0 -193
  575. package/dist/dropdown-menu-Cl4X7L5S.js.map +0 -1
  576. package/dist/feedback-BYIhtitP.js.map +0 -1
  577. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +0 -1
  578. package/dist/filters-DJVAveHA.js.map +0 -1
  579. package/dist/form-field-CwH9y77i.js.map +0 -1
  580. package/dist/form-sizing-BdP_Mf5p.js.map +0 -1
  581. package/dist/forms-B9G_xwzi.js +0 -194
  582. package/dist/forms-B9G_xwzi.js.map +0 -1
  583. package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
  584. package/dist/header-BSfIEWbI.js.map +0 -1
  585. package/dist/hooks-ClH9thn4.js.map +0 -1
  586. package/dist/input-CZw8iU99.js +0 -21
  587. package/dist/input-CZw8iU99.js.map +0 -1
  588. package/dist/input-DQdEd0YD.js +0 -263
  589. package/dist/input-DQdEd0YD.js.map +0 -1
  590. package/dist/item-K5_ghvze.js +0 -275
  591. package/dist/item-K5_ghvze.js.map +0 -1
  592. package/dist/message-DZ_ruyUV.js.map +0 -1
  593. package/dist/metadata-list-8N16ZMW_.js +0 -405
  594. package/dist/metadata-list-8N16ZMW_.js.map +0 -1
  595. package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
  596. package/dist/navigation-Bnotn4AQ.js +0 -145
  597. package/dist/navigation-Bnotn4AQ.js.map +0 -1
  598. package/dist/navigation-BzhHI3lo.js.map +0 -1
  599. package/dist/navigation-row-recipes-BFLCk_Aq.js.map +0 -1
  600. package/dist/overflow-tab-bar-CWY7Nogn.js +0 -282
  601. package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
  602. package/dist/overlays-tMkF-VAN.js +0 -1003
  603. package/dist/overlays-tMkF-VAN.js.map +0 -1
  604. package/dist/page-CL9YeH_V.js +0 -224
  605. package/dist/page-CL9YeH_V.js.map +0 -1
  606. package/dist/page-header-commands-DOb6WsfD.js +0 -126
  607. package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
  608. package/dist/popover-gnTOhbFM.js +0 -198
  609. package/dist/popover-gnTOhbFM.js.map +0 -1
  610. package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
  611. package/dist/receipt-BVSOH3Xo.js.map +0 -1
  612. package/dist/rich-text-editor-cRLC-eBK.js.map +0 -1
  613. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +0 -1
  614. package/dist/settings-ybnjVwbd.js +0 -171
  615. package/dist/settings-ybnjVwbd.js.map +0 -1
  616. package/dist/sheet-ijlsjq-n.js +0 -213
  617. package/dist/sheet-ijlsjq-n.js.map +0 -1
  618. package/dist/sidebar-Db6gkh3U.js +0 -619
  619. package/dist/sidebar-Db6gkh3U.js.map +0 -1
  620. package/dist/sidebar-DkTO4VTO.js +0 -512
  621. package/dist/sidebar-DkTO4VTO.js.map +0 -1
  622. package/dist/skeleton-Byjnt7qr.js +0 -264
  623. package/dist/skeleton-Byjnt7qr.js.map +0 -1
  624. package/dist/smart-card-DiC5aac3.js +0 -604
  625. package/dist/smart-card-DiC5aac3.js.map +0 -1
  626. package/dist/table-BweFy_P9.js.map +0 -1
  627. package/dist/tabs-CDocW5D1.js.map +0 -1
  628. package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
  629. package/dist/text.styles-g4He6UIW.js.map +0 -1
  630. package/dist/theme-scope-BJ6eE2xt.js +0 -50
  631. package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
  632. package/dist/timelines-CwM_9IhD.js.map +0 -1
  633. package/dist/tooltip-yiRJUFjp.js +0 -111
  634. package/dist/tooltip-yiRJUFjp.js.map +0 -1
  635. package/dist/typography-UTnveOEy.js +0 -117
  636. package/dist/typography-UTnveOEy.js.map +0 -1
  637. package/dist/ui-provider-C_U0Xma4.js +0 -136
  638. package/dist/ui-provider-C_U0Xma4.js.map +0 -1
  639. package/dist/upload-CXyxmQBP.js.map +0 -1
  640. package/dist/upload-queue-Boscubn9.js.map +0 -1
  641. package/dist/usage-card-BhO5eqkX.js.map +0 -1
  642. package/dist/use-mobile-vaLKwgyf.js +0 -15
  643. package/dist/use-mobile-vaLKwgyf.js.map +0 -1
  644. package/dist/utils-BRhFDwuU.js.map +0 -1
  645. package/dist/value-inputs-TaX4OjNk.js +0 -963
  646. package/dist/value-inputs-TaX4OjNk.js.map +0 -1
  647. package/dist/workspace-B-OEm3Kf.js +0 -408
  648. package/dist/workspace-B-OEm3Kf.js.map +0 -1
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: themelia-ui-designer
3
+ description: Product designer for apps built with themelia-react-ui. Delegate a new view, a redesign, or a screen that works but reads poorly; it reads the real records, writes a view spec, builds with public owners, renders 390 and 1440 wide in light and dark, scores a critique rubric and fixes. Ask for review mode to get a read-only, independent critique of existing screens.
4
+ model: inherit
5
+ ---
6
+
7
+ # Themelia UI designer
8
+
9
+ You are a product designer who builds. Your result is a view that lets its user
10
+ decide quickly from real records, built with themelia-react-ui public owners and
11
+ app markup over its tokens. You remove before you add, spend emphasis on
12
+ purpose, and judge rendered screens rather than source.
13
+
14
+ ## Inputs
15
+
16
+ The parent names the mode (`design` or `review`, default `design`), the routes
17
+ or files, where the records live, the dev server URL when one runs, and any
18
+ constraints. Ask the parent only when a decision depends on something the
19
+ records, the brief and the code cannot tell you.
20
+
21
+ ## Load first
22
+
23
+ - `node_modules/themelia-react-ui/docs/consumer-skills/themelia-design/SKILL.md`
24
+ - `node_modules/themelia-react-ui/docs/consumer-skill/references/data-reading.md`
25
+ - `node_modules/themelia-react-ui/docs/consumer-skill/references/view-spec.md`
26
+ - `node_modules/themelia-react-ui/docs/consumer-skill/references/view-craft.md`
27
+ - `node_modules/themelia-react-ui/docs/consumer-skill/references/critique-rubric.md`
28
+ - `node_modules/themelia-react-ui/docs/consumer-skills/themelia-composition/SKILL.md`
29
+ for owners, surfaces and insets
30
+ - The app's `AGENTS.md` or `CLAUDE.md`: its rules win over this file.
31
+
32
+ ## Design mode
33
+
34
+ 1. **Read the data.** Open the records (fixtures, mocks, types, API samples).
35
+ Read a typical, a large, an exceptional and an empty record. Write the data
36
+ brief.
37
+ 2. **Baseline.** If the view exists, render it and score the rubric before
38
+ changing anything. Keep these screenshots for the report.
39
+ 3. **Spec.** Write the view spec where the parent says, otherwise
40
+ `design/<view>.md`. Rank information, name the focal point, draw 390 and
41
+ 1440 wireframes, choose an encoding per fact.
42
+ 4. **Owners.** Find and verify owners before JSX:
43
+ - `node node_modules/themelia-react-ui/docs/consumer-skill/scripts/find-components.mjs <task nouns>`
44
+ - `node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern record-detail|collection|edit|analytics --main <need> --aside <need>`
45
+ - `node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs <Symbol> --import <exact import> --prop <name>`
46
+ - `node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs <role or root>`
47
+ 5. **One subject first.** Build one representative subject and render it at
48
+ both widths before repeating it.
49
+ 6. **Build the view.** Change only the app files in scope and new app
50
+ components. Never edit `node_modules` or the package.
51
+ 7. **Render.** Use the browser tool you have (built-in browser, Chrome or the
52
+ app's Playwright). Capture 390×844 and 1440×900 in light and dark, plus the
53
+ opened, error and accepted states the view supports. Wait for rendered state
54
+ instead of fixed delays. Run the rubric's census at each width.
55
+ Without a browser tool, stop here: return the render checklist (routes,
56
+ widths, themes, states) and mark appearance unverified. Never claim visual
57
+ quality without screenshots.
58
+ 8. **Critique.** Score the rubric as a reviewer who did not build the view.
59
+ Write findings in the rubric's format.
60
+ 9. **Fix.** Repair the lowest-scoring criterion at its owner, render again and
61
+ score again. Stop after three rounds and report what remains.
62
+ 10. **Check.** Run the app's typecheck, lint, tests and build, and
63
+ `node node_modules/themelia-react-ui/docs/consumer-skill/scripts/check-composition.mjs <changed files>`.
64
+ Execute the callbacks, validation, focus and error/retry paths your change
65
+ touched.
66
+
67
+ ## Review mode
68
+
69
+ Read-only: do not edit files. Load the same references. Read the records and
70
+ write your own data brief, render the routes and form your five-second answers
71
+ before reading any design notes; then compare intent with result. Return the
72
+ scores, findings and screenshots.
73
+
74
+ ## Rules
75
+
76
+ - Real records only. No invented figures, trends or states; data gaps stay
77
+ visible and are reported.
78
+ - Public imports only. No anatomy class overrides, new colours or tokens, blur,
79
+ decorative icons, filler cards or prose explaining the screen.
80
+ - Do not add navigation, cards or commands because a prop allows them.
81
+ - Keep existing behaviour: every command still works, explains why it is
82
+ disabled, or is removed with a reason.
83
+ - Report a library limit by owner and prop with the workaround used.
84
+
85
+ ## Report
86
+
87
+ 1. Rubric scores before and after, per criterion, width and theme.
88
+ 2. Screenshot paths for each width, theme and state.
89
+ 3. The decisions that changed the view and why, including what was removed.
90
+ 4. Checks and interactions run, with results.
91
+ 5. Library gaps: owner, prop, workaround.
92
+ 6. Unverified: widths, themes, states or interactions not exercised.
93
+
94
+ Keep measurements and screenshots separate from judgement: "the census shows 9
95
+ text levels in Purchased goods" is evidence; "the view is clearer" is a claim
96
+ that needs it.
@@ -3,8 +3,8 @@ import { Card } from 'themelia-react-ui/base/cards';
3
3
  import { SidebarTrigger } from 'themelia-react-ui/base/sidebar';
4
4
  import { AppLayout, type AppLayoutVariant } from 'themelia-react-ui/layout/app-shell';
5
5
  import { HeaderUserMenu, type HeaderUserMenuProps } from 'themelia-react-ui/layout/header';
6
- import { Page } from 'themelia-react-ui/layout/page';
7
- import { AppSidebar, LayoutSidebarProvider, SidebarNavigationUser, type AppSidebarProps } from 'themelia-react-ui/layout/sidebar';
6
+ import { Page, type PageProps } from 'themelia-react-ui/layout/page';
7
+ import { AppSidebar, LayoutSidebarProvider, SidebarNavigationUser, type AppSidebarProps, type LayoutSidebarProviderProps } from 'themelia-react-ui/layout/sidebar';
8
8
  import type { UIConfig } from 'themelia-react-ui/ui-provider';
9
9
  import { Text } from 'themelia-react-ui/typography';
10
10
 
@@ -26,15 +26,13 @@ export interface WorkspaceLayoutProps {
26
26
  workspaceSwitcher?: ReactNode;
27
27
  user?: HeaderUserMenuProps['user'];
28
28
  onLogout?: () => void;
29
- onCreate: () => void;
30
- narrow?: boolean;
31
29
  children?: ReactNode;
32
30
  }
33
31
 
34
32
  /** The app accepts route/identity data and wires navigation/persistence callbacks. */
35
33
  export function WorkspaceLayout({ variant = 'inset', sidebar, navigationGroups = {},
36
34
  currentUrl, renderLink, workspaceLinks, workspaceSwitcher, user, onLogout,
37
- onCreate, narrow, children }: WorkspaceLayoutProps) {
35
+ children }: WorkspaceLayoutProps) {
38
36
  const sidebarAccount = !sidebar && (variant === 'sidebar' || variant === 'inset');
39
37
  const brand = <Text weight="semibold">Admin</Text>;
40
38
  const account = user && !sidebarAccount ? <HeaderUserMenu user={user} onLogout={onLogout} /> : null;
@@ -42,18 +40,81 @@ export function WorkspaceLayout({ variant = 'inset', sidebar, navigationGroups =
42
40
  currentUrl={currentUrl} renderLink={renderLink} navigationGroups={navigationGroups}
43
41
  workspaceLinks={workspaceSwitcher ? undefined : workspaceLinks}
44
42
  slots={{ headerEnd: workspaceSwitcher, footer: user && sidebarAccount ? <SidebarNavigationUser user={user} onLogout={onLogout} /> : undefined }} />;
45
- const content = <Page narrow={narrow} gutter={variant === 'stacked' ? 'none' : undefined}
46
- header={{ title: 'Workspace', description: 'Review activity and manage your records.',
47
- primaryAction: { label: 'Create record', onClick: onCreate } }}>
48
- {children ?? <Card title="Activity" footerText="Latest workspace activity"><Text>Application content goes here.</Text></Card>}
49
- </Page>;
50
43
  const trigger = <SidebarTrigger />;
51
44
  return <LayoutSidebarProvider adaptTo="container" className="min-h-0">
52
45
  {variant === 'stacked' ? <AppLayout variant="stacked" className="h-svh min-h-0" logo={brand}
53
- slots={{headerEnd: account}}>{content}</AppLayout>
46
+ slots={{headerEnd: account}}>{children}</AppLayout>
54
47
  : variant === 'sidebar' || variant === 'inset' ? <AppLayout variant={variant} className="h-svh min-h-0"
55
- sidebar={navigation} sidebarTrigger={trigger} slots={{ toolbarStart: brand, toolbarEnd: account }}>{content}</AppLayout>
48
+ sidebar={navigation} sidebarTrigger={trigger} slots={{ toolbarStart: brand, toolbarEnd: account }}>{children}</AppLayout>
56
49
  : <AppLayout variant={variant} className="h-svh min-h-0" logo={brand} sidebar={navigation}
57
- sidebarTrigger={trigger} slots={{headerEnd: account}}>{content}</AppLayout>}
50
+ sidebarTrigger={trigger} slots={{headerEnd: account}}>{children}</AppLayout>}
51
+ </LayoutSidebarProvider>;
52
+ }
53
+
54
+ export interface WorkspaceRegionsLayoutProps {
55
+ /** Supply SidebarNavigationRail for a persistent area rail. */
56
+ primaryNavigation?: ReactNode;
57
+ sidebarPresentation?: 'panel' | 'rail';
58
+ navigationGroups?: AppSidebarProps['navigationGroups'];
59
+ contextualNavigationGroups?: AppSidebarProps['navigationGroups'];
60
+ /** Independent of shell/rail presentation: minimize to icons, hide, or stay expanded. */
61
+ contextualCollapsible?: AppSidebarProps['collapsible'];
62
+ /** A defined replacement wins over contextual groups; null removes the region. */
63
+ secondarySidebar?: ReactNode;
64
+ currentUrl?: string;
65
+ renderLink?: AppSidebarProps['renderLink'];
66
+ secondarySidebarWidth?: string;
67
+ openPanels?: LayoutSidebarProviderProps['openPanels'];
68
+ defaultOpenPanels?: LayoutSidebarProviderProps['defaultOpenPanels'];
69
+ onOpenPanelsChange?: LayoutSidebarProviderProps['onOpenPanelsChange'];
70
+ mobilePanel?: LayoutSidebarProviderProps['mobilePanel'];
71
+ onMobilePanelChange?: LayoutSidebarProviderProps['onMobilePanelChange'];
72
+ user?: HeaderUserMenuProps['user'];
73
+ onLogout?: () => void;
74
+ children?: ReactNode;
75
+ }
76
+
77
+ /** One provider coordinates the primary area and adjacent contextual navigation. */
78
+ export function WorkspaceRegionsLayout({ primaryNavigation, sidebarPresentation = 'panel',
79
+ navigationGroups = {}, contextualNavigationGroups, contextualCollapsible = 'icon', secondarySidebar,
80
+ currentUrl, renderLink, secondarySidebarWidth,
81
+ openPanels, defaultOpenPanels = ['primary', 'secondary'], onOpenPanelsChange,
82
+ mobilePanel, onMobilePanelChange, user, onLogout, children }: WorkspaceRegionsLayoutProps) {
83
+ const hasContextualNavigation = secondarySidebar !== undefined
84
+ ? secondarySidebar != null && secondarySidebar !== false : contextualNavigationGroups !== undefined;
85
+ return <LayoutSidebarProvider adaptTo="container" className="min-h-0"
86
+ navigationPanel={hasContextualNavigation ? 'secondary' : 'primary'}
87
+ openPanels={openPanels} defaultOpenPanels={defaultOpenPanels} onOpenPanelsChange={onOpenPanelsChange}
88
+ mobilePanel={mobilePanel} onMobilePanelChange={onMobilePanelChange}>
89
+ <AppLayout variant="light-header" contentSurface="inset" className="h-svh min-h-0"
90
+ logo={<Text weight="semibold">Admin</Text>} sidebarTrigger={<SidebarTrigger />}
91
+ sidebarPresentation={sidebarPresentation}
92
+ mobileSidebarMode={sidebarPresentation === 'rail' ? 'inline' : 'drawer'}
93
+ secondarySidebarWidth={secondarySidebarWidth}
94
+ slots={{
95
+ headerEnd: user && <HeaderUserMenu user={user} onLogout={onLogout} />,
96
+ sidebar: primaryNavigation ?? <AppSidebar className="h-full" surface="transparent" menuDensity="comfortable"
97
+ navigationGroups={navigationGroups} currentUrl={currentUrl} renderLink={renderLink} />,
98
+ secondarySidebar: hasContextualNavigation ? secondarySidebar !== undefined ? secondarySidebar : <AppSidebar className="h-full" surface="transparent"
99
+ collapsible={contextualCollapsible} menuDensity="comfortable" searchable
100
+ navigationGroups={contextualNavigationGroups} currentUrl={currentUrl} renderLink={renderLink} /> : undefined,
101
+ }}>{children}</AppLayout>
58
102
  </LayoutSidebarProvider>;
59
103
  }
104
+
105
+ export interface WorkspaceExamplePageProps {
106
+ onCreate: () => void;
107
+ narrow?: boolean;
108
+ /** Use none when a stacked/contained parent already owns the inline gutter. */
109
+ gutter?: PageProps['gutter'];
110
+ children?: ReactNode;
111
+ }
112
+
113
+ /** Illustrative route content; mount this or another route Page inside the shell. */
114
+ export function WorkspaceExamplePage({ onCreate, narrow, gutter, children }: WorkspaceExamplePageProps) {
115
+ return <Page narrow={narrow} gutter={gutter}
116
+ header={{ title: 'Workspace', description: 'Review activity and manage your records.',
117
+ primaryAction: { label: 'Create record', onClick: onCreate } }}>
118
+ {children ?? <Card title="Activity" footerText="Latest workspace activity"><Text>Application content goes here.</Text></Card>}
119
+ </Page>;
120
+ }
@@ -0,0 +1,77 @@
1
+ import { useId, useRef, useState, type FormEvent } from 'react';
2
+ import { Button } from 'themelia-react-ui/base/buttons';
3
+ import { Checkbox } from 'themelia-react-ui/base/choice-inputs';
4
+ import { FormField } from 'themelia-react-ui/base/forms';
5
+ import { Stack } from 'themelia-react-ui/base/structure';
6
+ import { Input, PasswordInput } from 'themelia-react-ui/base/text-inputs';
7
+ import { AuthFooterLinks, AuthForm, AuthFormRow, AuthShell, type AuthShellProps } from 'themelia-react-ui/layout/auth';
8
+ import { Text } from 'themelia-react-ui/typography';
9
+
10
+ export interface PasswordSignInValue {
11
+ email: string;
12
+ password: string;
13
+ rememberDevice: boolean;
14
+ }
15
+
16
+ export interface PasswordSignInProps {
17
+ productName: string;
18
+ recoveryHref: string;
19
+ /** Optional public destination relevant to this sign-in flow. */
20
+ returnHref?: string;
21
+ renderLink?: AuthShellProps['renderLink'];
22
+ /** The app authenticates and navigates after success; reject on failure. */
23
+ onSignIn: (value: PasswordSignInValue) => Promise<void>;
24
+ }
25
+
26
+ export function PasswordSignIn({ productName, recoveryHref, returnHref, renderLink, onSignIn }: PasswordSignInProps) {
27
+ const id = useId();
28
+ const inFlight = useRef(false);
29
+ const [email, setEmail] = useState('');
30
+ const [password, setPassword] = useState('');
31
+ const [rememberDevice, setRememberDevice] = useState(false);
32
+ const [pending, setPending] = useState(false);
33
+ const [error, setError] = useState<string>();
34
+
35
+ async function submit(event: FormEvent<HTMLFormElement>) {
36
+ event.preventDefault();
37
+ if (inFlight.current) return;
38
+ inFlight.current = true;
39
+ setError(undefined);
40
+ setPending(true);
41
+ try {
42
+ await onSignIn({ email, password, rememberDevice });
43
+ } catch {
44
+ setError('Sign-in failed. Check your details and try again.');
45
+ } finally {
46
+ inFlight.current = false;
47
+ setPending(false);
48
+ }
49
+ }
50
+
51
+ return <AuthShell brand={{ label: productName }} title="Sign in"
52
+ description="Use your account to continue." renderLink={renderLink}
53
+ footerLinks={returnHref ? [{ id: 'return', label: 'Return to application', href: returnHref }] : []}>
54
+ <AuthForm onSubmit={submit} aria-label="Password sign in" aria-busy={pending}>
55
+ <FormField label="Email" htmlFor={`${id}-email`} required>
56
+ <Input id={`${id}-email`} name="email" type="email" autoComplete="username"
57
+ required disabled={pending} value={email} onChange={event => setEmail(event.target.value)} />
58
+ </FormField>
59
+ <FormField label="Password" htmlFor={`${id}-password`} required>
60
+ <PasswordInput id={`${id}-password`} name="password" autoComplete="current-password"
61
+ required disabled={pending} value={password} onChange={event => setPassword(event.target.value)} />
62
+ </FormField>
63
+ <AuthFormRow>
64
+ <Stack render={<label htmlFor={`${id}-remember`} />} direction="horizontal" gap="md" wrap={false}>
65
+ <Checkbox id={`${id}-remember`} name="rememberDevice" checked={rememberDevice}
66
+ disabled={pending} onCheckedChange={checked => setRememberDevice(checked === true)} />
67
+ <Text tag="span">Remember this device</Text>
68
+ </Stack>
69
+ <AuthFooterLinks aria-label="Account recovery" renderLink={renderLink}
70
+ links={[{ id: 'recovery', label: 'Forgot password?', href: recoveryHref, disabled: pending }]} />
71
+ </AuthFormRow>
72
+ {error && <Text type="error" role="alert">{error}</Text>}
73
+ <Button tone="primary" type="submit" fullWidth loading={pending}
74
+ strings={{ loading: 'Signing in…' }}>Sign in</Button>
75
+ </AuthForm>
76
+ </AuthShell>;
77
+ }
@@ -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."