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
@@ -15,7 +15,6 @@ Rendering library-owned copy in a role — heading, body, label, link or sanitiz
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { DisplayLabel } from "themelia-ui/base/typography"
18
- import "themelia-ui/base/typography.css"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -95,6 +94,20 @@ script or event handlers into the page.
95
94
  ({ html, children, size, type, align, weight, lineHeight, tag, className, ...props }: RichTextProps) => import("react").JSX.Element | null
96
95
  ```
97
96
 
97
+ ### `richTextClassName`
98
+
99
+ Kind: callable.
100
+
101
+ RichText's prose surface and type for an element RichText cannot render: an editor's
102
+ content-editable root, which its library creates. The leading defaults to `relaxed`, as on
103
+ RichText, so a body reads the same while it is edited and once it is posted.
104
+
105
+ editor.root.className = richTextClassName()
106
+
107
+ ```text
108
+ ({ lineHeight, ...options }?: TextClassNameOptions) => string
109
+ ```
110
+
98
111
  ### `RichTextProps`
99
112
 
100
113
  Kind: interface.
@@ -138,6 +151,38 @@ Kind: type.
138
151
  "left" | "center" | "right"
139
152
  ```
140
153
 
154
+ ### `textClassName`
155
+
156
+ Kind: callable.
157
+
158
+ Text's classes for an element Text cannot wrap: a native control's value, a button's label,
159
+ a table cell. One implementation of type, so a size or weight here is the same one Text
160
+ renders.
161
+
162
+ <button className={cx(styles.trigger, textClassName({ size: "sm", weight: "medium" }))}>
163
+
164
+ ```text
165
+ ({ size, ...options }?: TextClassNameOptions) => string
166
+ ```
167
+
168
+ ### `TextClassNameOptions`
169
+
170
+ Kind: interface.
171
+
172
+ What `textClassName` takes: Text's props, without the element and the content.
173
+
174
+ | member | required | type | description / documented default |
175
+ | --- | :-: | --- | --- |
176
+ | `size` | no | `TextSize \| "default"` | Step on the type scale; unset, the provider's default size. |
177
+ | `weight` | no | `TextWeight` | |
178
+ | `lineHeight` | no | `TextLineHeight` | |
179
+ | `type` | no | `TextType` | Unset, no colour: the element keeps whatever colour its own rules give it. |
180
+ | `numeric` | no | `boolean` | |
181
+ | `truncate` | no | `boolean` | |
182
+ | `mono` | no | `boolean` | |
183
+ | `heading` | no | `boolean` | |
184
+ | `caps` | no | `boolean` | |
185
+
141
186
  ### `TextLineHeight`
142
187
 
143
188
  Kind: type.
