themelia-ui 3.0.0 → 3.2.0

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 (746) hide show
  1. package/.agents/skills/themelia-ui/SKILL.md +60 -33
  2. package/.agents/skills/themelia-ui/manifest.json +23 -0
  3. package/.agents/skills/themelia-ui/references/api-compatibility.md +5 -4
  4. package/.agents/skills/themelia-ui/references/blocks.md +123 -0
  5. package/.agents/skills/themelia-ui/references/composition-ladder.md +8 -8
  6. package/.agents/skills/themelia-ui/references/composition.md +100 -19
  7. package/.agents/skills/themelia-ui/references/forms.md +23 -3
  8. package/.agents/skills/themelia-ui/references/framework-wiring.md +41 -13
  9. package/.agents/skills/themelia-ui/references/i18n.md +4 -2
  10. package/.agents/skills/themelia-ui/references/imports.md +104 -104
  11. package/.agents/skills/themelia-ui/references/installation.md +60 -31
  12. package/.agents/skills/themelia-ui/references/migration.md +156 -5
  13. package/.agents/skills/themelia-ui/references/provider-and-scoping.md +37 -25
  14. package/.agents/skills/themelia-ui/references/reference-workflows.md +43 -0
  15. package/.agents/skills/themelia-ui/references/structure-and-spacing.md +147 -0
  16. package/.agents/skills/themelia-ui/references/theming.md +174 -131
  17. package/.agents/skills/themelia-ui/references/troubleshooting.md +88 -30
  18. package/.agents/skills/themelia-ui/references/verification.md +60 -5
  19. package/CHANGELOG.md +212 -0
  20. package/README.md +48 -60
  21. package/dist/accordion-CHuzMmWL.js +143 -0
  22. package/dist/{action-menu-BNLURfMK.js → action-menu-BwiL_F6I.js} +35 -33
  23. package/dist/{alert-dialog-BMVo6Z-8.js → alert-dialog-Cg2HhuBe.js} +1 -1
  24. package/dist/avatar-Dc_BNYfB.js +93 -0
  25. package/dist/badge-VlJVZjdm.js +45 -0
  26. package/dist/base/accordion.js +1 -1
  27. package/dist/base/action-menu.js +1 -1
  28. package/dist/base/alert-dialog.js +1 -1
  29. package/dist/base/aspect-ratio.js +3 -1
  30. package/dist/base/avatar.js +1 -1
  31. package/dist/base/badge.js +2 -2
  32. package/dist/base/batch-action-bar.js +1 -1
  33. package/dist/base/buttons.js +1 -1
  34. package/dist/base/cards.js +1 -1
  35. package/dist/base/carousel.js +6 -4
  36. package/dist/base/chart.js +1 -1
  37. package/dist/base/choice-inputs.js +1 -1
  38. package/dist/base/combobox.js +1 -1
  39. package/dist/base/command.js +1 -1
  40. package/dist/base/context-menu.js +22 -21
  41. package/dist/base/copyable.js +1 -1
  42. package/dist/base/date-pickers.js +1 -1
  43. package/dist/base/dialog.js +1 -1
  44. package/dist/base/display.js +1 -1
  45. package/dist/base/dropdown-menu.js +1 -1
  46. package/dist/base/feedback.js +1 -1
  47. package/dist/base/forms-numeric.js +1 -1
  48. package/dist/base/forms.js +1 -1
  49. package/dist/base/hover-card.js +26 -23
  50. package/dist/base/input-group.js +1 -1
  51. package/dist/base/item.js +1 -1
  52. package/dist/base/label.js +1 -1
  53. package/dist/base/menubar.js +20 -14
  54. package/dist/base/navigation-menu.js +47 -38
  55. package/dist/base/navigation.js +1 -1
  56. package/dist/base/otp-input.js +36 -30
  57. package/dist/base/overlay.js +1 -1
  58. package/dist/base/popover-menu.js +1 -1
  59. package/dist/base/popover.js +1 -1
  60. package/dist/base/qr-code.js +51 -47
  61. package/dist/base/repeaters.js +1 -1
  62. package/dist/base/resizable.js +2 -0
  63. package/dist/base/sheet.js +1 -1
  64. package/dist/base/sidebar.js +1 -1
  65. package/dist/base/skeleton.js +1 -1
  66. package/dist/base/spinner.js +1 -1
  67. package/dist/base/structure.js +1 -1
  68. package/dist/base/table.js +1 -1
  69. package/dist/base/text-inputs.js +1 -1
  70. package/dist/base/timeline.js +1 -1
  71. package/dist/base/toaster.js +1 -1
  72. package/dist/base/toggle.js +21 -15
  73. package/dist/base/toolbar.js +1 -1
  74. package/dist/base/tooltip.js +1 -1
  75. package/dist/base/typography.js +2 -2
  76. package/dist/base/upload.js +1 -1
  77. package/dist/base/value-inputs.js +1 -1
  78. package/dist/{batch-action-bar-BZYNKXdV.js → batch-action-bar-DZVMVW83.js} +11 -8
  79. package/dist/{admin/patterns → blocks/admin}/access.js +79 -76
  80. package/dist/blocks/admin/commerce.js +2493 -0
  81. package/dist/{patterns → blocks}/analytics.js +312 -303
  82. package/dist/{patterns → blocks}/onboarding.js +27 -23
  83. package/dist/{patterns → blocks}/timelines.js +1 -1
  84. package/dist/buttons-BX2JfL5X.js +173 -0
  85. package/dist/cards-Ddhz43Bz.js +279 -0
  86. package/dist/chart-BkK3Xm10.js +201 -0
  87. package/dist/choice-inputs-NwRxvmZN.js +694 -0
  88. package/dist/combobox-519ubijc.js +292 -0
  89. package/dist/command-JjApYFds.js +156 -0
  90. package/dist/comments-CCQ2QRaU.js +1443 -0
  91. package/dist/components/base/action-menu/action-menu.d.ts +1 -1
  92. package/dist/components/base/action-menu/action-menu.types.d.ts +2 -2
  93. package/dist/components/base/avatar/avatar.d.ts +5 -2
  94. package/dist/components/base/badge/badge.d.ts +10 -10
  95. package/dist/components/base/badge/badge.variants.d.ts +1 -2
  96. package/dist/components/base/badge/index.d.ts +1 -2
  97. package/dist/components/base/buttons/button.d.ts +9 -8
  98. package/dist/components/base/buttons/button.types.d.ts +2 -2
  99. package/dist/components/base/buttons/index.d.ts +1 -1
  100. package/dist/components/base/buttons/text-button.d.ts +1 -1
  101. package/dist/components/base/cards/card-actions.d.ts +1 -1
  102. package/dist/components/base/cards/card.d.ts +3 -1
  103. package/dist/components/base/cards/partials/card-header.d.ts +2 -1
  104. package/dist/components/base/choice-inputs/choice.types.d.ts +2 -2
  105. package/dist/components/base/choice-inputs/partials/choice-parts.d.ts +3 -3
  106. package/dist/components/base/command/command.d.ts +5 -2
  107. package/dist/components/base/display/icon-badge.d.ts +5 -3
  108. package/dist/components/base/display/index.d.ts +1 -1
  109. package/dist/components/base/display/metadata-list.d.ts +6 -6
  110. package/dist/components/base/display/metadata-value.d.ts +1 -1
  111. package/dist/components/base/display/separator.d.ts +2 -2
  112. package/dist/components/base/feedback/alert.d.ts +3 -2
  113. package/dist/components/base/feedback/empty.d.ts +5 -4
  114. package/dist/components/base/feedback/progress-circle.d.ts +2 -2
  115. package/dist/components/base/feedback/progress.d.ts +3 -1
  116. package/dist/components/base/forms/form-field.d.ts +2 -2
  117. package/dist/components/base/input-group/input-group.d.ts +8 -10
  118. package/dist/components/base/item/item.d.ts +2 -2
  119. package/dist/components/base/overlay/index.d.ts +1 -1
  120. package/dist/components/base/overlay/overlay.types.d.ts +7 -5
  121. package/dist/components/base/qr-code/qr-code.d.ts +4 -4
  122. package/dist/components/base/sheet/sheet.d.ts +1 -1
  123. package/dist/components/base/sidebar/sidebar.d.ts +9 -13
  124. package/dist/components/base/spinner/spinner.d.ts +2 -2
  125. package/dist/components/base/structure/adaptive-grid.d.ts +3 -3
  126. package/dist/components/base/structure/bleed.d.ts +4 -2
  127. package/dist/components/base/structure/grid.d.ts +10 -4
  128. package/dist/components/base/structure/index.d.ts +1 -1
  129. package/dist/components/base/structure/split.d.ts +4 -3
  130. package/dist/components/base/structure/stack.d.ts +5 -5
  131. package/dist/components/base/structure/structure.maps.d.ts +2 -1
  132. package/dist/components/base/structure/structure.types.d.ts +10 -4
  133. package/dist/components/base/toggle/toggle.d.ts +2 -2
  134. package/dist/components/base/toolbar/toolbar.d.ts +3 -3
  135. package/dist/components/base/typography/index.d.ts +2 -0
  136. package/dist/components/base/typography/rich-text/rich-text.variants.d.ts +9 -0
  137. package/dist/components/base/typography/text/index.d.ts +1 -0
  138. package/dist/components/base/typography/text/text.d.ts +15 -8
  139. package/dist/components/base/typography/text/text.variants.d.ts +41 -0
  140. package/dist/components/base/value-inputs/color-input.d.ts +1 -7
  141. package/dist/components/base/value-inputs/slider.d.ts +2 -7
  142. package/dist/components/{admin/patterns → blocks/admin}/commerce/vendor-profile.d.ts +2 -1
  143. package/dist/components/{patterns → blocks}/analytics/analytics.strings.d.ts +2 -5
  144. package/dist/components/features/actions/action-adapters.d.ts +3 -3
  145. package/dist/components/features/actions/actions.types.d.ts +3 -5
  146. package/dist/components/features/actions/index.d.ts +1 -1
  147. package/dist/components/features/activities/activities-feed.d.ts +1 -1
  148. package/dist/components/features/activities/activities.types.d.ts +4 -4
  149. package/dist/components/features/activities/activity-parts.d.ts +3 -3
  150. package/dist/components/features/activities/activity-row.d.ts +4 -4
  151. package/dist/components/features/activities/index.d.ts +1 -1
  152. package/dist/components/features/ai-chat/ai-chat.types.d.ts +10 -3
  153. package/dist/components/features/ai-chat/ai-message-surfaces.d.ts +1 -1
  154. package/dist/components/features/ai-chat/ai-work-surfaces.d.ts +1 -1
  155. package/dist/components/features/combobox/combobox.strings.d.ts +2 -2
  156. package/dist/components/features/combobox/fetching-combobox.d.ts +2 -1
  157. package/dist/components/features/combobox/resource-combobox.d.ts +3 -0
  158. package/dist/components/features/combobox/use-suggestions.d.ts +7 -0
  159. package/dist/components/features/event-calendar/event-calendar.types.d.ts +3 -0
  160. package/dist/components/features/media-library/index.d.ts +1 -1
  161. package/dist/components/features/media-library/media-library-parts.d.ts +4 -3
  162. package/dist/components/features/media-library/media-library-views.d.ts +4 -3
  163. package/dist/components/features/media-library/media-library.d.ts +1 -1
  164. package/dist/components/features/media-library/media-library.strings.d.ts +12 -13
  165. package/dist/components/features/media-library/media-library.types.d.ts +11 -9
  166. package/dist/components/features/media-library/media-resource-gallery.d.ts +1 -1
  167. package/dist/components/features/media-library/use-media-library.d.ts +1 -4
  168. package/dist/components/features/overlays/action-overlay-frame.d.ts +1 -1
  169. package/dist/components/features/overlays/index.d.ts +1 -1
  170. package/dist/components/features/overlays/overlay-parts.d.ts +3 -3
  171. package/dist/components/features/overlays/overlays.types.d.ts +8 -7
  172. package/dist/components/features/rich-text-editor/index.d.ts +0 -1
  173. package/dist/components/features/table/data-table-body.d.ts +1 -1
  174. package/dist/components/features/table/data-table-expanded-row.d.ts +27 -0
  175. package/dist/components/features/table/data-table-header.d.ts +1 -1
  176. package/dist/components/features/table/data-table-size.d.ts +1 -1
  177. package/dist/components/features/table/data-table.d.ts +1 -1
  178. package/dist/components/features/table/index.d.ts +1 -1
  179. package/dist/components/features/table/table-helpers.d.ts +9 -3
  180. package/dist/components/features/table/table.strings.d.ts +11 -0
  181. package/dist/components/features/table/table.types.d.ts +60 -2
  182. package/dist/components/features/theme-tweaker/index.d.ts +1 -1
  183. package/dist/components/features/theme-tweaker/theme-tweaker.strings.d.ts +1 -1
  184. package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +6 -10
  185. package/dist/components/features/theme-tweaker/theme-tweaker.utils.d.ts +22 -6
  186. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  187. package/dist/components/layout/auth/auth.d.ts +1 -1
  188. package/dist/components/layout/auth/auth.types.d.ts +1 -1
  189. package/dist/components/primitives/value.d.ts +3 -1
  190. package/dist/containers-B8d8U9GS.js +2 -0
  191. package/dist/{copyable-H1TUEY-H.js → copyable-D9Okb1w6.js} +12 -11
  192. package/dist/core.css +2 -2
  193. package/dist/css/access.css +2 -1
  194. package/dist/css/accordion.css +2 -1
  195. package/dist/css/action-menu.css +2 -1
  196. package/dist/css/activities.css +2 -1
  197. package/dist/css/ai-chat.css +2 -1
  198. package/dist/css/analytics.css +2 -1
  199. package/dist/css/app-shell.css +2 -1
  200. package/dist/css/aspect-ratio.css +2 -1
  201. package/dist/css/async-preview.css +2 -1
  202. package/dist/css/auth.css +2 -1
  203. package/dist/css/avatar.css +2 -1
  204. package/dist/css/badge.css +2 -1
  205. package/dist/css/batch-action-bar.css +2 -1
  206. package/dist/css/buttons.css +2 -1
  207. package/dist/css/cards.css +2 -1
  208. package/dist/css/carousel.css +2 -1
  209. package/dist/css/chart.css +2 -1
  210. package/dist/css/choice-inputs.css +2 -1
  211. package/dist/css/combobox.css +2 -1
  212. package/dist/css/combobox2.css +2 -1
  213. package/dist/css/command.css +2 -1
  214. package/dist/css/comments.css +2 -1
  215. package/dist/css/commerce.css +2 -1
  216. package/dist/css/containers.css +2 -1
  217. package/dist/css/copyable.css +2 -1
  218. package/dist/css/data-view.css +2 -1
  219. package/dist/css/date-pickers.css +2 -1
  220. package/dist/css/display.css +2 -1
  221. package/dist/css/dropdown-menu.css +2 -1
  222. package/dist/css/event-calendar.css +2 -1
  223. package/dist/css/feedback.css +2 -1
  224. package/dist/css/filters.css +2 -1
  225. package/dist/css/forms-numeric.css +2 -1
  226. package/dist/css/forms.css +2 -1
  227. package/dist/css/global-search.css +2 -1
  228. package/dist/css/header.css +2 -1
  229. package/dist/css/hover-card.css +2 -1
  230. package/dist/css/input-group.css +2 -1
  231. package/dist/css/item.css +2 -1
  232. package/dist/css/kanban.css +2 -1
  233. package/dist/css/label.css +2 -1
  234. package/dist/css/map.css +2 -1
  235. package/dist/css/media-library.css +2 -1
  236. package/dist/css/mentions.css +2 -1
  237. package/dist/css/menubar.css +2 -1
  238. package/dist/css/navigation-menu.css +2 -1
  239. package/dist/css/navigation.css +2 -1
  240. package/dist/css/navigation2.css +2 -1
  241. package/dist/css/onboarding.css +2 -1
  242. package/dist/css/otp-input.css +2 -1
  243. package/dist/css/overlay.css +2 -1
  244. package/dist/css/overlays.css +2 -1
  245. package/dist/css/page.css +2 -1
  246. package/dist/css/popover-menu.css +2 -1
  247. package/dist/css/popover.css +2 -1
  248. package/dist/css/primitives.css +2 -1
  249. package/dist/css/products.css +2 -1
  250. package/dist/css/qr-code.css +2 -1
  251. package/dist/css/repeaters.css +2 -1
  252. package/dist/css/resizable.css +2 -1
  253. package/dist/css/resource-assignment.css +2 -1
  254. package/dist/css/resource.css +2 -1
  255. package/dist/css/rich-text-editor.css +2 -1
  256. package/dist/css/schema-form.css +2 -1
  257. package/dist/css/sidebar.css +2 -1
  258. package/dist/css/sidebar2.css +2 -1
  259. package/dist/css/skeleton.css +2 -1
  260. package/dist/css/spinner.css +2 -1
  261. package/dist/css/structure.css +2 -1
  262. package/dist/css/sync.css +2 -1
  263. package/dist/css/table.css +2 -1
  264. package/dist/css/table2.css +2 -1
  265. package/dist/css/text-inputs.css +2 -1
  266. package/dist/css/theme-tweaker.css +2 -1
  267. package/dist/css/timeline.css +2 -1
  268. package/dist/css/timelines.css +2 -1
  269. package/dist/css/toaster.css +2 -1
  270. package/dist/css/toggle.css +2 -1
  271. package/dist/css/toolbar.css +2 -1
  272. package/dist/css/tooltip.css +2 -1
  273. package/dist/css/typography.css +2 -1
  274. package/dist/css/upload.css +2 -1
  275. package/dist/css/value-inputs.css +2 -1
  276. package/dist/css/workspace.css +2 -1
  277. package/dist/css-graph.json +1027 -0
  278. package/dist/date-pickers-BwCwKIVM.js +685 -0
  279. package/dist/{dialog-CtFCuTUF.js → dialog-CAnwRNrm.js} +1 -1
  280. package/dist/display-a7AoX_u7.js +664 -0
  281. package/dist/dropdown-menu-Br8kvjrF.js +235 -0
  282. package/dist/empty.js +0 -0
  283. package/dist/features/actions.js +6 -6
  284. package/dist/features/activities.js +219 -216
  285. package/dist/features/ai-chat.js +593 -565
  286. package/dist/features/async-preview.js +105 -286
  287. package/dist/features/combobox.js +328 -314
  288. package/dist/features/comments.js +1 -1
  289. package/dist/features/data-view.js +56 -55
  290. package/dist/features/event-calendar.js +189 -185
  291. package/dist/features/filters.js +1 -1
  292. package/dist/features/global-search.js +259 -260
  293. package/dist/features/kanban.js +39 -37
  294. package/dist/features/map.js +357 -354
  295. package/dist/features/media-library.js +931 -931
  296. package/dist/features/mentions.js +1 -1
  297. package/dist/features/overlays.js +1 -1
  298. package/dist/features/products.js +950 -942
  299. package/dist/features/resource-assignment.js +39 -37
  300. package/dist/features/resource.js +70 -71
  301. package/dist/features/rich-text-editor.js +2 -2
  302. package/dist/features/schema-form.js +342 -338
  303. package/dist/features/sync.js +14 -12
  304. package/dist/features/table.js +1 -1
  305. package/dist/features/theme-tweaker.js +1002 -962
  306. package/dist/feedback-D4qVsKlD.js +430 -0
  307. package/dist/{filters-DOLKRSmb.js → filters-BhsTkWpZ.js} +386 -383
  308. package/dist/forms-C0WeNPFF.js +250 -0
  309. package/dist/forms-numeric-IwQ1ltNf.js +582 -0
  310. package/dist/hooks/use-native-dialog.d.ts +1 -1
  311. package/dist/index.js +2 -2
  312. package/dist/input-group-HS_Z0Ei_.js +119 -0
  313. package/dist/item-M2pmpWXh.js +150 -0
  314. package/dist/{label-DumoMDm6.js → label-HOBXAscw.js} +7 -5
  315. package/dist/layout/app-shell.js +4 -2
  316. package/dist/layout/auth.js +102 -100
  317. package/dist/layout/header.js +190 -180
  318. package/dist/layout/navigation.js +1 -1
  319. package/dist/layout/page.js +18 -16
  320. package/dist/layout/settings.js +2 -2
  321. package/dist/layout/sidebar.js +50 -46
  322. package/dist/layout/workspace.js +71 -69
  323. package/dist/lib/action-presentation.d.ts +3 -3
  324. package/dist/lib/component-vocabulary.d.ts +2 -2
  325. package/dist/lib/css-length.d.ts +2 -0
  326. package/dist/lib/responsive.d.ts +1 -1
  327. package/dist/lib/theming/index.d.ts +1 -0
  328. package/dist/lib/theming/recipes.d.ts +2 -2
  329. package/dist/lib/theming/themes/dense.d.ts +3 -0
  330. package/dist/lib/theming/themes/editorial.d.ts +3 -0
  331. package/dist/lib/theming/themes/index.d.ts +8 -0
  332. package/dist/lib/theming/themes/pair.d.ts +7 -0
  333. package/dist/lib/theming/themes/sharp.d.ts +3 -0
  334. package/dist/lib/theming/themes/soft.d.ts +3 -0
  335. package/dist/lib/theming/themes/types.d.ts +12 -0
  336. package/dist/lib/ui-provider/index.d.ts +1 -1
  337. package/dist/lib/ui-provider/scope.d.ts +5 -8
  338. package/dist/lib/ui-provider/tokens.d.ts +11 -3
  339. package/dist/lib/ui-provider/tokens.generated.d.ts +6 -4
  340. package/dist/lib/ui-provider/types.d.ts +17 -19
  341. package/dist/lib/ui-provider/ui-scope.d.ts +1 -1
  342. package/dist/{mentions-BbsEHlcH.js → mentions-BOxbigwp.js} +113 -111
  343. package/dist/navigation-Bgu7Vc0M.js +622 -0
  344. package/dist/navigation-DiYACqpE.js +216 -0
  345. package/dist/overlay-BuQOl8aP.js +356 -0
  346. package/dist/{overlays-DvVoS3td.js → overlays-1sULyytH.js} +77 -75
  347. package/dist/popover-CA7SP_iz.js +127 -0
  348. package/dist/popover-menu-QXgQeWeG.js +192 -0
  349. package/dist/{primitives-D0bdDozz.js → primitives-BskKlf35.js} +181 -178
  350. package/dist/primitives.js +1 -1
  351. package/dist/profiles/admin.json +6 -36
  352. package/dist/profiles/general.json +6 -96
  353. package/dist/repeaters-CeH20dvr.js +445 -0
  354. package/dist/rich-text-editor-D_Ppm8yh.js +491 -0
  355. package/dist/{sheet-CKcmRbJ9.js → sheet-CJ1-OAla.js} +3 -3
  356. package/dist/sidebar-D8uGqxio.js +421 -0
  357. package/dist/skeleton-BTKNKTdj.js +173 -0
  358. package/dist/spinner-Tc1QCnxM.js +30 -0
  359. package/dist/{structure-D0WGQAP3.js → structure-CynEZ-OY.js} +15 -23
  360. package/dist/style.css +1 -1
  361. package/dist/styles/TOKENS.md +116 -275
  362. package/dist/styles/animation.css +114 -0
  363. package/dist/styles/base.css +7 -6
  364. package/dist/styles/fields.css +45 -63
  365. package/dist/styles/focus.css +12 -0
  366. package/dist/styles/forced-colors.css +11 -10
  367. package/dist/styles/index.css +23 -30
  368. package/dist/styles/map.css +45 -34
  369. package/dist/styles/mentions.css +14 -52
  370. package/dist/styles/overlays.css +7 -7
  371. package/dist/styles/tailwind.css +76 -127
  372. package/dist/styles/targets.css +3 -3
  373. package/dist/styles/theme/colour.css +86 -0
  374. package/dist/styles/theme/density.css +31 -0
  375. package/dist/styles/theme/elevation.css +9 -0
  376. package/dist/styles/theme/layout.css +18 -0
  377. package/dist/styles/theme/motion.css +18 -0
  378. package/dist/styles/theme/shape.css +12 -0
  379. package/dist/styles/theme/size.css +10 -0
  380. package/dist/styles/theme/spacing.css +11 -0
  381. package/dist/styles/theme/typography.css +20 -0
  382. package/dist/styles/tone.css +61 -0
  383. package/dist/table-B7dtIFUx.js +1262 -0
  384. package/dist/table-Ds_eO9av.js +191 -0
  385. package/dist/tailwind.css +76 -127
  386. package/dist/text-inputs-BboE77nZ.js +395 -0
  387. package/dist/theming-C5ygF5uf.js +292 -0
  388. package/dist/theming.js +2 -2
  389. package/dist/{timeline-BdaGRyj-.js → timeline-BR_jNgvz.js} +57 -49
  390. package/dist/{timelines-BB7550mz.js → timelines-DXG1BfIN.js} +69 -67
  391. package/dist/{toaster-bBMgXm8z.js → toaster-CXL8L7Mm.js} +106 -99
  392. package/dist/tokens.json +1027 -636
  393. package/dist/toolbar-DBK-c4yy.js +74 -0
  394. package/dist/tooltip-BPYP-jUm.js +76 -0
  395. package/dist/{typography-BkxEiwQ1.js → typography-DmeR05Er.js} +87 -53
  396. package/dist/{ui-provider-Cmoq6i_D.js → ui-provider-DpzLUD12.js} +117 -69
  397. package/dist/ui-provider.js +1 -1
  398. package/dist/upload-CYuoJykZ.js +968 -0
  399. package/dist/use-async-preview-BFwf9ElY.js +188 -0
  400. package/dist/value-inputs-ng8aVJJZ.js +728 -0
  401. package/docs/README.md +13 -3
  402. package/docs/build/browser-composition-fixture.ts +28 -0
  403. package/docs/build/recipes.md +11484 -10723
  404. package/docs/generated/component-index.json +9809 -9169
  405. package/docs/generated/components/INDEX.md +5 -5
  406. package/docs/generated/components/base--accordion.md +51 -2
  407. package/docs/generated/components/base--action-menu.md +14 -15
  408. package/docs/generated/components/base--alert-dialog.md +3 -4
  409. package/docs/generated/components/base--aspect-ratio.md +3 -4
  410. package/docs/generated/components/base--avatar.md +7 -7
  411. package/docs/generated/components/base--badge.md +159 -27
  412. package/docs/generated/components/base--batch-action-bar.md +6 -7
  413. package/docs/generated/components/base--buttons.md +151 -47
  414. package/docs/generated/components/base--cards.md +107 -14
  415. package/docs/generated/components/base--carousel.md +1 -2
  416. package/docs/generated/components/base--chart.md +44 -8
  417. package/docs/generated/components/base--choice-inputs.md +10 -11
  418. package/docs/generated/components/base--combobox.md +3 -4
  419. package/docs/generated/components/base--command.md +6 -6
  420. package/docs/generated/components/base--context-menu.md +1 -2
  421. package/docs/generated/components/base--copyable.md +6 -7
  422. package/docs/generated/components/base--date-pickers.md +6 -7
  423. package/docs/generated/components/base--dialog.md +6 -7
  424. package/docs/generated/components/base--direction.md +1 -1
  425. package/docs/generated/components/base--display.md +234 -54
  426. package/docs/generated/components/base--dropdown-menu.md +6 -7
  427. package/docs/generated/components/base--feedback.md +71 -18
  428. package/docs/generated/components/base--forms-numeric.md +6 -7
  429. package/docs/generated/components/base--forms.md +84 -14
  430. package/docs/generated/components/base--hover-card.md +3 -4
  431. package/docs/generated/components/base--input-group.md +27 -30
  432. package/docs/generated/components/base--item.md +8 -9
  433. package/docs/generated/components/base--label.md +2 -3
  434. package/docs/generated/components/base--menubar.md +2 -4
  435. package/docs/generated/components/base--navigation-menu.md +2 -3
  436. package/docs/generated/components/base--navigation.md +2 -3
  437. package/docs/generated/components/base--otp-input.md +3 -4
  438. package/docs/generated/components/base--overlay.md +56 -47
  439. package/docs/generated/components/base--popover-menu.md +7 -8
  440. package/docs/generated/components/base--popover.md +9 -10
  441. package/docs/generated/components/base--qr-code.md +7 -8
  442. package/docs/generated/components/base--repeaters.md +6 -7
  443. package/docs/generated/components/base--resizable.md +2 -3
  444. package/docs/generated/components/base--sheet.md +12 -13
  445. package/docs/generated/components/base--sidebar.md +9 -11
  446. package/docs/generated/components/base--skeleton.md +6 -7
  447. package/docs/generated/components/base--slot.md +1 -1
  448. package/docs/generated/components/base--spinner.md +5 -7
  449. package/docs/generated/components/base--structure.md +320 -70
  450. package/docs/generated/components/base--table.md +61 -3
  451. package/docs/generated/components/base--text-inputs.md +17 -18
  452. package/docs/generated/components/base--timeline.md +45 -4
  453. package/docs/generated/components/base--toaster.md +43 -12
  454. package/docs/generated/components/base--toggle.md +11 -12
  455. package/docs/generated/components/base--toolbar.md +7 -8
  456. package/docs/generated/components/base--tooltip.md +5 -6
  457. package/docs/generated/components/base--typography.md +317 -32
  458. package/docs/generated/components/base--upload.md +8 -9
  459. package/docs/generated/components/base--value-inputs.md +9 -38
  460. package/docs/generated/components/{admin--patterns--access.md → blocks--admin--access.md} +15 -6
  461. package/docs/generated/components/{admin--patterns--commerce.md → blocks--admin--commerce.md} +40 -41
  462. package/docs/generated/components/{patterns--analytics.md → blocks--analytics.md} +57 -14
  463. package/docs/generated/components/{patterns--onboarding.md → blocks--onboarding.md} +6 -7
  464. package/docs/generated/components/{patterns--timelines.md → blocks--timelines.md} +6 -7
  465. package/docs/generated/components/features--actions.md +8 -18
  466. package/docs/generated/components/features--activities.md +31 -32
  467. package/docs/generated/components/features--ai-chat.md +15 -15
  468. package/docs/generated/components/features--async-preview.md +5 -6
  469. package/docs/generated/components/features--combobox.md +71 -5
  470. package/docs/generated/components/features--comments.md +0 -1
  471. package/docs/generated/components/features--data-view.md +63 -8
  472. package/docs/generated/components/features--event-calendar.md +1 -2
  473. package/docs/generated/components/features--filters.md +11 -2
  474. package/docs/generated/components/features--global-search.md +1 -2
  475. package/docs/generated/components/features--kanban.md +1 -2
  476. package/docs/generated/components/features--map.md +1 -2
  477. package/docs/generated/components/features--media-library.md +105 -38
  478. package/docs/generated/components/features--mentions.md +7 -7
  479. package/docs/generated/components/features--overlays.md +75 -22
  480. package/docs/generated/components/features--products.md +10 -11
  481. package/docs/generated/components/features--resource-assignment.md +2 -3
  482. package/docs/generated/components/features--resource.md +3 -4
  483. package/docs/generated/components/features--rich-text-editor.md +42 -13
  484. package/docs/generated/components/features--schema-form.md +1 -2
  485. package/docs/generated/components/features--sync.md +2 -3
  486. package/docs/generated/components/features--table.md +162 -12
  487. package/docs/generated/components/features--theme-tweaker.md +30 -15
  488. package/docs/generated/components/forms.md +2 -2
  489. package/docs/generated/components/layout--app-shell.md +41 -11
  490. package/docs/generated/components/layout--auth.md +8 -9
  491. package/docs/generated/components/layout--containers.md +40 -1
  492. package/docs/generated/components/layout--header.md +2 -3
  493. package/docs/generated/components/layout--navigation.md +0 -1
  494. package/docs/generated/components/layout--page.md +33 -5
  495. package/docs/generated/components/layout--settings.md +0 -1
  496. package/docs/generated/components/layout--sidebar.md +47 -7
  497. package/docs/generated/components/layout--workspace.md +3 -4
  498. package/docs/generated/components/primitives.md +128 -17
  499. package/docs/generated/components/theming.md +147 -4
  500. package/docs/generated/components/ui-provider.md +96 -78
  501. package/docs/generated/composition-ladder.md +8 -8
  502. package/docs/generated/consumer-contract.json +5736 -0
  503. package/docs/generated/imports.md +104 -104
  504. package/docs/generated/migration-broad-imports.json +267 -90
  505. package/docs/generated/migration-broad-imports.md +266 -101
  506. package/docs/generated/migration-codemod.json +365 -70
  507. package/docs/generated/migration.md +665 -95
  508. package/docs/generated/profiles.md +27 -27
  509. package/docs/generated/public-api.md +104 -102
  510. package/docs/generated/recipes.json +755 -810
  511. package/docs/generated/workflows/communications-overview/analytics/communications-reference.tsx +19 -0
  512. package/docs/generated/workflows/index.json +691 -0
  513. package/docs/generated/workflows/media-picking/media-library/media-picking-reference.tsx +63 -0
  514. package/docs/generated/workflows/media-picking/media-library/reference-data.ts +3 -0
  515. package/docs/generated/workflows/multi-section-form/form-workflow/multi-section-reference.tsx +46 -0
  516. package/docs/generated/workflows/nested-action-flow/action-overlays/nested-action-reference.tsx +39 -0
  517. package/docs/generated/workflows/record-detail/page-layout/record-detail-reference.tsx +24 -0
  518. package/docs/generated/workflows/resource-index/data-view/resource-index-reference.tsx +51 -0
  519. package/docs/generated/workflows/scoped-resource-selection/combobox/scoped-resource-reference.tsx +50 -0
  520. package/docs/generated/workflows/website-content-editor/media-library/reference-data.ts +3 -0
  521. package/docs/generated/workflows/website-content-editor/rich-text-editor/website-content-reference.tsx +33 -0
  522. package/docs/generated/workflows/workspace-navigation/app-shell/workspace-navigation-reference.tsx +26 -0
  523. package/docs/learn/api-compatibility.md +5 -4
  524. package/docs/learn/blocks.md +123 -0
  525. package/docs/learn/composition.md +100 -19
  526. package/docs/learn/forms.md +23 -3
  527. package/docs/learn/framework-wiring.md +41 -13
  528. package/docs/learn/i18n.md +4 -2
  529. package/docs/learn/installation.md +60 -31
  530. package/docs/learn/migration.md +156 -5
  531. package/docs/learn/provider-and-scoping.md +37 -25
  532. package/docs/learn/reference-workflows.md +43 -0
  533. package/docs/learn/structure-and-spacing.md +147 -0
  534. package/docs/learn/theming.md +174 -131
  535. package/docs/learn/troubleshooting.md +88 -30
  536. package/docs/learn/verification.md +60 -5
  537. package/package.json +42 -473
  538. package/scripts/consumer/codemod.mjs +50 -32
  539. package/scripts/consumer/contract-reader.mjs +42 -0
  540. package/scripts/consumer/css-scan.mjs +51 -0
  541. package/scripts/consumer/diagnose.mjs +136 -0
  542. package/scripts/consumer/find-component.mjs +30 -17
  543. package/scripts/consumer/install-skill.mjs +93 -11
  544. package/src/styles/TOKENS.md +116 -275
  545. package/dist/accordion-6YPJ9XRO.js +0 -135
  546. package/dist/admin/patterns/access.css +0 -15
  547. package/dist/admin/patterns/commerce.css +0 -29
  548. package/dist/admin/patterns/commerce.js +0 -2493
  549. package/dist/avatar-CS7zow2q.js +0 -85
  550. package/dist/badge-CxOuTfVr.js +0 -63
  551. package/dist/base/accordion.css +0 -3
  552. package/dist/base/action-menu.css +0 -6
  553. package/dist/base/alert-dialog.css +0 -4
  554. package/dist/base/aspect-ratio.css +0 -2
  555. package/dist/base/avatar.css +0 -4
  556. package/dist/base/badge.css +0 -2
  557. package/dist/base/batch-action-bar.css +0 -5
  558. package/dist/base/buttons.css +0 -4
  559. package/dist/base/cards.css +0 -13
  560. package/dist/base/carousel.css +0 -5
  561. package/dist/base/chart.css +0 -2
  562. package/dist/base/choice-inputs.css +0 -10
  563. package/dist/base/combobox.css +0 -3
  564. package/dist/base/command.css +0 -9
  565. package/dist/base/context-menu.css +0 -2
  566. package/dist/base/copyable.css +0 -6
  567. package/dist/base/date-pickers.css +0 -11
  568. package/dist/base/dialog.css +0 -4
  569. package/dist/base/display.css +0 -8
  570. package/dist/base/dropdown-menu.css +0 -2
  571. package/dist/base/feedback.css +0 -5
  572. package/dist/base/forms-numeric.css +0 -12
  573. package/dist/base/forms.css +0 -14
  574. package/dist/base/hover-card.css +0 -2
  575. package/dist/base/input-group.css +0 -6
  576. package/dist/base/item.css +0 -9
  577. package/dist/base/label.css +0 -3
  578. package/dist/base/menubar.css +0 -2
  579. package/dist/base/navigation-menu.css +0 -2
  580. package/dist/base/navigation.css +0 -12
  581. package/dist/base/otp-input.css +0 -9
  582. package/dist/base/overlay.css +0 -4
  583. package/dist/base/popover-menu.css +0 -11
  584. package/dist/base/popover.css +0 -3
  585. package/dist/base/qr-code.css +0 -2
  586. package/dist/base/repeaters.css +0 -18
  587. package/dist/base/resizable.css +0 -2
  588. package/dist/base/sheet.css +0 -4
  589. package/dist/base/sidebar.css +0 -12
  590. package/dist/base/skeleton.css +0 -9
  591. package/dist/base/spinner.css +0 -2
  592. package/dist/base/structure.css +0 -2
  593. package/dist/base/table.css +0 -3
  594. package/dist/base/text-inputs.css +0 -2
  595. package/dist/base/timeline.css +0 -9
  596. package/dist/base/toaster.css +0 -2
  597. package/dist/base/toggle.css +0 -2
  598. package/dist/base/toolbar.css +0 -5
  599. package/dist/base/tooltip.css +0 -2
  600. package/dist/base/typography.css +0 -2
  601. package/dist/base/upload.css +0 -10
  602. package/dist/base/value-inputs.css +0 -14
  603. package/dist/buttons-CqXKWty3.js +0 -179
  604. package/dist/cards-C6Ulbkw7.js +0 -271
  605. package/dist/chart-nomhJ87z.js +0 -193
  606. package/dist/choice-inputs-OUDn0kQw.js +0 -680
  607. package/dist/combobox-C8oP92bT.js +0 -266
  608. package/dist/command-Bp3B6pUu.js +0 -143
  609. package/dist/comments-CAnDlyXO.js +0 -1438
  610. package/dist/components/admin/patterns/index.d.ts +0 -2
  611. package/dist/components/features/rich-text-editor/exec-command-engine.d.ts +0 -2
  612. package/dist/components/patterns/index.d.ts +0 -3
  613. package/dist/css/styles.css +0 -1
  614. package/dist/date-pickers-DOwIT-Nk.js +0 -661
  615. package/dist/display-B3Q17h5z.js +0 -645
  616. package/dist/dropdown-menu-TyNLCLML.js +0 -223
  617. package/dist/features/actions.css +0 -11
  618. package/dist/features/activities.css +0 -25
  619. package/dist/features/ai-chat.css +0 -14
  620. package/dist/features/async-preview.css +0 -10
  621. package/dist/features/combobox.css +0 -12
  622. package/dist/features/comments.css +0 -24
  623. package/dist/features/data-view.css +0 -31
  624. package/dist/features/event-calendar.css +0 -17
  625. package/dist/features/filters.css +0 -24
  626. package/dist/features/global-search.css +0 -19
  627. package/dist/features/kanban.css +0 -7
  628. package/dist/features/map.css +0 -15
  629. package/dist/features/media-library.css +0 -27
  630. package/dist/features/mentions.css +0 -17
  631. package/dist/features/overlays.css +0 -11
  632. package/dist/features/products.css +0 -29
  633. package/dist/features/resource-assignment.css +0 -14
  634. package/dist/features/resource.css +0 -15
  635. package/dist/features/rich-text-editor.css +0 -8
  636. package/dist/features/schema-form.css +0 -22
  637. package/dist/features/sync.css +0 -11
  638. package/dist/features/table.css +0 -20
  639. package/dist/features/theme-tweaker.css +0 -27
  640. package/dist/feedback-DRerHGuV.js +0 -469
  641. package/dist/forms-CPrGGif_.js +0 -242
  642. package/dist/forms-numeric-CPVsL7Vf.js +0 -569
  643. package/dist/index.css +0 -3
  644. package/dist/input-group-BYe0rhoB.js +0 -126
  645. package/dist/item-B3yQ26as.js +0 -146
  646. package/dist/layout/app-shell.css +0 -13
  647. package/dist/layout/auth.css +0 -14
  648. package/dist/layout/containers.css +0 -2
  649. package/dist/layout/header.css +0 -20
  650. package/dist/layout/navigation.css +0 -11
  651. package/dist/layout/page.css +0 -15
  652. package/dist/layout/settings.css +0 -16
  653. package/dist/layout/sidebar.css +0 -16
  654. package/dist/layout/workspace.css +0 -15
  655. package/dist/navigation-CsqTA16F.js +0 -614
  656. package/dist/navigation-DzxzPuwg.js +0 -202
  657. package/dist/overlay-WQOsLd69.js +0 -345
  658. package/dist/patterns/analytics.css +0 -15
  659. package/dist/patterns/onboarding.css +0 -11
  660. package/dist/patterns/timelines.css +0 -11
  661. package/dist/popover-DriLnIFc.js +0 -123
  662. package/dist/popover-menu-C2UCMAe7.js +0 -189
  663. package/dist/primitives.css +0 -3
  664. package/dist/repeaters-DuP1N0nw.js +0 -438
  665. package/dist/rich-text-editor-BQXFe9oN.js +0 -595
  666. package/dist/sidebar-D0N6ckJL.js +0 -412
  667. package/dist/skeleton-DGR9df28.js +0 -172
  668. package/dist/spinner-CUAVFecI.js +0 -52
  669. package/dist/styles/FACTORS.md +0 -36
  670. package/dist/styles/SCOPES.md +0 -86
  671. package/dist/styles/themes/default.css +0 -164
  672. package/dist/styles/theming/animation.css +0 -143
  673. package/dist/styles/theming/colors.css +0 -97
  674. package/dist/styles/theming/feedback.css +0 -17
  675. package/dist/styles/theming/field.css +0 -21
  676. package/dist/styles/theming/focus.css +0 -88
  677. package/dist/styles/theming/layers.css +0 -13
  678. package/dist/styles/theming/layout.css +0 -21
  679. package/dist/styles/theming/motion.css +0 -42
  680. package/dist/styles/theming/overlay.css +0 -52
  681. package/dist/styles/theming/sizing.css +0 -118
  682. package/dist/styles/theming/text.css +0 -30
  683. package/dist/styles/theming/typography.css +0 -26
  684. package/dist/styles/tokens/components.css +0 -22
  685. package/dist/styles/tokens/foundation.css +0 -80
  686. package/dist/styles/tokens/layout.css +0 -19
  687. package/dist/styles/tokens/palette.css +0 -88
  688. package/dist/styles/tokens/primitives.css +0 -18
  689. package/dist/styles/tokens/states.css +0 -77
  690. package/dist/table-BC4qqsUb.js +0 -180
  691. package/dist/table-BHDpjajL.js +0 -982
  692. package/dist/text-inputs-DF_lD7pA.js +0 -385
  693. package/dist/theming-D6KRU7hO.js +0 -104
  694. package/dist/toolbar-DWRywF0R.js +0 -68
  695. package/dist/tooltip-t1VQQ2tZ.js +0 -73
  696. package/dist/upload-B38YZeFJ.js +0 -938
  697. package/dist/value-inputs-Q4ymjXlV.js +0 -716
  698. package/src/styles/FACTORS.md +0 -36
  699. package/src/styles/SCOPES.md +0 -86
  700. /package/dist/components/{admin/patterns → blocks/admin}/access/admin.strings.d.ts +0 -0
  701. /package/dist/components/{admin/patterns → blocks/admin}/access/credential-list.d.ts +0 -0
  702. /package/dist/components/{admin/patterns → blocks/admin}/access/index.d.ts +0 -0
  703. /package/dist/components/{admin/patterns → blocks/admin}/access/role-permissions.d.ts +0 -0
  704. /package/dist/components/{admin/patterns → blocks/admin}/access/sensitive-action.d.ts +0 -0
  705. /package/dist/components/{admin/patterns → blocks/admin}/commerce/account.d.ts +0 -0
  706. /package/dist/components/{admin/patterns → blocks/admin}/commerce/address-lines.d.ts +0 -0
  707. /package/dist/components/{admin/patterns → blocks/admin}/commerce/booking.d.ts +0 -0
  708. /package/dist/components/{admin/patterns → blocks/admin}/commerce/cart.d.ts +0 -0
  709. /package/dist/components/{admin/patterns → blocks/admin}/commerce/commerce.strings.d.ts +0 -0
  710. /package/dist/components/{admin/patterns → blocks/admin}/commerce/commerce.types.d.ts +0 -0
  711. /package/dist/components/{admin/patterns → blocks/admin}/commerce/format-amount.d.ts +0 -0
  712. /package/dist/components/{admin/patterns → blocks/admin}/commerce/index.d.ts +0 -0
  713. /package/dist/components/{admin/patterns → blocks/admin}/commerce/inventory-section.d.ts +0 -0
  714. /package/dist/components/{admin/patterns → blocks/admin}/commerce/invoice.d.ts +0 -0
  715. /package/dist/components/{admin/patterns → blocks/admin}/commerce/loyalty.d.ts +0 -0
  716. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-customer.d.ts +0 -0
  717. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-detail.d.ts +0 -0
  718. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-line-item.d.ts +0 -0
  719. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-transactions.d.ts +0 -0
  720. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order.d.ts +0 -0
  721. /package/dist/components/{admin/patterns → blocks/admin}/commerce/seo-listing.d.ts +0 -0
  722. /package/dist/components/{admin/patterns → blocks/admin}/commerce/seo-score.d.ts +0 -0
  723. /package/dist/components/{admin/patterns → blocks/admin}/commerce/summary-panel.d.ts +0 -0
  724. /package/dist/components/{patterns → blocks}/analytics/activity-heatmap.d.ts +0 -0
  725. /package/dist/components/{patterns → blocks}/analytics/analytics.types.d.ts +0 -0
  726. /package/dist/components/{patterns → blocks}/analytics/chart-card.d.ts +0 -0
  727. /package/dist/components/{patterns → blocks}/analytics/format-metric-value.d.ts +0 -0
  728. /package/dist/components/{patterns → blocks}/analytics/index.d.ts +0 -0
  729. /package/dist/components/{patterns → blocks}/analytics/metric-bar.d.ts +0 -0
  730. /package/dist/components/{patterns → blocks}/analytics/metric-comparison.d.ts +0 -0
  731. /package/dist/components/{patterns → blocks}/analytics/metric-gradient.d.ts +0 -0
  732. /package/dist/components/{patterns → blocks}/analytics/metric-grid.d.ts +0 -0
  733. /package/dist/components/{patterns → blocks}/analytics/metric-micro-grid.d.ts +0 -0
  734. /package/dist/components/{patterns → blocks}/analytics/metric-skeleton.d.ts +0 -0
  735. /package/dist/components/{patterns → blocks}/analytics/metric-trend-chip.d.ts +0 -0
  736. /package/dist/components/{patterns → blocks}/analytics/metric.d.ts +0 -0
  737. /package/dist/components/{patterns → blocks}/analytics/time-ruler.d.ts +0 -0
  738. /package/dist/components/{patterns → blocks}/onboarding/checklist.d.ts +0 -0
  739. /package/dist/components/{patterns → blocks}/onboarding/index.d.ts +0 -0
  740. /package/dist/components/{patterns → blocks}/onboarding/onboarding.strings.d.ts +0 -0
  741. /package/dist/components/{patterns → blocks}/timelines/changelog-timeline.d.ts +0 -0
  742. /package/dist/components/{patterns → blocks}/timelines/index.d.ts +0 -0
  743. /package/dist/components/{patterns → blocks}/timelines/milestones-timeline.d.ts +0 -0
  744. /package/dist/components/{patterns → blocks}/timelines/steps.d.ts +0 -0
  745. /package/dist/components/{patterns → blocks}/timelines/timelines.strings.d.ts +0 -0
  746. /package/dist/styles/{theming/breakpoints.css → breakpoints.css} +0 -0
