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,124 @@
1
+ # Token-backed domain structures
2
+
3
+ Use when a business relationship needs its own structure: an allocation ledger,
4
+ stock comparison, schedule, reconciliation or other subject whose arrangement is
5
+ more specific than a ready-made block. Start with [screen decisions](screen-decisions.md)
6
+ and the installed component discovery tools. Mostly compose public base
7
+ components, layout blocks, typography and value primitives; add semantic JSX and
8
+ Tailwind where the subject needs custom tracks, grouping or responsive behavior.
9
+ This is a normal application seam, not a fallback that requires a missing API.
10
+
11
+ ## Divide the work deliberately
12
+
13
+ | Requirement | Owner |
14
+ | --- | --- |
15
+ | Route identity, commands, gutters and page regions | Page and the chosen app layout |
16
+ | A titled/framed/transparent subject with aligned insets | Card; paint and padding are independent |
17
+ | Routine stack, wrapping actions, equal tracks or column split | Stack, Grid, AdaptiveGrid, TwoColumnLayout |
18
+ | A product-specific comparison, local container adaptation or irregular tracks | App component with semantic JSX and Tailwind on its own elements |
19
+ | Display text and formatted values | Heading, Text, Money, Number, Date and related primitives |
20
+ | Selection, commands, menus, forms and overlays | The relevant public interactive owner and its supported parts |
21
+ | Business calculations, allocation rules and accepted state | App/domain logic or authoritative backend results |
22
+
23
+ Do not recreate Input, Menu, Button, Card anatomy or keyboard behavior in custom
24
+ markup. An app-owned region can still contain these owners. Extract a component
25
+ when it gives a coherent domain contract; a new file or custom component count
26
+ does not itself improve a screen.
27
+
28
+ ## Choose classes by responsibility
29
+
30
+ Use `inspect-tokens.mjs` to verify the installed utility spelling and overrideRoot.
31
+ The following are shipped classes, not new variables:
32
+
33
+ | Intent on app-owned markup | Vocabulary |
34
+ | --- | --- |
35
+ | Close label/supporting copy | `gap-dense`, `gap-normal` or the equivalent Stack gap |
36
+ | Related values/fields | `gap-space-xl` |
37
+ | Separate subjects | `gap-space-2xl` |
38
+ | A custom surface region | `p-surface`, `px-surface`, `py-surface` when that element owns the inset |
39
+ | A custom plain row | `px-row-x`, `py-row-y` when its row inset is required |
40
+ | Layout and responsive geometry | `min-w-0`, `grid`, `grid-cols-[…]`, `@container/name`, named container queries, wrapping and overflow |
41
+ | App surface/foreground | `bg-card text-card-foreground`, `bg-background text-foreground`, `bg-sidebar text-sidebar-foreground` |
42
+ | Quiet copy / structural rule | Text type="secondary" / `border-border` |
43
+
44
+ Pick the relationship before the size. Page/Card already owning an inset means
45
+ the inner subject does not add `p-surface`. Flat Card retains md padding unless
46
+ explicitly changed; use padding="none" only under another inset owner or for an
47
+ intentional flush region. Transparent and painted peers can use the same inset
48
+ so their heading/body edges align.
49
+
50
+ Continuous sections can share one padded host and an unpadded internal Stack.
51
+ Separate padded flat Cards can accidentally add bottom inset + peer gap + top
52
+ inset; a valid token on each layer does not justify that combined distance.
53
+
54
+ Use a local container query when a subject can live in either a main column or
55
+ a narrow aside. Viewport width alone does not establish available space. An
56
+ arbitrary grid track or breakpoint can express product geometry; arbitrary
57
+ spacing, text sizes, radius or state palettes usually recreate a shared role.
58
+ Do not force essential rows into horizontal scrolling merely to retain every
59
+ desktop column. Preserve the important identity/value relationship in the
60
+ narrow composition and keep other detail accessible.
61
+
62
+ ## Customize the theme, not each control
63
+
64
+ Keep shadcn surface/foreground pairs and use component tone/status props.
65
+ Use Heading/Text props instead of typography classes on imported text owners.
66
+ Use supported sizes/insets on controls and surfaces. Do not add local hover,
67
+ focus, selected or disabled recipes to a public component.
68
+
69
+ Typography props are not interchangeable: Heading selects semantic level and
70
+ visual size with tag/size; Text has its own supported tags and weight/type
71
+ contract. Inspect the exact export instead of assuming that a prop supported by
72
+ one typography owner exists on another.
73
+
74
+ Custom table cells retain those primitives' alignment and flow. Match the column
75
+ header and every line of the cell deliberately: a right-aligned Money above
76
+ left-aligned cost copy under a left-aligned header creates three conflicting
77
+ axes. Preserve the table's chosen alignment or use its supported column seam;
78
+ do not assume the surrounding cell overrides a child primitive's own default.
79
+ Keep primary prices/SKUs readable and move secondary detail to its inspection
80
+ subject when it prevents useful comparison.
81
+
82
+ Canonical roots are the settings: `--space-scale` changes shared gaps/insets;
83
+ `--density-scale` changes action/control/row geometry; `--surface-x` and
84
+ `--surface-y` own surface room. They have different responsibilities. A smaller
85
+ mobile viewport does not automatically justify globally shrinking all of them.
86
+ First repair duplicated insets, wrong group spacing and low-priority content.
87
+ When the product needs a shared responsive spacing policy, set the appropriate
88
+ existing root at its app/theme boundary in CSS and review affected siblings.
89
+ Preserve usable controls and copy; avoid component-specific token copies.
90
+
91
+ Use derived utilities as classes. Never override or read derived `--spacing-*`,
92
+ `--radius-*` or `--container-*` aliases inside a scoped formula: they resolve at
93
+ the root. If custom drawing needs a formula, derive from the canonical roots
94
+ and apply each scale once. ThemeScope handles scoped/portaled theme inheritance;
95
+ do not copy computed variables through JavaScript.
96
+
97
+ ## Executable example
98
+
99
+ The [allocation subject](../examples/token-domain-structure.tsx) combines public
100
+ Card/Stack/Text/value owners with an app-owned definition grid. It compares
101
+ reserved quantities across locations, a relationship no block represents. Goods
102
+ that share one fulfillment status and ship-from location, with the commands that
103
+ move them on, are a `FulfillmentGroup` instead; see the
104
+ [order and invoice map](commerce-composition.md). Warehouse groups
105
+ and unavailable quantities stay near their goods. The custom grid changes at
106
+ its own container width; no control or surface recipe is replaced. The caller
107
+ supplies accepted quantities and optional public actions; the example does not
108
+ invent inventory allocation or fulfillment policy.
109
+
110
+ The [assessment comparison](../examples/custom-composition.tsx) is a smaller
111
+ example, and [commerce lines](../examples/commerce-lines.tsx) demonstrates a
112
+ block's typed content seam. Run these through the consumer checker after
113
+ adapting them. Ensure the app compiles its own Tailwind utilities as described in
114
+ [theming](theming.md); shipped component CSS does not compile app-authored classes.
115
+
116
+ ## Inspect the result
117
+
118
+ Review actual hierarchy, peer content edges, spacing and wrapping in narrow/wide
119
+ parents, light/dark themes and independently changed spacing/density. Inspect
120
+ the image; zero overflow is not enough. Open a menu/editor in the active scope,
121
+ then verify keyboard/focus, invalid/disabled and accepted/error states. If a
122
+ supported public composition still drifts, report the exact owner and a minimal
123
+ reproduction so the shared component is repaired instead of patched with local
124
+ CSS. See [review](review.md) for separate source, appearance and interaction proof.
@@ -1,6 +1,21 @@
1
1
  # Installed package and skill setup