@@ -174,12 +219,15 @@ Extends: `Omit<React.HTMLAttributes<HTMLElement>, "children">`, `Pick<Partial<Re
174
219
  | --- | :-: | --- | --- |
175
220
  | `content` | no | `string` | Text as a plain string. Equivalent to passing it as `children`. |
176
221
  | `type` | no | `TextType` | Semantic role, which selects the colour token. `main` for primary copy, `secondary`<br>for supporting copy (descriptions, captions, metadata). `inherit` selects none and takes<br>the parent's, for text inside a surface that already sets its own — a solid tab, a<br>tooltip, a coloured chip. Without it those places would drop Text and hand-roll a span,<br>which is how a kit ends up with two ways to set type. |
177
- | `size` | no | `TextSize` | Step on the type scale. Omit it on primary content so the provider default flows;<br>`UIProvider`'s `typography.defaultTextSize` changes it. Reserve `xs` for support text<br>and metadata. `xxs` renders as `xs`; use `xs`. @default "sm" |
222
+ | `size` | no | `TextSize` | Step on the type scale. Omit it on primary content so the provider default flows;<br>`UIProvider`'s `typography.defaultTextSize` changes it. Reserve `xs` for support text<br>and metadata. @default "sm" |
178
223
  | `align` | no | `TextAlign` | Horizontal alignment. |
179
- | `lineHeight` | no | `TextLineHeight` | Leading, on the shared tier. Unset, each size step carries the leading paired with it<br>(`--text-<step>--line-height`); a value here overrides that. `tight` and `none` suit<br>dense rows and single-line values; `relaxed` suits prose. @default paired |
224
+ | `lineHeight` | no | `TextLineHeight` | Leading. Unset, each size step carries the line box paired with it; a value here<br>overrides that. `tight` and `none` suit dense rows and single-line values; `relaxed`<br>suits prose. @default paired |
180
225
  | `numeric` | no | `boolean` | Tabular figures, so digits align in a column. Use for any value in a table. |
181
226
  | `truncate` | no | `boolean` | Ellipsises the text at one line rather than wrapping. Makes the element a block with<br>`min-width: 0`, for the same reason `align` does; every flex box between it and the<br>constrained width also needs `min-width: 0` (`Stack` and `Grid` set it; a hand-rolled<br>flex div does not). `Heading` and every `primitives` value take it too. |
182
227
  | `weight` | no | `TextWeight` | Font weight. |
228
+ | `mono` | no | `boolean` | The monospaced face, for identifiers, codes and keys. |
229
+ | `heading` | no | `boolean` | The heading face (`--font-heading`), for a title that is not a document heading: a<br>card's, a dialog's. A theme that sets a heading font reaches it here as in `Heading`. |
230
+ | `caps` | no | `boolean` | Uppercase with open tracking, for an overline or a keyboard hint. |
183
231
  | `children` | no | `ReactNode` | Text content. Takes precedence over `content`. |
184
232
  | `tag` | no | `"div" \| "p" \| "span" \| "label"` | Element to render: `span` inline, `p` for prose, `div` when it wraps blocks, `label`<br>for a form label. For headings use `Heading`. |
185
233
 
@@ -196,7 +244,7 @@ Kind: type.
196
244
  Kind: type.
197
245
 
198
246
  ```text
199
- "normal" | "regular" | "medium" | "semibold" | "bold"
247
+ "normal" | "medium" | "semibold" | "bold"
200
248
  ```
201
249
 
202
250
  ## Preview recipes
@@ -232,6 +280,191 @@ export default function MenusInContext() {
232
280
  }
233
281
  ```
234
282
 