@@ -8,14 +8,13 @@ A resource is shared with or assigned to principals through a dialog.
8
8
 
9
9
  - **Use when:** A resource is shared with or assigned to principals through a dialog.
10
10
  - **Avoid when:** You are displaying permissions rather than changing them.
11
- - **Consider instead:** `admin/patterns/access`, `features/overlays`
11
+ - **Consider instead:** `blocks/admin/access`, `features/overlays`
12
12
  - **Stability:** stable.
13
13
 
14
14
  ## Import
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { DefaultDialogContent } from "themelia-ui/features/resource-assignment"
18
- import "themelia-ui/features/resource-assignment.css"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -366,7 +365,7 @@ function RecoverableVenuePicker({
366
365
  error,
367
366
  }: SharedResourceSelectorProps<VenueHit, { error: string | null }>) {
368
367
  return (
369
- <Stack gap="md">
368
+ <Stack gap="sm">
370
369
  {!!error && <Alert tone="destructive">{error}</Alert>}
371
370
  <VenuePicker selected={selected} onSelect={onSelect} inModal />
372
371
  </Stack>
@@ -15,7 +15,6 @@ A record's index or show page needs its standard shell — header, actions bar a
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { ResourceActionBar } from "themelia-ui/features/resource"
18
- import "themelia-ui/features/resource.css"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -317,7 +316,7 @@ export default function ResourceIndex() {
317
316
  <Button
318
317
  key={option}
319
318
  tone={state === option ? "primary" : "neutral"}
320
- buttonStyle={state === option ? "solid" : "outline"}
319
+ appearance={state === option ? "solid" : "outline"}
321
320
  onClick={() => setState(option)}
322
321
  >
323
322
  {option}
@@ -330,7 +329,7 @@ export default function ResourceIndex() {
330
329
  description="Everything billed on this account."
331
330
  actions={
332
331
  <>
333
- <Button tone="neutral" buttonStyle="outline">
332
+ <Button tone="neutral" appearance="outline">
334
333
  <DownloadIcon />
335
334
  Export
336
335
  </Button>
@@ -390,7 +389,7 @@ export default function ResourceShow() {
390
389
  { label: "Amount", value: { kind: "money", value: 48_200, currency: "USD" } },
391
390
  { label: "Terms", value: "Net 14" },
392
391
  ]} />}
393
- actions={<Button tone="neutral" buttonStyle="outline">Send reminder</Button>}
392
+ actions={<Button tone="neutral" appearance="outline">Send reminder</Button>}
394
393
  />
395
394
  ),
396
395
  aside: (
@@ -15,7 +15,6 @@ Users author formatted content with a toolbar and counts.
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { EditorCounts } from "themelia-ui/features/rich-text-editor"
18
- import "themelia-ui/features/rich-text-editor.css"
19
18
  ```
20
19
 
21
20
  ## Optional peers
@@ -35,14 +34,6 @@ outside the package and arrives through the public props, callbacks, slots, or a
35
34
 
36
35
  ## Public declarations
37
36
 
38
- ### `createExecCommandEngine`
39
-
40
- Kind: callable.
41
-
42
- ```text
43
- (element: HTMLElement) => RichTextEngine
44
- ```
45
-
46
37
  ### `defaultRichTextEditorStrings`
47
38
 
48
39
  Kind: const.
@@ -315,6 +306,44 @@ The shape the toolbar renders. Built-ins and consumer items resolve to this.
315
306
 
316
307
  Preview route: Rich text editor — `/rich-text-editor`
317
308
 
309
+ ### Website content reference
310
+
311
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
312
+ import { useState } from "react"
313
+ import { Button } from "themelia-ui/base/buttons"
314
+ import { Card } from "themelia-ui/base/cards"
315
+ import { PillRadioGroup } from "themelia-ui/base/choice-inputs"
316
+ import { FormField } from "themelia-ui/base/forms"
317
+ import { Stack } from "themelia-ui/base/structure"
318
+ import { Input } from "themelia-ui/base/text-inputs"
319
+ import { RichText, Text } from "themelia-ui/base/typography"
320
+ import { MediaLibraryDialog, type MediaLibraryItem } from "themelia-ui/features/media-library"
321
+ import { RichTextEditor } from "themelia-ui/features/rich-text-editor"
322
+ import { SAMPLE_MEDIA } from "../media-library/reference-data"
323
+
324
+ export default function WebsiteContentReference() {
325
+ const [locale, setLocale] = useState("en")
326
+ const [drafts, setDrafts] = useState<Record<string, string>>({ en: "<p>Welcome to our workspace.</p>", ar: "<p>مرحباً بكم</p>" })
327
+ const [mediaOpen, setMediaOpen] = useState(false)
328
+ const [image, setImage] = useState<MediaLibraryItem>()
329
+ const [alt, setAlt] = useState("")
330
+ const [failed, setFailed] = useState(true)
331
+ const [pending, setPending] = useState(false)
332
+ const [message, setMessage] = useState("Drafts are local until saved")
333
+ return <Card title="Website content" description="Each locale owns a retained draft. Preview sanitizes HTML; the application also validates and sanitizes persisted content.">
334
+ <Stack>
335
+ <PillRadioGroup aria-label="Content locale" name="reference-content-locale" value={locale} onValueChange={value => value && setLocale(value)} options={[{ value: "en", label: "English" }, { value: "ar", label: "العربية" }]} />
336
+ <div dir={locale === "ar" ? "rtl" : "ltr"}><RichTextEditor value={drafts[locale] ?? ""} onValueChange={html => setDrafts(current => ({ ...current, [locale]: html }))} /></div>
337
+ <MediaLibraryDialog open={mediaOpen} trigger={<Button tone="neutral" appearance="outline">Choose hero media</Button>} onOpenChange={setMediaOpen} items={SAMPLE_MEDIA} selectionMode="single" confirmOnSelect allowUpload={false} onConfirm={items => { const item = items[0]; setImage(item); setAlt(item?.alt ?? ""); setMediaOpen(false) }} />
338
+ {image && <FormField label="Hero image alternative text" hint={image.name}><Input value={alt} onChange={event => setAlt(event.target.value)} /></FormField>}
339
+ <Stack direction="horizontal" wrap gap="sm"><Button disabled={pending} onClick={async () => { if (pending) return; setPending(true); await new Promise(resolve => setTimeout(resolve, 250)); setMessage(failed ? "Save failed. All locale drafts and image text remain here." : "Mock website save completed"); setPending(false) }}>Save website content</Button><Button tone="neutral" appearance="outline" onClick={() => setFailed(value => !value)}>Toggle save failure</Button></Stack>
340
+ <Text role="status">{message}</Text>
341
+ <RichText html={drafts[locale] ?? ""} />
342
+ </Stack>
343
+ </Card>
344
+ }
345
+ ```
346
+
318
347
  ### The editor and what comes out
319
348
 
320
349
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
@@ -341,14 +370,14 @@ export default function Editor() {
341
370
  maxLength={280}
342
371
  />
343
372
 
344
- <Stack gap="xs">
373
+ <Stack gap="sm">
345
374
  <DisplayLabel>Emitted HTML</DisplayLabel>
346
- <Text size="xs" type="secondary" className={styles.source}>
375
+ <Text size="xs" type="secondary" mono className={styles.source}>
347
376
  {body || "(empty)"}
348
377
  </Text>
349
378
  </Stack>
350
379
 
351
- <Stack gap="xs">
380
+ <Stack gap="sm">
352
381
  <DisplayLabel>Rendered through RichText</DisplayLabel>
353
382
  <RichText html={body} />
354
383
  </Stack>
@@ -395,7 +424,7 @@ export default function EditorCompact() {
395
424
  },
396
425
  ]}
397
426
  footerSlot={
398
- <Stack direction="horizontal" align="center" justify="between" gap="md">
427
+ <Stack direction="horizontal" align="center" justify="between" gap="sm">
399
428
  <Text size="xs" type="secondary">
400
429
  Markdown is not parsed — use the toolbar.
401
430
  </Text>
@@ -15,12 +15,11 @@ Fields are generated from a schema at runtime rather than written by hand.
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { SchemaForm } from "themelia-ui/features/schema-form"
18
- import "themelia-ui/features/schema-form.css"
19
18
  ```
20
19
 
21
20
  ## Composition
22
21
 
23
- This module composes `base/badge`, `base/buttons`, `base/choice-inputs`, `base/display`, `base/feedback`, `base/forms`, `base/forms-numeric`, `base/structure`, `base/text-inputs`, `base/value-inputs`.
22
+ This module composes `base/badge`, `base/buttons`, `base/choice-inputs`, `base/display`, `base/feedback`, `base/forms`, `base/forms-numeric`, `base/structure`, `base/text-inputs`, `base/typography`, `base/value-inputs`.
24
23
 
25
24
  Application policy—routing, fetching, persistence, permissions, and translation—stays
26
25
  outside the package and arrives through the public props, callbacks, slots, or accessors below.
@@ -15,7 +15,6 @@ A synchronisation run is configured over a date range.
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { SyncRangeForm } from "themelia-ui/features/sync"
18
- import "themelia-ui/features/sync.css"
19
18
  ```
20
19
 
21
20
  ## Optional peers
@@ -143,8 +142,8 @@ export default function SyncRangeFormExample() {
143
142
  syncOptions={SYNC_OPTIONS}
144
143
  onSubmit={(data) => setSubmitted(`${data.hours}h · ${data.options.join(", ") || "everything"}`)}
145
144
  />
146
- <Stack direction="horizontal" gap="md" align="center">
147
- <Button type="submit" form="sync-demo" buttonStyle="outline">
145
+ <Stack direction="horizontal" gap="sm" align="center">
146
+ <Button type="submit" form="sync-demo" appearance="outline">
148
147
  Run sync
149
148
  </Button>
150
149
  {!!submitted && <Text size="sm" type="secondary">submitted: {submitted}</Text>}
@@ -15,7 +15,6 @@ A table needs columns, sorting, selection, cell renderers and a toolbar.
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { AvatarCell } from "themelia-ui/features/table"
18
- import "themelia-ui/features/table.css"
19
18
  ```
20
19
 
21
20
  ## Optional peers
@@ -28,7 +27,7 @@ npm install @tanstack/react-table
28
27
 
29
28
  ## Composition
30
29
 
31
- This module composes `base/action-menu`, `base/avatar`, `base/badge`, `base/batch-action-bar`, `base/buttons`, `base/choice-inputs`, `base/display`, `base/feedback`, `base/navigation`, `base/table`, `base/text-inputs`, `base/toolbar`, `base/typography`.
30
+ This module composes `base/action-menu`, `base/avatar`, `base/badge`, `base/batch-action-bar`, `base/buttons`, `base/choice-inputs`, `base/display`, `base/feedback`, `base/navigation`, `base/skeleton`, `base/table`, `base/text-inputs`, `base/toolbar`, `base/typography`, `features/async-preview`.
32
31
 
33
32
  Application policy—routing, fetching, persistence, permissions, and translation—stays
34
33
  outside the package and arrives through the public props, callbacks, slots, or accessors below.
@@ -240,7 +239,7 @@ Kind: callable.
240
239
  **Alternatives:** DataView.
241
240
 
242
241
  ```text
243
- ({ size, surface, headerTransparent, columns, data, columnGroups, enableSorting, enableFiltering, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, enableColumnVisibility, manualSorting, fullscreen: controlledFullscreen, defaultFullscreen, onFullscreenChange, showFullscreenToggle, stickyHeader, stickyToolbar, stickyFirstColumn, maxBodyHeight, fillAvailableHeight, striped, emptyStateMessage, emptyStateAction, className, rowClassName, cellClassName, headerClassName, wrapperClassName, tableContainerClassName, strings: stringsOverride, filterColumn, filterPlaceholder, topbarContent, topbarEnd, topbarClassName, toolbarLabelVisibility, footerContent, selectionToolbar, bulkActions, selectionToolbarClassName, rowActions, rowActionsMenuLabel, rowActionsDisplayMode, rowActionsBreakpoint, pageCount, page, onPageChange, totalRowCount, pageSize, onRowClick, onRowSelectionChange, onSortingChange, onColumnVisibilityChange, onColumnFiltersChange, getRowId, rowSelection: controlledRowSelection, sorting: controlledSorting, defaultSorting, columnVisibility: controlledColumnVisibility, defaultColumnVisibility, initialState, storageKey, style, }: DataTableProps<TData, TValue>) => import("react").JSX.Element
242
+ ({ size, surface, headerTransparent, columns, data, columnGroups, enableSorting, enableFiltering, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, enableColumnVisibility, manualSorting, fullscreen: controlledFullscreen, defaultFullscreen, onFullscreenChange, showFullscreenToggle, stickyHeader, stickyToolbar, stickyFirstColumn, maxBodyHeight, fillAvailableHeight, striped, emptyStateMessage, emptyStateAction, className, rowClassName, cellClassName, headerClassName, wrapperClassName, tableContainerClassName, strings: stringsOverride, filterColumn, filterPlaceholder, topbarContent, topbarEnd, topbarClassName, toolbarLabelVisibility, footerContent, selectionToolbar, bulkActions, selectionToolbarClassName, rowActions, rowActionsMenuLabel, rowActionsDisplayMode, rowActionsBreakpoint, pageCount, page, onPageChange, totalRowCount, pageSize, onRowClick, expandedRow, onRowSelectionChange, onSortingChange, onColumnVisibilityChange, onColumnFiltersChange, getRowId, rowSelection: controlledRowSelection, sorting: controlledSorting, defaultSorting, columnVisibility: controlledColumnVisibility, defaultColumnVisibility, initialState, storageKey, style, }: DataTableProps<TData, TValue, TDetail>) => import("react").JSX.Element
244
243
  ```
245
244
 
246
245
  ### `DataTableActions`
@@ -274,7 +273,7 @@ Kind: callable.
274
273
  The body rows, and the row that stands in for all of them when there are none.
275
274
 
276
275
  ```text
277
- ({ table, onRowClick, emptyStateMessage, emptyStateAction, cellClassName, rowClassName, stickyFirstColumn, hasSelectionColumn, striped, strings, }: DataTableBodyProps<TData>) => import("react").JSX.Element
276
+ ({ table, onRowClick, emptyStateMessage, emptyStateAction, cellClassName, rowClassName, stickyFirstColumn, hasSelectionColumn, hasExpandColumn, expandedRow, expansionId, striped, strings, }: DataTableBodyProps<TData>) => import("react").JSX.Element
278
277
  ```
279
278
 
280
279
  ### `DataTableBodyProps`
@@ -291,9 +290,41 @@ Kind: interface.
291
290
  | `rowClassName` | no | `string \| ((row: Row<TData>, index: number) => string)` | |
292
291
  | `stickyFirstColumn` | no | `boolean` | |
293
292
  | `hasSelectionColumn` | no | `boolean` | Whether column 0 is the selection checkbox, so the pinned pair covers the identity column too. |
293
+ | `hasExpandColumn` | no | `boolean` | Whether the expand toggle column leads the row (after any checkbox), for the pinned group. |
294
+ | `expandedRow` | no | `DataTableExpandedRow<TData, unknown>` | The expanded-row config. Open rows render its panel under them. |
295
+ | `expansionId` | no | `string` | Prefixes each panel's id and cache key, so two tables never share either. |
294
296
  | `striped` | no | `boolean` | |
295
297
  | `strings` | no | `DataTableStrings` | |
296
298
 
299
+ ### `DataTableExpandedRow`
300
+
301
+ Kind: interface.
302
+
303
+ Expandable rows: a panel under an open row, opened by a toggle at the row's start. Passing
304
+ `expandedRow` at all turns it on; `render` is the one required field.
305
+
306
+ | member | required | type | description / documented default |
307
+ | --- | :-: | --- | --- |
308
+ | `render` | yes | `(row: TData, context: DataTableExpandedRowContext<TDetail>) => ReactNode` | The panel under an open row. |
309
+ | `onLoad` | no | `(row: TData, args: { signal: AbortSignal; }) => Promise<TDetail \| null \| undefined>` | Fetches what the panel shows when its row opens. The table shows a skeleton meanwhile,<br>aborts the request (`signal`) when the row closes, offers Retry on failure and keeps the<br>result for five minutes per row. `null` or `undefined` means the row has no details.<br>Write it before `render`: TypeScript types `detail` from it, left to right. |
310
+ | `canExpand` | no | `(row: TData) => boolean` | Rows it refuses get no toggle and never open. |
311
+ | `multiple` | no | `boolean` | Several rows open at once. `false` closes the open row when another opens. @default true |
312
+ | `expanded` | no | `Record<string, boolean>` | The open rows, keyed by row id. Controlled: rendered as given, even several under<br>`multiple: false`. Supply `getRowId` when `data` can reorder or page, or an open panel<br>follows a position rather than a record. |
313
+ | `defaultExpanded` | no | `Record<string, boolean>` | The rows open at first, keyed by row id. |
314
+ | `onExpandedChange` | no | `(expanded: Record<string, boolean>) => void` | |
315
+
316
+ ### `DataTableExpandedRowContext`
317
+
318
+ Kind: interface.
319
+
320
+ What an open row's `render` is handed beside the row's data.
321
+
322
+ | member | required | type | description / documented default |
323
+ | --- | :-: | --- | --- |
324
+ | `detail` | yes | `TDetail` | What `onLoad` resolved to. `undefined` when there is no `onLoad`. |
325
+ | `refresh` | yes | `() => void` | Loads again, skipping the cache. Does nothing without `onLoad`. |
326
+ | `collapse` | yes | `() => void` | Closes this row's panel — after a save inside it, say. |
327
+
297
328
  ### `DataTableHeader`
298
329
 
299
330
  Kind: callable.
@@ -302,7 +333,7 @@ The header rows — an optional band of column groups, then the columns. Sorting
302
333
  doing the work; this only translates the column's state into it.
303
334
 
304
335
  ```text
305
- ({ table, stickyHeader, headerClassName, cellClassName, stickyFirstColumn, hasSelectionColumn, columnGroups, headerTransparent, }: DataTableHeaderProps<TData>) => import("react").JSX.Element
336
+ ({ table, stickyHeader, headerClassName, cellClassName, stickyFirstColumn, hasSelectionColumn, hasExpandColumn, columnGroups, headerTransparent, }: DataTableHeaderProps<TData>) => import("react").JSX.Element
306
337
  ```
307
338
 
308
339
  ### `DataTableHeaderProps`
@@ -317,6 +348,7 @@ Kind: interface.
317
348
  | `cellClassName` | no | `ClassNameFor<TData>` | |
318
349
  | `stickyFirstColumn` | no | `boolean` | |
319
350
  | `hasSelectionColumn` | no | `boolean` | Whether column 0 is the selection checkbox, so the pinned pair covers the identity column too. |
351
+ | `hasExpandColumn` | no | `boolean` | Whether the expand toggle column leads the row (after any checkbox), for the pinned group. |
320
352
  | `columnGroups` | no | `ColumnGroup[]` | |
321
353
  | `headerTransparent` | no | `boolean` | |
322
354
 
@@ -378,6 +410,7 @@ Kind: interface.
378
410
  | `totalRowCount` | no | `number` | The result-count line beside the pager. |
379
411
  | `pageSize` | no | `number` | |
380
412
  | `onRowClick` | no | `RowClickHandler<TData>` | |
413
+ | `expandedRow` | no | `DataTableExpandedRow<TData, TDetail>` | Turns on expandable rows: a toggle column at the row's start AND the panel it opens,<br>with the state behind them. Without it the table has neither. |
381
414
  | `onRowSelectionChange` | no | `RowSelectionHandler` | |
382
415
  | `onSortingChange` | no | `SortingHandler` | |
383
416
  | `onColumnVisibilityChange` | no | `ColumnVisibilityHandler` | |
@@ -409,7 +442,8 @@ Kind: interface.
409
442
 
410
443
  Kind: type.
411
444
 
412
- Density of the whole table: row spacing only, not type size.
445
+ Row spacing for the whole table, not type size. Unset, a compact provider density picks
446
+ `sm`.
413
447
 
414
448
  ```text
415
449
  ComponentScale
@@ -434,6 +468,7 @@ DataTable copy, nested per surface (toolbar, header, body, pager, selection bar)
434
468
  | `pagination` | yes | `{ label: string; previous: string; next: string; page: (page: number) => string; morePages: string; summary: (from: number, to: number, total: number) => string; }` | |
435
469
  | `selection` | yes | `{ summary: (selected: number, total: number) => string; row: (index: number) => string; selectAll: string; clear: string; }` | |
436
470
  | `accessibility` | yes | `{ scrollRegion: string; fullscreenRegion: string; }` | |
471
+ | `expansion` | yes | `{ column: string; show: (index: number) => string; hide: (index: number) => string; loading: string; error: string; retry: string; empty: string; }` | Expandable rows: the toggle, and the panel's loading, error and empty states. |
437
472
 
438
473
  ### `DataTableStringsOverride`
439
474
 
@@ -641,11 +676,11 @@ string | number | Date | null | undefined
641
676
 
642
677
  Kind: callable.
643
678
 
644
- Which cells stay put when the table scrolls sideways. With selection on, the pinned group
645
- is the checkbox and the identity column after it, so a row never loses its name.
679
+ Which cells stay put when the table scrolls sideways: the leading checkbox and expand toggle,
680
+ when there are any, and the identity column after them, so a row never loses its name.
646
681
 
647
682
  ```text
648
- (columnId: string, row: LegacyRow<TData> | null, cellClassName: ClassNameFor<TData> | undefined, stickyFirstColumn: boolean, cellIndex: number, hasSelectionColumn?: boolean) => string
683
+ (columnId: string, row: LegacyRow<TData> | null, cellClassName: ClassNameFor<TData> | undefined, stickyFirstColumn: boolean, cellIndex: number, hasSelectionColumn?: boolean, hasExpandColumn?: boolean) => string
649
684
  ```
650
685
 
651
686
  ### `ResourceCell`
@@ -907,7 +942,7 @@ export default function Table() {
907
942
  },
908
943
  ]}
909
944
  bulkActions={({ selectedRowCount }) => (
910
- <Button type="button" tone="neutral" buttonStyle="outline" onClick={() => setNote(`archive ${selectedRowCount}`)}>
945
+ <Button type="button" tone="neutral" appearance="outline" onClick={() => setNote(`archive ${selectedRowCount}`)}>
911
946
  Archive selected
912
947
  </Button>
913
948
  )}
@@ -1008,7 +1043,7 @@ export default function TableSelection() {
1008
1043
  <Button
1009
1044
  type="button"
1010
1045
  tone="neutral"
1011
- buttonStyle="outline"
1046
+ appearance="outline"
1012
1047
  onClick={() => setNote(`archive ${selectedRowCount}`)}
1013
1048
  >
1014
1049
  Archive selected
@@ -1022,6 +1057,121 @@ export default function TableSelection() {
1022
1057
  }
1023
1058
  ```
1024
1059
 
1060
+ ### Expandable rows
1061
+
1062
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
1063
+ import { MetadataList } from "themelia-ui/base/display"
1064
+ import { DataTable } from "themelia-ui/features/table"
1065
+ import { Money } from "themelia-ui/primitives"
1066
+
1067
+ import { tableColumns } from "./_shared"
1068
+ import { BOOKINGS } from "./data"
1069
+
1070
+ /* Everything the panel shows is already on the row, so `render` is the whole configuration. */
1071
+ export default function TableExpandable() {
1072
+ return (
1073
+ <DataTable
1074
+ columns={tableColumns}
1075
+ data={BOOKINGS.slice(0, 4)}
1076
+ getRowId={(row) => row.id}
1077
+ expandedRow={{
1078
+ defaultExpanded: { b1: true },
1079
+ render: (booking) => (
1080
+ <MetadataList
1081
+ layout="grid"
1082
+ columns={4}
1083
+ items={[
1084
+ { label: "Reference", value: booking.reference },
1085
+ { label: "Guests", value: String(booking.guests) },
1086
+ { label: "Total", value: <Money amount={booking.total} currency="EUR" /> },
1087
+ { label: "Contact", value: booking.customerEmail },
1088
+ ]}
1089
+ />
1090
+ ),
1091
+ }}
1092
+ />
1093
+ )
1094
+ }
1095
+ ```
1096
+
1097
+ ### Details on demand
1098
+
1099
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
1100
+ import { MetadataList } from "themelia-ui/base/display"
1101
+ import { Stack } from "themelia-ui/base/structure"
1102
+ import { Text } from "themelia-ui/base/typography"
1103
+ import { DataTable } from "themelia-ui/features/table"
1104
+
1105
+ import { tableColumns } from "./_shared"
1106
+ import { BOOKINGS, type Booking } from "./data"
1107
+
1108
+ interface BookingDetail {
1109
+ event: string
1110
+ deposit: string
1111
+ arrival: string
1112
+ notes: string
1113
+ }
1114
+
1115
+ const DETAILS: Record<string, BookingDetail> = {
1116
+ b1: { event: "Autumn gala", deposit: "€2,400 paid", arrival: "17:00, main entrance", notes: "Needs step-free access to the terrace." },
1117
+ b2: { event: "Book launch", deposit: "Awaiting payment", arrival: "18:30, side door", notes: "A signing table by the window." },
1118
+ b3: { event: "Wedding reception", deposit: "€5,000 paid", arrival: "14:00, river gate", notes: "The band loads in through the courtyard." },
1119
+ b5: { event: "Team offsite", deposit: "€420 paid", arrival: "09:00, main entrance", notes: "A projector and two flip charts." },
1120
+ b6: { event: "Charity dinner", deposit: "Awaiting payment", arrival: "19:00, main entrance", notes: "Auction tables along the east wall." },
1121
+ }
1122
+
1123
+ const attempts = new Map<string, number>()
1124
+
1125
+ /** A stand-in API: some latency, and The Old Granary's first load fails, so Retry has something to recover. */
1126
+ function fetchBookingDetail(booking: Booking, signal: AbortSignal): Promise<BookingDetail | null> {
1127
+ return new Promise((resolve, reject) => {
1128
+ const timer = window.setTimeout(() => {
1129
+ const attempt = (attempts.get(booking.id) ?? 0) + 1
1130
+ attempts.set(booking.id, attempt)
1131
+ if (booking.id === "b2" && attempt === 1) reject(new Error("The booking service timed out."))
1132
+ else resolve(DETAILS[booking.id] ?? null)
1133
+ }, 700)
1134
+ // Closing the row aborts: the request stops, and nothing is written after it.
1135
+ signal.addEventListener("abort", () => {
1136
+ window.clearTimeout(timer)
1137
+ reject(new DOMException("Aborted", "AbortError"))
1138
+ })
1139
+ })
1140
+ }
1141
+
1142
+ export default function TableExpandableAsync() {
1143
+ return (
1144
+ <DataTable
1145
+ columns={tableColumns}
1146
+ data={BOOKINGS}
1147
+ getRowId={(row) => row.id}
1148
+ enableRowSelection
1149
+ stickyFirstColumn
1150
+ expandedRow={{
1151
+ onLoad: (booking, { signal }) => fetchBookingDetail(booking, signal),
1152
+ render: (_booking, { detail }) => (
1153
+ <Stack gap="sm">
1154
+ <MetadataList
1155
+ layout="grid"
1156
+ columns={3}
1157
+ items={[
1158
+ { label: "Event", value: detail.event },
1159
+ { label: "Deposit", value: detail.deposit },
1160
+ { label: "Arrival", value: detail.arrival },
1161
+ ]}
1162
+ />
1163
+ <Text size="sm" type="secondary">{detail.notes}</Text>
1164
+ </Stack>
1165
+ ),
1166
+ // A cancelled booking has nothing left to show.
1167
+ canExpand: (booking) => booking.status !== "cancelled",
1168
+ multiple: false,
1169
+ }}
1170
+ />
1171
+ )
1172
+ }
1173
+ ```
1174
+
1025
1175
  ### Nothing to show
1026
1176
 
1027
1177
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
@@ -1038,7 +1188,7 @@ export default function TableEmpty() {
1038
1188
  columns={tableColumns.slice(0, 3)}
1039
1189
  data={[]}
1040
1190
  emptyStateMessage="No bookings match these filters."
1041
- emptyStateAction={<Button type="button" tone="neutral" buttonStyle="outline">Clear filters</Button>}
1191
+ emptyStateAction={<Button type="button" tone="neutral" appearance="outline">Clear filters</Button>}
1042
1192
  />
1043
1193
  )
1044
1194
  }
@@ -15,7 +15,6 @@ Users change theme, density or scale at runtime and the result must persist.
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { ThemeScope } from "themelia-ui/features/theme-tweaker"
18
- import "themelia-ui/features/theme-tweaker.css"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -31,6 +30,8 @@ outside the package and arrives through the public props, callbacks, slots, or a
31
30
 
32
31
  Kind: callable.
33
32
 
33
+ How many variables the theme changes; a colour edited in both modes counts once.
34
+
34
35
  ```text
35
36
  (theme: ThemeDefinition) => number
36
37
  ```
@@ -39,8 +40,7 @@ Kind: callable.
39
40
 
40
41
  Kind: callable.
41
42
 
42
- Selectors that scope a theme to one subtree. Each mode gets two forms (the scope carrying
43
- the class, and the scope inside an element that carries it).
43
+ The selector that scopes a theme to one subtree instead of the document.
44
44
 
45
45
  ```text
46
46
  (scopeSelector: string) => ThemeSelectors
@@ -119,8 +119,8 @@ UIConfigSettingsStrings
119
119
 
120
120
  Kind: callable.
121
121
 
122
- The whole shadow ladder from one intensity: the default theme's geometry and
123
- `--shadow-ink`, with every layer's ink scaled so 0.8 reproduces it exactly.
122
+ The two shadows from one intensity: the default theme's geometry, with every layer's ink
123
+ scaled so 0.8 reproduces it exactly.
124
124
 
125
125
  ```text
126
126
  ({ intensity }: ThemeElevationRecipe) => ThemeOverrides
@@ -164,7 +164,8 @@ Kind: callable.
164
164
 
165
165
  Kind: callable.
166
166
 
167
- Shared first, then the mode's, so a mode-scoped edit wins.
167
+ The values the theme gives in one mode: shared first, then that mode's colour halves. For
168
+ showing a value; the element's `color-scheme` is what picks the half on the page.
168
169
 
169
170
  ```text
170
171
  (theme: ThemeDefinition, mode?: ThemeMode) => ThemeOverrides
@@ -240,6 +241,18 @@ Kind: interface.
240
241
  | `providerConfig` | yes | `UIConfig` | |
241
242
  | `providerConfigText` | yes | `string` | TypeScript source exporting `uiConfig`. |
242
243
 
244
+ ### `themeFromConfig`
245
+
246
+ Kind: callable.
247
+
248
+ A provider theme, such as one of `themes` from `themelia-ui/theming`, as a definition the
249
+ tweaker can edit and export: each `light-dark()` colour split into its two halves, a single
250
+ colour kept for both modes, the radii and extra variables shared.
251
+
252
+ ```text
253
+ (config: ThemeConfig, mode?: ThemeMode) => ThemeDefinition
254
+ ```
255
+
243
256
  ### `ThemeMode`
244
257
 
245
258
  Kind: type.
@@ -294,13 +307,12 @@ Extends: `Omit<HTMLAttributes<HTMLDivElement>, "children">`.
294
307
 
295
308
  Kind: interface.
296
309
 
310
+ Where a serialised theme is declared. One selector: a colour carries both modes in its
311
+ `light-dark()` value, and the element's `color-scheme` picks the half.
312
+
297
313
  | member | required | type | description / documented default |
298
314
  | --- | :-: | --- | --- |
299
- | `shared` | yes | `string` | Receives the mode-independent variables. |
300
- | `light` | yes | `string` | Explicit light: a `.light` or `data-theme="light"` element and the boundaries inside it. |
301
- | `dark` | yes | `string` | Explicit dark: a `.dark` or `data-theme="dark"` element and the boundaries inside it. |
302
- | `systemLight` | no | `string` | Light by OS preference (no explicit theme), emitted under `prefers-color-scheme: light`. |
303
- | `systemDark` | no | `string` | Dark by OS preference (no explicit theme), emitted under `prefers-color-scheme: dark`. |
315
+ | `shared` | yes | `string` | `:root` for the whole application, or a scope's own selector. |
304
316
 
305
317
  ### `ThemeStyle`
306
318
 
@@ -316,8 +328,11 @@ CSSProperties & Partial<Record<ThemeVariableName, string>>
316
328
 
317
329
  Kind: callable.
318
330
 
331
+ The theme as an inline style: shared values and each colour's `light-dark()` pair. The
332
+ element's `color-scheme` (set by `.light`, `.dark` or `data-theme`) picks the half.
333
+
319
334
  ```text
320
- (theme: ThemeDefinition, mode?: ThemeMode) => ThemeStyle
335
+ (theme: ThemeDefinition) => ThemeStyle
321
336
  ```
322
337
 
323
338
  ### `ThemeTweaker`
@@ -432,7 +447,7 @@ A slider and a numeric box, for a variable with real bounds.
432
447
  Kind: type.
433
448
 
434
449
  ```text
435
- "surfaces-content" | "brand-actions" | "charts" | "sidebar" | "semantic-feedback" | "inverse-surfaces" | "font-families" | "type-scale" | "radius" | "elevation" | "global-scales" | "actions-controls" | "rows-surfaces" | "media" | "application-shell" | "content-widths" | "adaptive-layout"
450
+ "surfaces-content" | "brand-actions" | "charts" | "sidebar" | "semantic-feedback" | "tints" | "font-families" | "type-scale" | "radius" | "elevation" | "spacing" | "controls" | "motion" | "application-shell"
436
451
  ```
437
452
 
438
453
  ### `ThemeTweakerStrings`
@@ -500,7 +515,7 @@ Kind: interface.
500
515
  | `providerSettings` | yes | `UIConfigSettingsStrings` | |
501
516
  | `groups` | yes | `Record<"colors" \| "states" \| "typography" \| "shape" \| "structure" \| "defaults", string>` | |
502
517
  | `groupDescriptions` | yes | `Record<"colors" \| "states" \| "typography" \| "shape" \| "structure" \| "defaults", string>` | |
503
- | `sections` | yes | `Record<"surfaces-content" \| "brand-actions" \| "charts" \| "sidebar" \| "semantic-feedback" \| "inverse-surfaces" \| "font-families" \| "type-scale" \| "radius" \| "elevation" \| "global-scales" \| "actions-controls" \| "rows-surfaces" \| "media" \| "application-shell" \| "content-widths" \| "adaptive-layout", string>` | |
518
+ | `sections` | yes | `Record<"surfaces-content" \| "brand-actions" \| "charts" \| "sidebar" \| "semantic-feedback" \| "tints" \| "font-families" \| "type-scale" \| "radius" \| "elevation" \| "spacing" \| "controls" \| "motion" \| "application-shell", string>` | |
504
519
 
505
520
  ### `ThemeTweakerTarget`
506
521
 
@@ -602,7 +617,7 @@ const SQUARE_CORNERS = createTheme({ shared: { "--radius": "0.25rem", "--radius-
602
617
 
603
618
  export default function IsolatedThemeScope() {
604
619
  return (
605
- <Grid gap="lg">
620
+ <Grid>
606
621
  <Card
607
622
  title="App theme"
608
623
  description="The corners every other region uses."
@@ -147,14 +147,14 @@ export default function FormBindingState() {
147
147
  )
148
148
 
149
149
  return (
150
- <Stack gap="xl" style={{ maxWidth: "26rem", width: "100%" }}>
150
+ <Stack style={{ maxWidth: "26rem", width: "100%" }}>
151
151
  <BoundInput name="email" label="Email" control={control} type="email" />
152
152
  <BoundInput name="workspace" label="Workspace" control={control} />
153
153
  <Stack direction="horizontal" gap="sm" align="center">
154
154
  <Button onClick={() => setSubmitted(JSON.stringify(control.values))}>
155
155
  Submit
156
156
  </Button>
157
- <Button buttonStyle="outline" onClick={() => control.reset()}>
157
+ <Button appearance="outline" onClick={() => control.reset()}>
158
158
  Reset
159
159
  </Button>
160
160
  </Stack>