2
2
 
3
- Themelia 2.0.3 requires the official `@base-ui/react ^1.9.0` npm peer alongside
3
+ ## Choose the CSS path
4
+
5
+ **Standalone compiled CSS:** import `themelia-react-ui/style.css` once in the app entry. It includes component styles and the documented public utility vocabulary; components work without a host reset, Tailwind processing or private-source scanning. It deliberately omits global preflight. This path does not generate arbitrary utility classes written in app source.
6
+
7
+ **Tailwind v4 application utilities:** when the app authors Tailwind classes, process this application stylesheet through its Tailwind v4 build integration:
8
+
9
+ ```css
10
+ @import "tailwindcss";
11
+ @import "themelia-react-ui/style.css";
12
+ @import "themelia-react-ui/theme.css";
13
+ ```
14
+
15
+ Tailwind supplies app-generated utilities and its layered preflight; theme.css makes the semantic and structural vocabulary available to that compilation. No package-private source scan is required. The default layer order is `theme, base, components, utilities`. Keep app resets inside `@layer base`; unlayered universal/tag resets outrank layered package styles regardless of import order. Do not blanket-reset `[data-slot]`, which also belongs to third-party and app markup. Put intentional scoped app overrides after these imports. See [integration](integration.md) for an optional app-owned reset and provider setup.
16
+
17
+
18
+ Themelia 2.0.5 requires the official `@base-ui/react ^1.9.0` npm peer alongside
4
19
  React, React DOM and Lucide. An app already using `^1.9.0` can retain that range.