283
+ ### Compose your own
284
+
285
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
286
+ import { ArrowUpIcon, CreditCardIcon } from "lucide-react"
287
+
288
+ import { Badge } from "themelia-ui/base/badge"
289
+ import { Card } from "themelia-ui/base/cards"
290
+ import { Sparkline } from "themelia-ui/base/chart"
291
+ import { IconBadge } from "themelia-ui/base/display"
292
+ import { Stack } from "themelia-ui/base/structure"
293
+ import { DisplayLabel, Text } from "themelia-ui/base/typography"
294
+ import { Money } from "themelia-ui/primitives"
295
+
296
+ export default function AnalyticsBlueprint() {
297
+ return (
298
+ <Card style={{ maxWidth: "20rem" }}>
299
+ <Stack gap="sm">
300
+ <Stack direction="horizontal" align="center" gap="sm">
301
+ <IconBadge icon={CreditCardIcon} tone="primary" />
302
+ <DisplayLabel>Revenue</DisplayLabel>
303
+ </Stack>
304
+ <Stack direction="horizontal" align="center" justify="between" gap="sm">
305
+ <Money amount={48200} currency="EUR" size="xl" weight="semibold" />
306
+ <Badge tone="success">
307
+ <ArrowUpIcon />
308
+ 12.4%
309
+ </Badge>
310
+ </Stack>
311
+ <Sparkline data={[18, 22, 19, 27, 24, 31, 29, 38]} tone="success" label="Revenue rising over eight weeks" />
312
+ <Text size="xs" type="secondary">
313
+ Net of refunds, this quarter
314
+ </Text>
315
+ </Stack>
316
+ </Card>
317
+ )
318
+ }
319
+ ```
320
+
321
+ ### Compose your own checklist
322
+
323
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
324
+ import { CheckIcon, CircleIcon } from "lucide-react"
325
+
326
+ import { Accordion } from "themelia-ui/base/accordion"
327
+ import { Button } from "themelia-ui/base/buttons"
328
+ import { IconBadge } from "themelia-ui/base/display"
329
+ import { Progress } from "themelia-ui/base/feedback"
330
+ import { Stack } from "themelia-ui/base/structure"
331
+ import { Text } from "themelia-ui/base/typography"
332
+
333
+ export default function ChecklistBlueprint() {
334
+ return (
335
+ <Stack style={{ maxWidth: "34rem", width: "100%" }}>
336
+ <Progress value={1} max={3} label="1 of 3 steps complete" />
337
+ <Accordion
338
+ media="medallion"
339
+ defaultValue={["invite"]}
340
+ items={[
341
+ {
342
+ value: "profile",
343
+ title: "Complete your profile",
344
+ icon: <IconBadge icon={CheckIcon} tone="success" shape="circle" />,
345
+ content: <Text type="secondary">Name, avatar and time zone are set.</Text>,
346
+ },
347
+ {
348
+ value: "invite",
349
+ title: "Invite your team",
350
+ icon: <IconBadge icon={CircleIcon} shape="circle" />,
351
+ content: (
352
+ <Stack gap="sm" align="start">
353
+ <Text type="secondary">Teammates see the same projects and saved views.</Text>
354
+ <Button>Send invites</Button>
355
+ </Stack>
356
+ ),
357
+ },
358
+ {
359
+ value: "connect",
360
+ title: "Connect a data source",
361
+ icon: <IconBadge icon={CircleIcon} shape="circle" />,
362
+ content: <Text type="secondary">Postgres, a CSV upload or the REST API.</Text>,
363
+ },
364
+ ]}
365
+ />
366
+ </Stack>
367
+ )
368
+ }
369
+ ```
370
+
371
+ ### Compose your own permissions
372
+
373
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
374
+ import { CheckIcon } from "lucide-react"
375
+
376
+ import { Badge } from "themelia-ui/base/badge"
377
+ import { VisuallyHidden } from "themelia-ui/base/display"
378
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "themelia-ui/base/table"
379
+ import { Text } from "themelia-ui/base/typography"
380
+
381
+ const ROLES = ["Owner", "Editor", "Viewer"] as const
382
+ const PERMISSIONS: { name: string; granted: readonly boolean[] }[] = [
383
+ { name: "Edit projects", granted: [true, true, false] },
384
+ { name: "Manage billing", granted: [true, false, false] },
385
+ { name: "Export data", granted: [true, true, true] },
386
+ ]
387
+
388
+ export default function RolesBlueprint() {
389
+ return (
390
+ <Table>
391
+ <TableHeader>
392
+ <TableRow>
393
+ <TableHead>Permission</TableHead>
394
+ {ROLES.map((role) => (
395
+ <TableHead key={role} align="center">
396
+ {role}
397
+ </TableHead>
398
+ ))}
399
+ </TableRow>
400
+ </TableHeader>
401
+ <TableBody>
402
+ {PERMISSIONS.map((permission) => (
403
+ <TableRow key={permission.name}>
404
+ <TableCell>{permission.name}</TableCell>
405
+ {permission.granted.map((granted, index) => (
406
+ <TableCell key={ROLES[index]} align="center">
407
+ {granted ? (
408
+ <Badge tone="success">
409
+ <CheckIcon aria-hidden />
410
+ <VisuallyHidden>Granted</VisuallyHidden>
411
+ </Badge>
412
+ ) : (
413
+ <>
414
+ <Text tag="span" type="secondary" aria-hidden>
415
+ —
416
+ </Text>
417
+ <VisuallyHidden>Not granted</VisuallyHidden>
418
+ </>
419
+ )}
420
+ </TableCell>
421
+ ))}
422
+ </TableRow>
423
+ ))}
424
+ </TableBody>
425
+ </Table>
426
+ )
427
+ }
428
+ ```
429
+
430
+ ### Website content reference
431
+
432
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
433
+ import { useState } from "react"
434
+ import { Button } from "themelia-ui/base/buttons"
435
+ import { Card } from "themelia-ui/base/cards"
436
+ import { PillRadioGroup } from "themelia-ui/base/choice-inputs"
437
+ import { FormField } from "themelia-ui/base/forms"
438
+ import { Stack } from "themelia-ui/base/structure"
439
+ import { Input } from "themelia-ui/base/text-inputs"
440
+ import { RichText, Text } from "themelia-ui/base/typography"
441
+ import { MediaLibraryDialog, type MediaLibraryItem } from "themelia-ui/features/media-library"
442
+ import { RichTextEditor } from "themelia-ui/features/rich-text-editor"
443
+ import { SAMPLE_MEDIA } from "../media-library/reference-data"
444
+
445
+ export default function WebsiteContentReference() {
446
+ const [locale, setLocale] = useState("en")
447
+ const [drafts, setDrafts] = useState<Record<string, string>>({ en: "<p>Welcome to our workspace.</p>", ar: "<p>مرحباً بكم</p>" })
448
+ const [mediaOpen, setMediaOpen] = useState(false)
449
+ const [image, setImage] = useState<MediaLibraryItem>()
450
+ const [alt, setAlt] = useState("")
451
+ const [failed, setFailed] = useState(true)
452
+ const [pending, setPending] = useState(false)
453
+ const [message, setMessage] = useState("Drafts are local until saved")
454
+ return <Card title="Website content" description="Each locale owns a retained draft. Preview sanitizes HTML; the application also validates and sanitizes persisted content.">
455
+ <Stack>
456
+ <PillRadioGroup aria-label="Content locale" name="reference-content-locale" value={locale} onValueChange={value => value && setLocale(value)} options={[{ value: "en", label: "English" }, { value: "ar", label: "العربية" }]} />
457
+ <div dir={locale === "ar" ? "rtl" : "ltr"}><RichTextEditor value={drafts[locale] ?? ""} onValueChange={html => setDrafts(current => ({ ...current, [locale]: html }))} /></div>
458
+ <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) }} />
459
+ {image && <FormField label="Hero image alternative text" hint={image.name}><Input value={alt} onChange={event => setAlt(event.target.value)} /></FormField>}
460
+ <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>
461
+ <Text role="status">{message}</Text>
462
+ <RichText html={drafts[locale] ?? ""} />
463
+ </Stack>
464
+ </Card>
465
+ }
466
+ ```
467
+
235
468
  ### The editor and what comes out
236
469
 
237
470
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
@@ -258,14 +491,14 @@ export default function Editor() {
258
491
  maxLength={280}
259
492
  />
260
493
 
261
- <Stack gap="xs">
494
+ <Stack gap="sm">
262
495
  <DisplayLabel>Emitted HTML</DisplayLabel>
263
- <Text size="xs" type="secondary" className={styles.source}>
496
+ <Text size="xs" type="secondary" mono className={styles.source}>
264
497
  {body || "(empty)"}
265
498
  </Text>
266
499
  </Stack>
267
500
 
268
- <Stack gap="xs">
501
+ <Stack gap="sm">
269
502
  <DisplayLabel>Rendered through RichText</DisplayLabel>
270
503
  <RichText html={body} />
271
504
  </Stack>
@@ -312,7 +545,7 @@ export default function EditorCompact() {
312
545
  },
313
546
  ]}
314
547
  footerSlot={
315
- <Stack direction="horizontal" align="center" justify="between" gap="md">
548
+ <Stack direction="horizontal" align="center" justify="between" gap="sm">
316
549
  <Text size="xs" type="secondary">
317
550
  Markdown is not parsed — use the toolbar.
318
551
  </Text>
@@ -326,7 +559,34 @@ export default function EditorCompact() {
326
559
  }
327
560
  ```
328
561
 
329
- ### Type can override the master factor
562
+ ### The factor
563
+
564
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
565
+ import { Stack } from "themelia-ui/base/structure"
566
+ import { Text } from "themelia-ui/base/typography"
567
+ import { UIProvider } from "themelia-ui/ui-provider"
568
+
569
+ import { ControlRow } from "./_shared"
570
+
571
+ const FACTORS = [0.75, 0.875, 1, 1.125, 1.25] as const
572
+
573
+ export default function TheFactor() {
574
+ return (
575
+ <>
576
+ {FACTORS.map((scale) => (
577
+ <UIProvider key={scale} config={{ scale }}>
578
+ <Stack direction="horizontal" align="center">
579
+ <Text tag="span" size="xs" mono style={{ width: "4rem", flex: "none" }}>{scale}</Text>
580
+ <ControlRow />
581
+ </Stack>
582
+ </UIProvider>
583
+ ))}
584
+ </>
585
+ )
586
+ }
587
+ ```
588
+
589
+ ### Type has its own factor
330
590
 
331
591
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
332
592
  import { Button } from "themelia-ui/base/buttons"
@@ -337,11 +597,11 @@ import { UIProvider } from "themelia-ui/ui-provider"
337
597
 
338
598
  export default function TypeFactor() {
339
599
  return (
340
- <Stack gap="lg">
600
+ <Stack>
341
601
  <Stack gap="sm">
342
602
  <Text type="secondary" size="xs">typography.scale 0.875 — type shrinks, control geometry holds</Text>
343
603
  <UIProvider config={{ typography: { scale: 0.875 } }}>
344
- <Stack direction="horizontal" gap="md" align="center" wrap>
604
+ <Stack direction="horizontal" gap="sm" align="center" wrap>
345
605
  <Text>Body copy at this factor.</Text>
346
606
  <Button>Save</Button>
347
607
  <Checkbox label="Check" defaultChecked />
@@ -351,7 +611,7 @@ export default function TypeFactor() {
351
611
  <Stack gap="sm">
352
612
  <Text type="secondary" size="xs">scale 0.875 + typography.scale 1 — geometry shrinks, type holds</Text>
353
613
  <UIProvider config={{ scale: 0.875, typography: { scale: 1 } }}>
354
- <Stack direction="horizontal" gap="md" align="center" wrap>
614
+ <Stack direction="horizontal" gap="sm" align="center" wrap>
355
615
  <Text>Body copy at this factor.</Text>
356
616
  <Button>Save</Button>
357
617
  <Checkbox label="Check" defaultChecked />
@@ -363,37 +623,37 @@ export default function TypeFactor() {
363
623
  }
364
624
  ```
365
625
 
366
- ### Two levels of control
626
+ ### A factor, or one variable
367
627
 
368
628
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
369
629
  import { Stack } from "themelia-ui/base/structure"
370
630
  import { Text } from "themelia-ui/base/typography"
371
- import { Scope } from "themelia-ui/ui-provider"
631
+ import { Scope, UIProvider } from "themelia-ui/ui-provider"
372
632
 
373
633
  import { ControlRow } from "./_shared"
374
634
 
375
635
  export default function FactorChain() {
376
636
  return (
377
- <Stack gap="lg">
637
+ <Stack>
378
638
  <Stack gap="sm">
379
639
  <Text type="secondary" size="xs">default</Text>
380
640
  <ControlRow />
381
641
  </Stack>
382
642
  <Stack gap="sm">
383
- <Text type="secondary" size="xs">--density-scale: 0.8 — heights and rows tighten, gaps hold</Text>
384
- <Scope vars={{ "--density-scale": 0.8 }}>
643
+ <Text type="secondary" size="xs">scale: 0.875 — every length and type step</Text>
644
+ <UIProvider config={{ scale: 0.875 }}>
385
645
  <ControlRow />
386
- </Scope>
646
+ </UIProvider>
387
647
  </Stack>
388
648
  <Stack gap="sm">
389
- <Text type="secondary" size="xs">--density-scale: 1.4 — gaps open, control heights hold</Text>
390
- <Scope vars={{ "--density-scale": 1.4 }}>
649
+ <Text type="secondary" size="xs">--control-height: 2.5rem — every control, nothing else</Text>
650
+ <Scope vars={{ "--control-height": "2.5rem" }}>
391
651
  <ControlRow />
392
652
  </Scope>
393
653
  </Stack>
394
654
  <Stack gap="sm">
395
- <Text type="secondary" size="xs">--button-h: 2.75rem — one measurement</Text>
396
- <Scope vars={{ "--button-h": "2.75rem" }}>
655
+ <Text type="secondary" size="xs">--radius-sm: 0 — every item corner</Text>
656
+ <Scope vars={{ "--radius-sm": "0" }}>
397
657
  <ControlRow />
398
658
  </Scope>
399
659
  </Stack>
@@ -414,13 +674,13 @@ import { ControlRow } from "./_shared"
414
674
  export default function Nesting() {
415
675
  return (
416
676
  <UIProvider config={{ scale: 1.125 }}>
417
- <Stack gap="lg">
677
+ <Stack>
418
678
  <Text type="secondary" size="sm">
419
679
  Outer scope — 1.125
420
680
  </Text>
421
681
  <ControlRow />
422
682
  <UIProvider config={{ scale: 0.8 }}>
423
- <Stack gap="md">
683
+ <Stack gap="sm">
424
684
  <Text type="secondary" size="sm">
425
685
  Nested scope — 0.8
426
686
  </Text>
@@ -433,12 +693,37 @@ export default function Nesting() {
433
693
  }
434
694
  ```
435
695
 
696
+ ### Density presets
697
+
698
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
699
+ import { Stack } from "themelia-ui/base/structure"
700
+ import { Text } from "themelia-ui/base/typography"
701
+ import { UIProvider } from "themelia-ui/ui-provider"
702
+
703
+ import { ControlRow } from "./_shared"
704
+
705
+ export default function Density() {
706
+ return (
707
+ <>
708
+ {(["compact", "default", "comfortable"] as const).map((density) => (
709
+ <UIProvider key={density} config={{ density }}>
710
+ <Stack direction="horizontal" align="center">
711
+ <Text tag="span" size="xs" mono style={{ width: "7rem", flex: "none" }}>{density}</Text>
712
+ <ControlRow />
713
+ </Stack>
714
+ </UIProvider>
715
+ ))}
716
+ </>
717
+ )
718
+ }
719
+ ```
720
+
436
721
  ### Density
437
722
 
438
723
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
439
724
  import { Stack } from "themelia-ui/base/structure"
440
725
  import { Text } from "themelia-ui/base/typography"
441
- import { Scope } from "themelia-ui/ui-provider"
726
+ import { UIScope } from "themelia-ui/ui-provider"
442
727
 
443
728
  import { InvoiceTable } from "./_shared"
444
729
 
@@ -448,16 +733,16 @@ export default function TableScale() {
448
733
  * Both, captioned. On its own the scoped table just looked like a table —
449
734
  * the section asserted a difference the page gave the reader no way to see.
450
735
  */
451
- <Stack gap="lg" style={{ width: "100%" }}>
452
- <Stack gap="xs" style={{ width: "100%" }}>
453
- <Text size="xs" type="secondary">--density-scale: 1</Text>
736
+ <Stack style={{ width: "100%" }}>
737
+ <Stack gap="sm" style={{ width: "100%" }}>
738
+ <Text size="xs" type="secondary">density: default</Text>
454
739
  <InvoiceTable />
455
740
  </Stack>
456
- <Stack gap="xs" style={{ width: "100%" }}>
457
- <Text size="xs" type="secondary">--density-scale: 0.85</Text>
458
- <Scope vars={{ "--density-scale": 0.85 }} style={{ width: "100%" }}>
741
+ <Stack gap="sm" style={{ width: "100%" }}>
742
+ <Text size="xs" type="secondary">density: compact</Text>
743
+ <UIScope config={{ density: "compact" }} style={{ width: "100%" }}>
459
744
  <InvoiceTable />
460
- </Scope>
745
+ </UIScope>
461
746
  </Stack>
462
747
  </Stack>
463
748
  )
@@ -15,12 +15,11 @@ The user contributes files — dropzone, avatar, image, or a tray with progress.
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { AvatarUpload } from "themelia-ui/base/upload"
18
- import "themelia-ui/base/upload.css"
19
18
  ```
20
19
 
21
20
  ## Composition
22
21
 
23
- This module composes `base/badge`, `base/buttons`, `base/display`, `base/feedback`.
22
+ This module composes `base/badge`, `base/buttons`, `base/display`, `base/feedback`, `base/typography`.
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.
@@ -569,7 +568,7 @@ export default function FileUploadExample() {
569
568
  const [rejected, setRejected] = useState<FileRejection[]>([])
570
569
 
571
570
  return (
572
- <Stack gap="xl" style={{ maxWidth: "34rem", width: "100%" }}>
571
+ <Stack style={{ maxWidth: "34rem", width: "100%" }}>
573
572
  <FormField label="Attachments" helperText="Drag files in, or click to browse.">
574
573
  <FileUpload
575
574
  multiple
@@ -621,8 +620,8 @@ export default function MediaUpload() {
621
620
  const [error, setError] = useState<string>()
622
621
 
623
622
  return (
624
- <Stack direction={{ base: "vertical", sm: "horizontal" }} gap="2xl" align="start" style={{ width: "100%" }}>
625
- <Stack gap="xl" style={{ maxWidth: "26rem", width: "100%" }}>
623
+ <Stack direction={{ base: "vertical", sm: "horizontal" }} align="start" style={{ width: "100%" }}>
624
+ <Stack style={{ maxWidth: "26rem", width: "100%" }}>
626
625
  <FormField label="Profile photo" helperText="Nothing stored yet.">
627
626
  <AvatarUpload />
628
627
  </FormField>
@@ -632,7 +631,7 @@ export default function MediaUpload() {
632
631
  onValueChange={() => setError(undefined)} />
633
632
  </FormField>
634
633
  </Stack>
635
- <Stack gap="xl" style={{ maxWidth: "26rem", width: "100%" }}>
634
+ <Stack style={{ maxWidth: "26rem", width: "100%" }}>
636
635
  <FormField label="Profile photo" helperText="Your current profile photo.">
637
636
  <AvatarUpload previewUrl={SAMPLE_IMAGE_URL} />
638
637
  </FormField>
@@ -657,7 +656,7 @@ export default function UploadQueue() {
657
656
  const items = QUEUE
658
657
 
659
658
  return (
660
- <Stack style={{ maxWidth: "34rem", width: "100%" }}>
659
+ <Stack gap="sm" style={{ maxWidth: "34rem", width: "100%" }}>
661
660
  <UploadProgressList items={items} onRetry={() => {}} onRemove={() => {}} />
662
661
  </Stack>
663
662
  )
@@ -676,7 +675,7 @@ export default function UploadTrayExample() {
676
675
  const items = QUEUE
677
676
 
678
677
  return (
679
- <Stack style={{ maxWidth: "34rem", width: "100%" }}>
678
+ <Stack gap="sm" style={{ maxWidth: "34rem", width: "100%" }}>
680
679
  <UploadTray
681
680
  items={items}
682
681
  onAddFiles={() => {}}
@@ -703,7 +702,7 @@ export default function MediaGalleryExample() {
703
702
  const [images, setImages] = useState<File[]>(SAMPLE_IMAGES)
704
703
 
705
704
  return (
706
- <Stack style={{ maxWidth: "34rem", width: "100%" }}>
705
+ <Stack gap="sm" style={{ maxWidth: "34rem", width: "100%" }}>
707
706
  <MediaGallery value={images} onValueChange={setImages} maxFiles={6} />
708
707
  </Stack>
709
708
  )