5
20
  Remove any older private Base UI archive pin or override before refreshing the
6
21
  lockfile; dismissal translations and nested popup focus belong to Themelia's
@@ -31,27 +46,15 @@ while (true) {
31
46
  }
32
47
  const installedSkill = path.join(root, 'docs/consumer-skill');
33
48
  const selectedSkill = process.env.THEMELIA_SKILL_DIR ?? installedSkill;
34
- for (const file of ['public-api.json', 'tokens.json']) {
49
+ for (const file of ['public-api.json', 'tokens.json', 'component-contracts.json']) {
35
50
  const installed = readJson(path.join(installedSkill, 'references', file));
36
51
  assert.equal(installed.package, manifest.name, 'Installed guidance package mismatch');
37
52
  assert.equal(installed.version, manifest.version, 'Installed guidance version mismatch');
38
- const selected = readJson(path.join(selectedSkill, 'references', file));
39
- assert.deepEqual(selected, installed, 'Copied skill is stale; refresh the complete folder');
40
53
  }
41
54
  if (fs.realpathSync(selectedSkill) !== fs.realpathSync(installedSkill)) {
42
- function compareAssets(directory) {
43
- for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
44
- if (entry.name === '.DS_Store') continue;
45
- const installed = path.join(directory, entry.name);
46
- const selected = path.join(selectedSkill, path.relative(installedSkill, installed));
47
- const info = fs.lstatSync(installed);
48
- assert(!info.isSymbolicLink(), 'Installed guidance must contain real assets');
49
- assert(fs.existsSync(selected) && !fs.lstatSync(selected).isSymbolicLink(), 'Copied skill is stale; missing or linked asset');
50
- if (info.isDirectory()) compareAssets(installed);
51
- else assert(fs.readFileSync(installed).equals(fs.readFileSync(selected)), 'Copied skill is stale; refresh the complete folder');
52
- }
53
- }
54
- compareAssets(installedSkill);
55
+ const { pathToFileURL } = await import('node:url');
56
+ const { checkCopiedConsumerBundle } = await import(pathToFileURL(path.join(installedSkill, 'scripts/setup-skills.mjs')).href);
57
+ checkCopiedConsumerBundle({ packageRoot: root, destination: path.dirname(selectedSkill) });
55
58
  }
56
59
  // The app's project instructions block records the version it was pasted from.
57
60
  const instructions = ['AGENTS.md', 'CLAUDE.md'].find(file => fs.existsSync(file));
@@ -61,7 +64,7 @@ console.log(JSON.stringify({ package: manifest.name, version: manifest.version,
61
64
  JS
62
65
  ```
63
66
 
64
- Use the reported root for the bundled finder, stylesheet paths and published
67
+ Use the reported root for the bundled finder/inspectors, stylesheet paths and published
65
68
  declarations. Install required peers from that manifest and optional peers for
66
69
  the exact imported families from `references/public-api.json`. A copied skill's
67
70
  finder reports its own metadata version; it does not inspect the app installation.
@@ -71,7 +74,7 @@ running the recipe. The comparison checks metadata contents as well as version,
71
74
  so stale copies with the same development version are caught. Every installed
72
75
  guidance/script/example asset is also compared byte-for-byte; extra app-owned
73
76
  files or publisher markers in the copy are not checked. Keep local product policy
74
- outside the package guidance. Recopy the complete folder after upgrades, and
77
+ outside the package guidance. Recopy the complete bundle after upgrades, and
75
78
  read declarations from the installed package.
76
79
 
77
80
  `agentsBlock` reports whether the app's `AGENTS.md` (or `CLAUDE.md`) carries the
@@ -102,20 +105,32 @@ need the codemod; `button: { defaultTone: 'primary', defaultButtonStyle: 'solid'
102
105
  restores the previous default app-wide. Afterwards, demote extra primaries so
103
106
  each page or surface keeps one.
104
107
 
105
- ## Manual skill copying
106
-
107
- 1. Choose an agent skill destination in the user's configured skills directory,
108
- named `themelia-react-ui-consumer`. For Codex the usual destination is
109
- `~/.codex/skills/themelia-react-ui-consumer`; honor a configured alternative.
110
- 2. Copy the **entire** installed `docs/consumer-skill` directory, including
111
- references, scripts and examples. Do not copy only SKILL.md or merge files from
112
- different releases. Preserve an existing user-customized copy before replacing it.
113
- 3. Run the identity recipe with `THEMELIA_SKILL_DIR` pointing to that copy. Invoke
114
- `$themelia-react-ui-consumer` or let the agent select it by task context.
115
-
116
- Copying into an agent's global skill directory is a separate user-requested
117
- action; reading these instructions does not perform or authorize it. The npm
118
- package does not install a skill automatically. Run the consuming app's own
119
- type/lint/test/build scripts after integration; repository check scripts are not
120
- installed consumer commands. See [integration](integration.md) for workflow and
121
- opened-surface verification.
108
+ ## Copy the complete skill bundle
109
+
110
+ The package ships four focused capabilities, one compatibility/shared root and one agent definition. One copy of API/token/contract metadata, scripts and examples is shared by all three. Do not copy only an individual SKILL.md or duplicate the generated indexes into each skill.
111
+
112
+ When the user requests installation, run the bundled copy helper with their configured agent skills directory. For Codex the usual destination is `~/.codex/skills`; honor a configured alternative:
113
+
114
+ ```sh
115
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/setup-skills.mjs --copy --destination "$HOME/.codex/skills"
116
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/setup-skills.mjs --check --destination "$HOME/.codex/skills"
117
+ ```
118
+
119
+ It copies `themelia-components`, `themelia-tokenization`, `themelia-composition`, `themelia-design`, and `themelia-react-ui-consumer` as real sibling directories. Rich templates are copied once under the shared directory. Markdown links are rebased for this installed layout; no symlinks or repository paths are required. Existing canonical/shared destinations are rejected before writing: preserve or move the previous complete bundle before an upgrade, then copy the release together. `--check` compares every expected asset after rebasing, so stale content with an unchanged development version is caught.
120
+
121
+ ### Copy the designer agent
122
+
123
+ `docs/consumer-skill/agents/themelia-ui-designer.md` is a Claude Code agent definition: a product designer that reads the records, writes a view spec, builds with public owners, renders 390 and 1440 wide in light and dark, scores the critique rubric and fixes. Its body reads skills and scripts through `node_modules/themelia-react-ui/...`, so it works wherever the skills were copied; other agents can follow it as a prompt. When the user requests it, copy it into the project's agents directory with the skills or on its own:
124
+
125
+ ```sh
126
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/setup-skills.mjs --copy --agents .claude/agents
127
+ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/setup-skills.mjs --check --agents .claude/agents
128
+ ```
129
+
130
+ An existing `themelia-ui-designer.md` is never overwritten; move it before copying a newer release. Other agent files are left untouched.
131
+
132
+ The package retains `docs/consumer-skills/themelia-foundation/SKILL.md` and `themelia-forms/SKILL.md` as compatibility routers. They are not added by fresh copying. Existing legacy or unrelated skills are left untouched; review older agent routing separately when upgrading. Keep app policy outside the copied package bundle.
133
+
134
+ For the identity recipe above, set `THEMELIA_SKILL_DIR` to the copied shared `themelia-react-ui-consumer` directory. In project instructions, use the generated [AGENTS.md block](agents-md.md) pointing at package skills, or point the four skill paths to their copied siblings. Invoke `$themelia-components` for setup, discovery and typed APIs/forms; `$themelia-tokenization` for themes and shared visual roles; `$themelia-composition` for screen hierarchy, workflows and visual repair; and `$themelia-design` for data briefs, view specs and rubric-scored critique of rendered views. The compatibility `$themelia-react-ui-consumer` entrypoint remains available.
135
+
136
+ Copying into an agent's global skill directory requires a user request. The npm package does not perform installation automatically. Run the consuming app's own type/lint/test/build scripts after integration; repository maintainer commands are not installed consumer commands.
@@ -1,6 +1,6 @@
1
1
  # Integration
2
2
 
3
- Install required peers from the installed package.json; public-api.json records required/optional peers. Install optional peers for the imported families, including base families such as charts and QR code. Whole-family declaration requirements can exceed a tree-shaken runtime graph; follow the exact family's index and declarations. Import style.css once before overrides; it omits preflight, so the app supplies its reset. Basic controls must not pull in unrelated map/editor/chart dependencies.
3
+ Install required peers from the installed package.json; public-api.json records required/optional peers. Install optional peers for the imported families, including base families such as charts and QR code. Whole-family declaration requirements can exceed a tree-shaken runtime graph; follow the exact family's index and declarations. Import style.css once before overrides; it omits global preflight and components remain usable without a host reset. Use the [installation CSS paths](installation.md#choose-the-css-path) when generating app utilities. Basic controls must not pull in unrelated map/editor/chart dependencies.
4
4
 
5
5
  Put global resets in the lower-priority `base` layer, or use your framework's layered preflight. The package uses the `theme, base, components, utilities` layer order. Unlayered rules outrank layered component styles regardless of import order; a global `button { font: inherit }` can replace the library's control size and weight. For an app-owned reset:
6
6
 
@@ -18,7 +18,7 @@ Load intentional, scoped app overrides after the package stylesheet. Keep broad
18
18
 
19
19
  UIProvider supplies stable mount-time defaults: explicit prop, provider default, fallback. Per-mount requests/data/callbacks stay on components. ThemeScope from themelia-react-ui/ui-provider places descendant portals inside its CSS boundary. A styled div does not relocate body portals; explicit Base UI portal containers take precedence.
20
20
 
21
- Framed card regions are ruled apart by default. To separate them by spacing
21
+ Cards omit the header rule and keep the footer rule by default. To separate them by spacing
22
22
  alone, configure the single application provider with
23
23
  `card: { defaultHeaderDivider: false, defaultFooterDivider: false }`.
24
24
  Explicit Card booleans override these defaults. Ordinary card
@@ -33,6 +33,41 @@ the installed contract. Fix that app policy through its own review rather than
33
33
  compensating with card or field padding. Bounded AppSidebar instances use h-full
34
34
  inside the shell's constrained column; standalone sidebars may use viewport height.
35
35
 
36
+ Use one LayoutSidebarProvider for AppLayout's primary and secondarySidebar
37
+ slots. Named scopes infer each AppSidebar/LayoutSidebar panel ID. Keep
38
+ desktop openPanels separate from mobilePanel, the single active undocked drawer;
39
+ update controlled props from their matching callbacks. Controlled openPanels
40
+ takes precedence over legacy primary open. Target essential supporting panels
41
+ with SidebarTrigger panelId, and use navigationPanel for the ordinary navigation
42
+ trigger/shortcut. The WorkspaceRegionsLayout recipe accepts primaryNavigation
43
+ and sidebarPresentation="rail" for a SidebarNavigationRail beside contextual
44
+ navigation, with grouped primary navigation as an alternative. It demonstrates
45
+ named state without a router dependency or another UIProvider. Inset framing
46
+ does not supply Page padding, and shell header slots take Header partials.
47
+ An embedded provider with adaptTo="container" contains its drawer and backdrop.
48
+ Use one explicit trigger for the inline full navigation beside the static left
49
+ area rail. Choose the contextual AppSidebar/LayoutSidebar `collapsible`
50
+ independently of the shell preset or sidebar skin: `icon` retains a second
51
+ compact column, `offcanvas` hides that panel and leaves only the primary rail,
52
+ and `none` keeps it expanded. Keep the static primary rail on its own `none`
53
+ policy. Current examples default to `icon` with a preview selector, and
54
+ standalone sidebars support the same choices. The copied
55
+ WorkspaceRegionsLayout recipe exposes `contextualCollapsible` with an `icon`
56
+ default; a secondarySidebar replacement owns its own mode. The app's
57
+ area-selection callback opens the corresponding contextual panel.
58
+ At narrow widths the inline cluster pans a minimum
59
+ page canvas, with its area rail pinned, and preserves expansion state. Shared
60
+ header, navigation and Page owners supply spacing. Dedicated area rails use the
61
+ background surface and an adjacent divider; their width is independent of
62
+ full-sidebar icon collapse.
63
+
64
+ SidebarNavigationRail shares AppSidebar's header, beforeNavigation,
65
+ afterNavigation and footer render slots. Header/footer stay pinned and
66
+ before/after content scrolls. Searchable AppSidebar retains its search band in
67
+ icon mode; its search button expands and focuses the field. Current
68
+ matching chooses the most-specific href and exposes ancestor state separately
69
+ to custom item renderers.
70
+
36
71
  For RTL, pair the native DOM direction with `DirectionProvider` from the same
37
72
  entrypoint. Native `dir` owns text flow and logical CSS geometry; the provider
38
73
  owns Base UI keyboard navigation and popup positioning. It does not set `dir`.
@@ -113,3 +148,7 @@ both container content edges without global preflight; Container and DataTable
113
148
  own border-box sizing. Stabilize lifecycle inputs as explained in
114
149
  [workflows](workflows.md#scoped-directory). These are example/runtime proofs,
115
150
  not evidence of an independent agent choosing the same composition.
151
+
152
+ ## Form transport and router adapters
153
+
154
+ Use [RHF workflows](rhf-workflows.md#transport-lifecycle) for frontend state with Inertia callback visits or TanStack async mutations. Await the complete transport before resetting dirty state or closing an overlay. The framework stays in the app. `renderLink` on AppSidebar/Page headers adapts the app router: forward href, children, className, accessible/native attributes and onClick; preserve modifier/new-tab behavior and invoke the supplied click handler so mobile navigation can close. Use the [typed shell recipe](../examples/app-layout.tsx) for the exact public renderLink type rather than inventing a router prop. React Router Link, Inertia Link and TanStack Link each need an app adapter matching their own installed version.
@@ -0,0 +1,94 @@
1
+ # Product composition capability map
2
+
3
+ Compare the product's actual tasks with these public contracts before writing
4
+ JSX. A product view may combine existing owners and custom domain content; a new
5
+ wrapper name or a similar screenshot does not establish a missing capability.
6
+ Inspect exact types through `inspect-component.mjs`, including the prop/slot you
7
+ intend to use. The app owns authoritative data, permissions and persistence.
8
+
9
+ ## Product view responsibilities
10
+
11
+ | Task and input contract | Existing owner and supported seam | App responsibility / reason to extend |
12
+ | --- | --- | --- |
13
+ | Product identity, facts and optional supporting regions | `ProductOverview` from `themelia-react-ui/features/products`: `details`, `options`, `variants`, `readiness` and named `slots` | Choose only relevant regions. Page still owns route identity/commands/gutters. Add a domain subject through a region slot when its relationships need a different structure. |
14
+ | Product imagery within identity | `ProductOverview.details.media`; a standalone region can use `slots.mainTop` | There is no top-level `ProductOverview.media` prop. `details.media` also supports a media-only subject; no dummy facts are required. |
15
+ | Color/size definitions and their values, independently from a table | `ProductOptionsMatrix`: `optionGroups`, editing/collapse state, awaited `onSaveEditingOption`, `onError`, cancellation, `renderValue`, `renderOptionActions` | Preserve IDs, reconcile accepted changes with sellable variants and historical orders, and apply validation/transport. Do not replace this editor with custom buttons just to rename/remove values. |
16
+ | Definitions and variant rows in one coordinated subject | `ProductVariantsManager`: `optionGroups`, `variants`, editing/grouping/selection state, row/bulk callbacks and render seams; `showGroupBy={false}` drops the Group by control for a short list. Each option's summary row is its edit button; `renderOptionActions` adds explicit commands | Its convenience arrangement is a choice. Supply accepted rows and real commands; it does not invent combinations or warehouse policy. Use separate matrix/table owners when placement needs to differ. |
17
+ | Compare sellable SKUs, prices, availability and status | `ProductVariantsBulkTable`: `visibleColumns`, `groupByOptionId`, `cellDisplay`, `renderCell`, row and bulk callbacks. `ProductVariantsTable` supplies a simpler variant list. | Pass meaningful values and stable IDs. For one stock figure the inventory cell may suffice; keep per-location reservations or shortages as a richer related subject. |
18
+ | Inspect the selected SKU and its chosen options | `ProductVariantDetails`: `variant`, `metadata`, `media`, `renderMetadata`, `renderOption`, `footerSlot` and action callbacks | Keep its identity/actions while adding warehouse, costing or allocation evidence through an appropriate slot or sibling region. A custom fact does not require rebuilding the whole variant subject. |
19
+ | Edit ordinary variant fields and selected option choices | `ProductVariantEditor`: controlled/default values, `optionFields`, `statusOptions`, `visibleFields`, per-field `errors`, app-owned `children` fields, awaited `onSubmit`, `submitting`, `onError`, cancel and footer. Inside `ActionDrawer`, share one `formId` and set `showHeader={false}` so the drawer owns the title and commands | App validates and returns accepted state. Its inventory field is one string; hide it with `visibleFields={{ inventory: false }}` and add per-warehouse balances or unit cost as `children`, which render inside the form before its commands. |
20
+ | Upload new local product images | `MediaGallery` from `themelia-react-ui/base/media-gallery`: controlled `File[]`, `onValueChange`, MIME/extension acceptance, file limit, previews, removal and keyboard/drag sorting | Transfer and persistence remain app-owned. The first file is the cover. This is not a persisted URL-record gallery. |
21
+ | Existing images attached to a product | `MediaResourceGallery` from `themelia-react-ui/features/media-library`: `items`, typed `accessors`, `primaryId`, primary/remove/reorder callbacks, `onAdd`, `readOnly` and `renderItem` | Adapt existing IDs/URLs; accept attachment changes through app state/transport. Do not fetch remote URLs merely to manufacture `File` objects. |
22
+ | Search/select reusable assets or upload into an asset catalogue | `MediaLibrary` or `MediaLibraryDialog`: item accessors, controlled selection, fetch/upload handlers and picker callbacks | The app owns catalogue requests and attachment persistence. A simple local file field does not require this complete workflow. |
23
+
24
+ For a simple single-SKU product, omit option-definition/combination work that the
25
+ model does not have. For an optioned product, definitions, sellable combinations
26
+ and a selected variant are different jobs; they need not be three custom cards.
27
+ The [products template](../../../templates/products-template.tsx) demonstrates
28
+ the larger public workflow. Its data and callbacks are examples, not your
29
+ product's business rules. Deprecated standalone product region-card exports are
30
+ compatibility APIs; use ProductOverview regions or the dedicated active owners.
31
+
32
+ ## Media identity and lifecycle
33
+
34
+ Ask whether the input is a new browser `File[]` or already stored asset records.
35
+ Both can belong to a product gallery. The finder query `product media gallery`
36
+ therefore exposes both owners; `local product images` and `existing product
37
+ images` narrow the decision. Inspect their value and callback types before
38
+ choosing one.
39
+
40
+ MediaResourceGallery's accessors can read the app's own keys, filenames, image
41
+ URLs and alt text. It owns its frame, title and insets; use it as the region
42
+ surface instead of nesting it inside another Card. Choose `layout="grid"` or `"list"` to expose primary and
43
+ move commands; the compact `"field"` layout focuses on attachment/removal.
44
+ `onReorder` proposes IDs and records in the next order; these move controls differ
45
+ from MediaGallery's drag/keyboard file sorting. `onAdd`
46
+ usually opens the app's existing MediaLibraryDialog flow. Read-only presentation
47
+ needs no attachment commands.
48
+
49
+ `renderItem` replaces a complete gallery item, including its default controls.
50
+ Use it for an actual media-representation requirement, such as a supplied sprite
51
+ crop, while retaining the gallery's collection ownership. Reuse public buttons
52
+ and the render context's permitted primary/remove/move actions if the custom
53
+ item remains editable. A regular image URL needs no custom tile implementation.
54
+
55
+ ## Existing owners and domain-specific structure
56
+
57
+ The comparison above is not a rule to force every product into ProductOverview
58
+ or to forbid custom components. Record the required task, candidate, inspected
59
+ prop/callback/render seam and remaining mismatch. For example, a warehouse
60
+ comparison may extend ProductVariantDetails.renderMetadata or sit beside it;
61
+ option name/value editing already has ProductOptionsMatrix. Keep controls,
62
+ focus, action states and ordinary text roles with their public owners.
63
+
64
+ Return the actual save Promise from ProductOptionsMatrix/Manager's
65
+ `onSaveEditingOption`. The owner keeps the editor pending, retains a rejected
66
+ draft with retry feedback, and requests closure through
67
+ `onEditingOptionIdChange` after acceptance or cancellation. `onError` can report
68
+ the failure to the app. Do not close/reset before the Promise settles or swallow
69
+ the rejection in a fire-and-forget wrapper.
70
+
71
+ Stock reservation arithmetic, option-to-variant reconciliation, unique SKU
72
+ validation, accepted prices and publication policy belong to the app. Changing
73
+ today's catalogue never rewrites a purchased order's selected options or prices.
74
+ A thumbnail, a file picker, an attached-asset gallery and a selected variant's
75
+ media slot have different contracts even if they show the same photograph.
76
+
77
+ ## Executable product parts
78
+
79
+ The [product parts recipes](../examples/product-parts.tsx) show real option IDs,
80
+ save/cancel editing, a variant comparison with SKU/price/availability values,
81
+ the coordinated manager and a details/editor flow that retains a failed draft
82
+ until the caller returns accepted values. The option-only example edits local
83
+ definitions; it deliberately does not claim to reconcile a complete catalogue.
84
+
85
+ The [product media recipes](../examples/product-media.tsx) contrast caller-owned
86
+ File[] with typed persisted-asset accessors and attachment callbacks.
87
+ `MediaOnlyProductOverview` uses the actual details.media slot without dummy
88
+ metadata. No recipe changes a URL record into a File or imports private source.
89
+
90
+ Verify the chosen configuration: edit then cancel/save an option, preserve its
91
+ ID, select a different variant, inspect its media/stock, reject and retry a
92
+ variant save, change a cover/remove/reorder assets when supported, and inspect
93
+ narrow/wide light/dark output. Source typechecks, a retrieved symbol and the
94
+ presence of a callback do not prove those interactions or useful composition.