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 @@ Passive siblings need consistent spacing, a grid, or a stack — with no semanti
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { AdaptiveGrid } from "themelia-ui/base/structure"
18
- import "themelia-ui/base/structure.css"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -31,6 +30,16 @@ outside the package and arrives through the public props, callbacks, slots, or a
31
30
 
32
31
  Kind: const.
33
32
 
33
+ **Use when:** Equal tracks should be added as minimum-width columns fit the available panel.
34
+
35
+ **Avoid when:** The design requires an explicit column count or a fixed summary rail.
36
+
37
+ **Compose:** Set minColumnWidth and shared gaps. Column count follows available width; responsive gap and alignment use viewport steps.
38
+
39
+ **Capabilities:** auto fit columns; minimum column width; responsive panel grid.
40
+
41
+ **Alternatives:** Grid, Split.
42
+
34
43
  ```text
35
44
  React.ForwardRefExoticComponent<Omit<AdaptiveGridProps, "ref"> & React.RefAttributes<HTMLDivElement>>
36
45
  ```
@@ -51,7 +60,7 @@ Extends: `React.ComponentProps<"div">`.
51
60
 
52
61
  | member | required | type | description / documented default |
53
62
  | --- | :-: | --- | --- |
54
- | `minColumnWidth` | no | `AdaptiveGridMinimum` | Minimum column width before another track is added. |
63
+ | `minColumnWidth` | no | `AdaptiveGridMinimum \| CssLength` | Minimum column width before another track is added: `default`, `sm` or a CSS length. |
55
64
  | `gap` | no | `ResponsiveValue<StructureGap>` | |
56
65
  | `align` | no | `ResponsiveValue<StructureAlign>` | |
57
66
 
@@ -59,6 +68,16 @@ Extends: `React.ComponentProps<"div">`.
59
68
 
60
69
  Kind: const.
61
70
 
71
+ **Use when:** Intentional media or a rule must escape a known parent inset.
72
+
73
+ **Avoid when:** Removing duplicate wrapper padding or hiding accidental overflow.
74
+
75
+ **Compose:** Match amount to the actual inset. Shipped padding and gap pairs match; check custom themes and focus visibility.
76
+
77
+ **Capabilities:** edge to edge inset escape; inline block negative margins.
78
+
79
+ **Alternatives:** ContentBlock.
80
+
62
81
  ```text
63
82
  React.ForwardRefExoticComponent<Omit<BleedProps, "ref"> & React.RefAttributes<HTMLDivElement>>
64
83
  ```
@@ -81,13 +100,33 @@ Extends: `React.ComponentProps<"div">`.
81
100
 
82
101
  | member | required | type | description / documented default |
83
102
  | --- | :-: | --- | --- |
84
- | `amount` | no | `ResponsiveValue<StructureGap>` | How far to escape, on the spacing scale. Match it to the padding being cancelled — a<br>surface at `--space-md` bleeds `md` — so the two move together under a density change. @default "none" |
85
- | `axis` | no | `BleedAxis` | Which way to escape; `both` covers every direction. Sideways is the common case: an<br>image bleeds across and keeps its vertical rhythm. |
103
+ | `amount` | no | `ResponsiveValue<StructureGap>` | How far to escape: one of the two gaps, which equal the two paddings. Match it to the<br>padding being cancelled — a surface padded by `--padding-sm` bleeds `sm` — so the two<br>move together under a density change. @default "none" |
104
+ | `axis` | no | `BleedAxis` | Which way to escape; `both` covers every direction. Sideways is the common case: an<br>image bleeds across and keeps its vertical rhythm. @default "inline" |
105
+
106
+ ### `CssLength`
107
+
108
+ Kind: type.
109
+
110
+ A CSS length: a number with a unit or a percentage, or a math or `var()` expression.
111
+
112
+ ```text
113
+ `${number}${"px" | "rem" | "em" | "ch" | "%" | "vw" | "vh" | "dvw" | "dvh" | "svw" | "svh" | "lvw" | "lvh"}` | `${"calc" | "min" | "max" | "clamp" | "var"}(${string})`
114
+ ```
86
115
 
87
116
  ### `Grid`
88
117
 
89
118
  Kind: const.
90
119
 
120
+ **Use when:** Passive siblings need an explicit responsive column count.
121
+
122
+ **Avoid when:** The column count should follow how many minimum-width tracks fit, or a feature already arranges its children.
123
+
124
+ **Compose:** Grid owns gaps, not child insets. It uses nearest-container thresholds when containment exists, otherwise viewport thresholds.
125
+
126
+ **Capabilities:** responsive columns; grid row column gaps; nearest container width.
127
+
128
+ **Alternatives:** AdaptiveGrid, Stack.
129
+
91
130
  ```text
92
131
  React.ForwardRefExoticComponent<Omit<GridProps, "ref"> & React.RefAttributes<HTMLDivElement>>
93
132
  ```
@@ -96,6 +135,16 @@ React.ForwardRefExoticComponent<Omit<GridProps, "ref"> & React.RefAttributes<HTM
96
135
 
97
136
  Kind: const.
98
137
 
138
+ **Use when:** A direct Grid child needs a numeric span or a full row.
139
+
140
+ **Avoid when:** The parent is not a Grid, or a span would exceed its current column count.
141
+
142
+ **Compose:** Coordinate numeric spans with the parent columns. GridCell spans use viewport steps even when Grid uses container steps.
143
+
144
+ **Capabilities:** responsive cell span; full row span.
145
+
146
+ **Alternatives:** Stack.
147
+
99
148
  ```text
100
149
  React.ForwardRefExoticComponent<Omit<GridCellProps, "ref"> & React.RefAttributes<HTMLDivElement>>
101
150
  ```
@@ -108,7 +157,7 @@ Extends: `React.ComponentProps<"div">`.
108
157
 
109
158
  | member | required | type | description / documented default |
110
159
  | --- | :-: | --- | --- |
111
- | `span` | no | `ResponsiveValue<GridSpan>` | Columns occupied. `full` spans whatever the grid currently has. |
160
+ | `span` | no | `ResponsiveValue<GridSpan>` | Columns occupied. `full` spans whatever the grid currently has, including in a<br>responsive object. Span breakpoints follow the viewport, not Grid's container. |
112
161
 
113
162
  ### `GridColumns`
114
163
 
@@ -126,12 +175,12 @@ Extends: `React.ComponentProps<"div">`.
126
175
 
127
176
  | member | required | type | description / documented default |
128
177
  | --- | :-: | --- | --- |
129
- | `columns` | no | `ResponsiveValue<GridColumns>` | Defaults to one column, then two from the md breakpoint. |
178
+ | `columns` | no | `ResponsiveValue<GridColumns>` | Defaults to one column, then two from md. Uses the nearest inline-size query<br>container when present (md = 32rem), otherwise the viewport (md = 48rem). |
130
179
  | `gap` | no | `ResponsiveValue<StructureGap>` | |
131
180
  | `rowGap` | no | `ResponsiveValue<StructureGap>` | |
132
181
  | `columnGap` | no | `ResponsiveValue<StructureGap>` | |
133
182
  | `align` | no | `ResponsiveValue<StructureAlign>` | |
134
- | `maxWidth` | no | `ResponsiveValue<StructureWidth \| (string & {})>` | Caps the grid's width — a content step, or any CSS length. Same scale as `Stack`. |
183
+ | `maxWidth` | no | `ResponsiveValue<StructureWidth \| CssLength>` | Caps the grid's width — a content step, or any CSS length. Same scale as `Stack`. |
135
184
 
136
185
  ### `GridSpan`
137
186
 
@@ -155,6 +204,16 @@ T | Partial<Record<Breakpoint, T>>
155
204
 
156
205
  Kind: const.
157
206
 
207
+ **Use when:** A fluid main region sits beside a constrained rail that collapses at a chosen viewport step.
208
+
209
+ **Avoid when:** Needing equal tracks or the standard semantic main/aside layout.
210
+
211
+ **Compose:** Supply main first and side second. side changes visual placement, not DOM order. Width is a rail maximum, with collapseBelow controlling stacking.
212
+
213
+ **Capabilities:** fluid main fixed rail; responsive two columns; collapse breakpoint.
214
+
215
+ **Alternatives:** TwoColumnLayout, Grid.
216
+
158
217
  ```text
159
218
  React.ForwardRefExoticComponent<Omit<SplitProps, "ref"> & React.RefAttributes<HTMLDivElement>>
160
219
  ```
@@ -168,9 +227,9 @@ Extends: `React.ComponentProps<"div">`.
168
227
  | member | required | type | description / documented default |
169
228
  | --- | :-: | --- | --- |
170
229
  | `side` | no | `SplitSide` | Which visual column is the fixed one. The DOM order never changes with it: the first<br>child is the main content and the second the side on both settings, so a reader<br>tabbing through reaches the content first either way. |
171
- | `sideWidth` | no | `ResponsiveValue<StructureWidth \| (string & {})>` | The fixed column's width — a step or any CSS length. A maximum rather than an exact<br>size, so a narrow viewport shrinks the rail instead of squeezing the content beside it<br>to nothing. @default "18rem" |
172
- | `gap` | no | `ResponsiveValue<StructureGap>` | Space between the two columns. @default "md" |
173
- | `collapseBelow` | no | `"sm" \| "md" \| "lg" \| "xl" \| "never"` | Below this breakpoint the two columns become one. `never` keeps them side by side at<br>every width. |
230
+ | `sideWidth` | no | `ResponsiveValue<StructureWidth \| CssLength>` | The fixed column's width — a step or any CSS length. A maximum rather than an exact<br>size, so a narrow viewport shrinks the rail instead of squeezing the content beside it<br>to nothing. @default "18rem" |
231
+ | `gap` | no | `ResponsiveValue<StructureGap>` | Space between the two columns. @default "default" |
232
+ | `collapseBelow` | no | `"sm" \| "md" \| "lg" \| "xl" \| "never"` | Below this breakpoint the two columns become one. `never` keeps them side by side at<br>every width. @default "md" |
174
233
 
175
234
  ### `SplitSide`
176
235
 
@@ -190,7 +249,7 @@ Kind: const.
190
249
 
191
250
  **Avoid when:** An existing component already owns the layout.
192
251
 
193
- **Compose:** Use shared gap and inset props; do not pin local pixel spacing.
252
+ **Compose:** Use gap, direction and alignment props; Stack adds no inset. Let child surfaces own padding.
194
253
 
195
254
  **Capabilities:** vertical horizontal gap spacing; responsive arrangement.
196
255
 
@@ -209,11 +268,11 @@ Extends: `Omit<React.ComponentProps<"div">, "dir">`.
209
268
  | member | required | type | description / documented default |
210
269
  | --- | :-: | --- | --- |
211
270
  | `direction` | no | `ResponsiveValue<StructureDirection>` | Main axis. @default "vertical" |
212
- | `gap` | no | `ResponsiveValue<StructureGap>` | Space between children, on the semantic spacing scale. @default "md" |
271
+ | `gap` | no | `ResponsiveValue<StructureGap>` | Space between children: `default` between groups, `sm` inside one. @default "default" |
213
272
  | `align` | no | `ResponsiveValue<StructureAlign>` | Cross-axis alignment. @default "stretch" |
214
273
  | `justify` | no | `ResponsiveValue<StructureJustify>` | Main-axis distribution. @default "start" |
215
274
  | `wrap` | no | `ResponsiveValue<boolean>` | Allows children to flow onto more than one line. @default false |
216
- | `maxWidth` | no | `ResponsiveValue<StructureWidth \| (string & {})>` | Caps the box's width — a content step (`sm` to `2xl`, `full`, `none`) or any CSS<br>length, such as a form's `26rem`. A field measure is a control decision rather than a<br>content one, which is why a raw length is allowed beside the scale. |
275
+ | `maxWidth` | no | `ResponsiveValue<StructureWidth \| CssLength>` | Caps the box's width — a content width (`default`, `sm`, `full`, `none`) or any CSS<br>length, such as a form's `26rem`. A field measure is a control decision rather than a<br>content one, which is why a raw length is allowed beside the scale. |
217
276
 
218
277
  ### `StructureAlign`
219
278
 
@@ -243,8 +302,11 @@ Kind: type.
243
302
 
244
303
  Kind: type.
245
304
 
305
+ The two gaps: `default` between groups (fields, cards, sections), `sm` inside a group
306
+ (icon and label, title and description, a toolbar's controls). Unset is `default`.
307
+
246
308
  ```text
247
- "none" | "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
309
+ "none" | "sm" | "default"
248
310
  ```
249
311
 
250
312
  ### `StructureJustify`
@@ -259,16 +321,178 @@ Kind: type.
259
321
 
260
322
  Kind: type.
261
323
 
262
- A content-width step (`--content-width-*`), or any CSS length for a control measure such
263
- as a field's ~26rem.
324
+ The content width (`default`), a narrow reading or form measure (`sm`), or any CSS length
325
+ for a control measure such as a field's ~26rem.
264
326
 
265
327
  ```text
266
- "sm" | "md" | "lg" | "xl" | "2xl" | "full" | "none"
328
+ "default" | "sm" | "full" | "none"
267
329
  ```
268
330
 
269
331
  ## Preview recipes
270
332
 
271
- Preview route: Form field — `/form-field`
333
+ Preview route: Analytics — `/analytics`
334
+
335
+ ### Compose your own
336
+
337
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
338
+ import { ArrowUpIcon, CreditCardIcon } from "lucide-react"
339
+
340
+ import { Badge } from "themelia-ui/base/badge"
341
+ import { Card } from "themelia-ui/base/cards"
342
+ import { Sparkline } from "themelia-ui/base/chart"
343
+ import { IconBadge } from "themelia-ui/base/display"
344
+ import { Stack } from "themelia-ui/base/structure"
345
+ import { DisplayLabel, Text } from "themelia-ui/base/typography"
346
+ import { Money } from "themelia-ui/primitives"
347
+
348
+ export default function AnalyticsBlueprint() {
349
+ return (
350
+ <Card style={{ maxWidth: "20rem" }}>
351
+ <Stack gap="sm">
352
+ <Stack direction="horizontal" align="center" gap="sm">
353
+ <IconBadge icon={CreditCardIcon} tone="primary" />
354
+ <DisplayLabel>Revenue</DisplayLabel>
355
+ </Stack>
356
+ <Stack direction="horizontal" align="center" justify="between" gap="sm">
357
+ <Money amount={48200} currency="EUR" size="xl" weight="semibold" />
358
+ <Badge tone="success">
359
+ <ArrowUpIcon />
360
+ 12.4%
361
+ </Badge>
362
+ </Stack>
363
+ <Sparkline data={[18, 22, 19, 27, 24, 31, 29, 38]} tone="success" label="Revenue rising over eight weeks" />
364
+ <Text size="xs" type="secondary">
365
+ Net of refunds, this quarter
366
+ </Text>
367
+ </Stack>
368
+ </Card>
369
+ )
370
+ }
371
+ ```
372
+
373
+ ### Compose your own timeline
374
+
375
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
376
+ import { RocketIcon, WrenchIcon } from "lucide-react"
377
+
378
+ import { Badge } from "themelia-ui/base/badge"
379
+ import { Stack } from "themelia-ui/base/structure"
380
+ import { Timeline, type TimelineItem } from "themelia-ui/base/timeline"
381
+ import { MonoValue } from "themelia-ui/primitives"
382
+
383
+ const RELEASES: TimelineItem[] = [
384
+ {
385
+ id: "3.1.0",
386
+ title: "Saved views",
387
+ timestamp: <MonoValue size="xs" type="secondary">v3.1.0</MonoValue>,
388
+ icon: RocketIcon,
389
+ status: "success",
390
+ description: "Filters and columns can be saved and shared with the team.",
391
+ children: (
392
+ <Stack direction="horizontal" gap="sm">
393
+ <Badge tone="success">Added</Badge>
394
+ <Badge tone="neutral">Tables</Badge>
395
+ </Stack>
396
+ ),
397
+ },
398
+ {
399
+ id: "3.0.2",
400
+ title: "Faster exports",
401
+ timestamp: <MonoValue size="xs" type="secondary">v3.0.2</MonoValue>,
402
+ icon: WrenchIcon,
403
+ status: "neutral",
404
+ description: "Large exports stream instead of waiting for the whole file.",
405
+ },
406
+ ]
407
+
408
+ export default function ChangelogBlueprint() {
409
+ return (
410
+ <Timeline items={RELEASES} />
411
+ )
412
+ }
413
+ ```
414
+
415
+ ### Compose your own checklist
416
+
417
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
418
+ import { CheckIcon, CircleIcon } from "lucide-react"
419
+
420
+ import { Accordion } from "themelia-ui/base/accordion"
421
+ import { Button } from "themelia-ui/base/buttons"
422
+ import { IconBadge } from "themelia-ui/base/display"
423
+ import { Progress } from "themelia-ui/base/feedback"
424
+ import { Stack } from "themelia-ui/base/structure"
425
+ import { Text } from "themelia-ui/base/typography"
426
+
427
+ export default function ChecklistBlueprint() {
428
+ return (
429
+ <Stack style={{ maxWidth: "34rem", width: "100%" }}>
430
+ <Progress value={1} max={3} label="1 of 3 steps complete" />
431
+ <Accordion
432
+ media="medallion"
433
+ defaultValue={["invite"]}
434
+ items={[
435
+ {
436
+ value: "profile",
437
+ title: "Complete your profile",
438
+ icon: <IconBadge icon={CheckIcon} tone="success" shape="circle" />,
439
+ content: <Text type="secondary">Name, avatar and time zone are set.</Text>,
440
+ },
441
+ {
442
+ value: "invite",
443
+ title: "Invite your team",
444
+ icon: <IconBadge icon={CircleIcon} shape="circle" />,
445
+ content: (
446
+ <Stack gap="sm" align="start">
447
+ <Text type="secondary">Teammates see the same projects and saved views.</Text>
448
+ <Button>Send invites</Button>
449
+ </Stack>
450
+ ),
451
+ },
452
+ {
453
+ value: "connect",
454
+ title: "Connect a data source",
455
+ icon: <IconBadge icon={CircleIcon} shape="circle" />,
456
+ content: <Text type="secondary">Postgres, a CSV upload or the REST API.</Text>,
457
+ },
458
+ ]}
459
+ />
460
+ </Stack>
461
+ )
462
+ }
463
+ ```
464
+
465
+ ### Compose your own
466
+
467
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
468
+ import { Button } from "themelia-ui/base/buttons"
469
+ import { Card } from "themelia-ui/base/cards"
470
+ import { MetadataList } from "themelia-ui/base/display"
471
+ import { Stack } from "themelia-ui/base/structure"
472
+ import { toast } from "themelia-ui/base/toaster"
473
+ import { Money } from "themelia-ui/primitives"
474
+
475
+ export default function CartSummaryBlueprint() {
476
+ return (
477
+ <Card title="Order summary" description="3 items" style={{ maxWidth: "24rem" }}>
478
+ <Stack>
479
+ <MetadataList
480
+ layout="rows"
481
+ items={[
482
+ { label: "Subtotal", value: <Money amount={258} currency="EUR" /> },
483
+ { label: "Shipping", value: <Money amount={4.8} currency="EUR" /> },
484
+ { label: "Tax", value: <Money amount={51.6} currency="EUR" /> },
485
+ { label: "Total", value: <Money amount={314.4} currency="EUR" weight="semibold" /> },
486
+ ]}
487
+ />
488
+ <Button onClick={() => toast("Checkout requested", { description: "Preview callback — connect this action to your application." })}>
489
+ Check out
490
+ </Button>
491
+ </Stack>
492
+ </Card>
493
+ )
494
+ }
495
+ ```
272
496
 
273
497
  ### Scale
274
498
 
@@ -276,29 +500,29 @@ Preview route: Form field — `/form-field`
276
500
  import { Stack } from "themelia-ui/base/structure"
277
501
  import { Input, NativeSelect } from "themelia-ui/base/text-inputs"
278
502
  import { MonoValue } from "themelia-ui/primitives"
279
- import { Scope } from "themelia-ui/ui-provider"
503
+ import { UIScope } from "themelia-ui/ui-provider"
280
504
 
281
505
  export default function FormsScale() {
282
506
  return (
283
- <Stack gap="lg" style={{ width: "100%" }}>
284
- {[1, 0.875, 1.125].map((scale) => (
285
- <Scope key={scale} vars={{ "--density-scale": scale }}>
286
- <Stack direction="horizontal" gap="md" align="center" justify="start">
507
+ <Stack style={{ width: "100%" }}>
508
+ {(["compact", "default", "comfortable"] as const).map((density) => (
509
+ <UIScope key={density} config={{ density }}>
510
+ <Stack direction="horizontal" gap="sm" align="center" justify="start">
287
511
  {/* Widths on the wrappers: Input's style lands on the inner control, not its frame. */}
288
- <MonoValue size="xs" style={{ width: "3.5rem", flexShrink: 0, fontSize: "0.75rem" }}>
289
- {scale}
512
+ <MonoValue size="xs" style={{ width: "6rem", flexShrink: 0 }}>
513
+ {density}
290
514
  </MonoValue>
291
515
  {/* Named even in a geometry demo: a placeholder is not a label. */}
292
516
  <div style={{ width: "12rem", flexShrink: 0 }}>
293
- <Input placeholder="Field" aria-label={`Example field at density ${scale}`} />
517
+ <Input placeholder="Field" aria-label={`Example field at ${density} density`} />
294
518
  </div>
295
519
  <div style={{ width: "9rem", flexShrink: 0 }}>
296
- <NativeSelect defaultValue="a" aria-label={`Example select at density ${scale}`}>
520
+ <NativeSelect defaultValue="a" aria-label={`Example select at ${density} density`}>
297
521
  <option value="a">Option</option>
298
522
  </NativeSelect>
299
523
  </div>
300
524
  </Stack>
301
- </Scope>
525
+ </UIScope>
302
526
  ))}
303
527
  </Stack>
304
528
  )
@@ -315,7 +539,7 @@ import { Demo } from "./_shared"
315
539
 
316
540
  export default function OverlayPlacementExample() {
317
541
  return (
318
- <Stack direction="horizontal" gap="md" wrap>
542
+ <Stack direction="horizontal" gap="sm" wrap>
319
543
  {(
320
544
  ["center", "inline-start", "inline-end", "block-start", "block-end"] as OverlayPlacement[]
321
545
  ).map((placement) => (
@@ -335,7 +559,7 @@ import { Demo } from "./_shared"
335
559
 
336
560
  export default function OverlayDismissal() {
337
561
  return (
338
- <Stack direction="horizontal" gap="md" wrap>
562
+ <Stack direction="horizontal" gap="sm" wrap>
339
563
  <Demo label="no backdrop dismiss" dismissal={{ backdrop: false }} />
340
564
  <Demo label="no escape" dismissal={{ escape: false }} />
341
565
  </Stack>
@@ -347,6 +571,7 @@ export default function OverlayDismissal() {
347
571
 
348
572
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
349
573
  import { Stack } from "themelia-ui/base/structure"
574
+ import { Text } from "themelia-ui/base/typography"
350
575
  import { UIProvider } from "themelia-ui/ui-provider"
351
576
 
352
577
  import { ControlRow } from "./_shared"
@@ -358,8 +583,8 @@ export default function TheFactor() {
358
583
  <>
359
584
  {FACTORS.map((scale) => (
360
585
  <UIProvider key={scale} config={{ scale }}>
361
- <Stack direction="horizontal" gap="lg" align="center">
362
- <code style={{ width: "4rem", fontSize: "var(--text-xs)" }}>{scale}</code>
586
+ <Stack direction="horizontal" align="center">
587
+ <Text tag="span" size="xs" mono style={{ width: "4rem", flex: "none" }}>{scale}</Text>
363
588
  <ControlRow />
364
589
  </Stack>
365
590
  </UIProvider>
@@ -369,7 +594,7 @@ export default function TheFactor() {
369
594
  }
370
595
  ```
371
596
 
372
- ### Type can override the master factor
597
+ ### Type has its own factor
373
598
 
374
599
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
375
600
  import { Button } from "themelia-ui/base/buttons"
@@ -380,11 +605,11 @@ import { UIProvider } from "themelia-ui/ui-provider"
380
605
 
381
606
  export default function TypeFactor() {
382
607
  return (
383
- <Stack gap="lg">
608
+ <Stack>
384
609
  <Stack gap="sm">
385
610
  <Text type="secondary" size="xs">typography.scale 0.875 — type shrinks, control geometry holds</Text>
386
611
  <UIProvider config={{ typography: { scale: 0.875 } }}>
387
- <Stack direction="horizontal" gap="md" align="center" wrap>
612
+ <Stack direction="horizontal" gap="sm" align="center" wrap>
388
613
  <Text>Body copy at this factor.</Text>
389
614
  <Button>Save</Button>
390
615
  <Checkbox label="Check" defaultChecked />
@@ -394,7 +619,7 @@ export default function TypeFactor() {
394
619
  <Stack gap="sm">
395
620
  <Text type="secondary" size="xs">scale 0.875 + typography.scale 1 — geometry shrinks, type holds</Text>
396
621
  <UIProvider config={{ scale: 0.875, typography: { scale: 1 } }}>
397
- <Stack direction="horizontal" gap="md" align="center" wrap>
622
+ <Stack direction="horizontal" gap="sm" align="center" wrap>
398
623
  <Text>Body copy at this factor.</Text>
399
624
  <Button>Save</Button>
400
625
  <Checkbox label="Check" defaultChecked />
@@ -406,37 +631,37 @@ export default function TypeFactor() {
406
631
  }
407
632
  ```
408
633
 
409
- ### Two levels of control
634
+ ### A factor, or one variable
410
635
 
411
636
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
412
637
  import { Stack } from "themelia-ui/base/structure"
413
638
  import { Text } from "themelia-ui/base/typography"
414
- import { Scope } from "themelia-ui/ui-provider"
639
+ import { Scope, UIProvider } from "themelia-ui/ui-provider"
415
640
 
416
641
  import { ControlRow } from "./_shared"
417
642
 
418
643
  export default function FactorChain() {
419
644
  return (
420
- <Stack gap="lg">
645
+ <Stack>
421
646
  <Stack gap="sm">
422
647
  <Text type="secondary" size="xs">default</Text>
423
648
  <ControlRow />
424
649
  </Stack>
425
650
  <Stack gap="sm">
426
- <Text type="secondary" size="xs">--density-scale: 0.8 — heights and rows tighten, gaps hold</Text>
427
- <Scope vars={{ "--density-scale": 0.8 }}>
651
+ <Text type="secondary" size="xs">scale: 0.875 — every length and type step</Text>
652
+ <UIProvider config={{ scale: 0.875 }}>
428
653
  <ControlRow />
429
- </Scope>
654
+ </UIProvider>
430
655
  </Stack>
431
656
  <Stack gap="sm">
432
- <Text type="secondary" size="xs">--density-scale: 1.4 — gaps open, control heights hold</Text>
433
- <Scope vars={{ "--density-scale": 1.4 }}>
657
+ <Text type="secondary" size="xs">--control-height: 2.5rem — every control, nothing else</Text>
658
+ <Scope vars={{ "--control-height": "2.5rem" }}>
434
659
  <ControlRow />
435
660
  </Scope>
436
661
  </Stack>
437
662
  <Stack gap="sm">
438
- <Text type="secondary" size="xs">--button-h: 2.75rem — one measurement</Text>
439
- <Scope vars={{ "--button-h": "2.75rem" }}>
663
+ <Text type="secondary" size="xs">--radius-sm: 0 — every item corner</Text>
664
+ <Scope vars={{ "--radius-sm": "0" }}>
440
665
  <ControlRow />
441
666
  </Scope>
442
667
  </Stack>
@@ -457,13 +682,13 @@ import { ControlRow } from "./_shared"
457
682
  export default function Nesting() {
458
683
  return (
459
684
  <UIProvider config={{ scale: 1.125 }}>
460
- <Stack gap="lg">
685
+ <Stack>
461
686
  <Text type="secondary" size="sm">
462
687
  Outer scope — 1.125
463
688
  </Text>
464
689
  <ControlRow />
465
690
  <UIProvider config={{ scale: 0.8 }}>
466
- <Stack gap="md">
691
+ <Stack gap="sm">
467
692
  <Text type="secondary" size="sm">
468
693
  Nested scope — 0.8
469
694
  </Text>
@@ -480,6 +705,7 @@ export default function Nesting() {
480
705
 
481
706
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
482
707
  import { Stack } from "themelia-ui/base/structure"
708
+ import { Text } from "themelia-ui/base/typography"
483
709
  import { UIProvider } from "themelia-ui/ui-provider"
484
710
 
485
711
  import { ControlRow } from "./_shared"
@@ -489,8 +715,8 @@ export default function Density() {
489
715
  <>
490
716
  {(["compact", "default", "comfortable"] as const).map((density) => (
491
717
  <UIProvider key={density} config={{ density }}>
492
- <Stack direction="horizontal" gap="lg" align="center">
493
- <code style={{ width: "7rem", fontSize: "var(--text-xs)" }}>{density}</code>
718
+ <Stack direction="horizontal" align="center">
719
+ <Text tag="span" size="xs" mono style={{ width: "7rem", flex: "none" }}>{density}</Text>
494
720
  <ControlRow />
495
721
  </Stack>
496
722
  </UIProvider>
@@ -509,7 +735,7 @@ import { Panel } from "./_shared"
509
735
 
510
736
  export default function SidebarVariantExample() {
511
737
  return (
512
- <Stack gap="xl">
738
+ <Stack>
513
739
  <Panel variant="floating" />
514
740
  <Panel variant="inset" />
515
741
  </Stack>
@@ -531,7 +757,7 @@ export default function StackExample() {
531
757
  <Box>vertical, gap sm</Box>
532
758
  <Box>second</Box>
533
759
  </Stack>
534
- <Stack direction="horizontal" gap="md" justify="between" align="center">
760
+ <Stack direction="horizontal" gap="sm" justify="between" align="center">
535
761
  <Box>horizontal</Box>
536
762
  <Box>justify between</Box>
537
763
  <Box>align center</Box>
@@ -550,7 +776,7 @@ import { Box } from "./_shared"
550
776
 
551
777
  export default function ResponsiveProps() {
552
778
  return (
553
- <Stack direction={{ base: "vertical", md: "horizontal" }} gap={{ base: "xs", md: "xl" }}>
779
+ <Stack direction={{ base: "vertical", md: "horizontal" }} gap={{ base: "sm", md: "default" }}>
554
780
  <Box>stacks on small</Box>
555
781
  <Box>row from md</Box>
556
782
  <Box>gap grows too</Box>
@@ -568,13 +794,14 @@ import { Box } from "./_shared"
568
794
 
569
795
  export default function GridExample() {
570
796
  return (
571
- <Grid columns={{ base: 1, md: 3 }} gap="md">
797
+ <Grid columns={{ base: 1, md: 3 }} gap="sm">
572
798
  <GridCell span="full"><Box>span full</Box></GridCell>
573
799
  <GridCell><Box>one</Box></GridCell>
574
800
  <GridCell><Box>two</Box></GridCell>
575
801
  <GridCell><Box>three</Box></GridCell>
576
802
  <GridCell span={{ base: 1, md: 2 }}><Box>span 2 from md</Box></GridCell>
577
803
  <GridCell><Box>four</Box></GridCell>
804
+ <GridCell span={{ base: 1, md: "full", xl: 2 }}><Box>responsive full row</Box></GridCell>
578
805
  </Grid>
579
806
  )
580
807
  }
@@ -589,7 +816,7 @@ import { Box } from "./_shared"
589
816
 
590
817
  export default function AdaptiveGridExample() {
591
818
  return (
592
- <AdaptiveGrid minColumnWidth="sm" gap="md">
819
+ <AdaptiveGrid minColumnWidth="sm" gap="sm">
593
820
  {Array.from({ length: 6 }, (_, i) => (
594
821
  <Box key={i}>card {i + 1}</Box>
595
822
  ))}
@@ -607,12 +834,12 @@ import { Box } from "./_shared"
607
834
 
608
835
  export default function SplitExample() {
609
836
  return (
610
- <Stack gap="lg" style={{ width: "100%" }}>
611
- <Split sideWidth="14rem" gap="md">
837
+ <Stack style={{ width: "100%" }}>
838
+ <Split sideWidth="14rem" gap="sm">
612
839
  <Box>main content, takes the rest</Box>
613
840
  <Box>side, 14rem</Box>
614
841
  </Split>
615
- <Split side="start" sideWidth="14rem" gap="md">
842
+ <Split side="start" sideWidth="14rem" gap="sm">
616
843
  <Box>main content — still first in the DOM</Box>
617
844
  <Box>side, drawn on the left</Box>
618
845
  </Split>
@@ -629,10 +856,10 @@ import { Text } from "themelia-ui/base/typography"
629
856
 
630
857
  export default function BleedExample() {
631
858
  return (
632
- <div style={{ width: "100%", padding: "var(--space-md)", border: "1px solid var(--border)", borderRadius: "var(--radius-sm)" }}>
633
- <Text size="xs" type="secondary">A surface padded by --space-md.</Text>
634
- <Bleed amount="md">
635
- <div style={{ background: "var(--muted)", padding: "var(--space-sm) var(--space-md)", marginBlock: "var(--space-sm)" }}>
859
+ <div style={{ width: "100%", padding: "var(--padding-sm)", border: "var(--border-width) solid var(--border)", borderRadius: "var(--radius-sm)" }}>
860
+ <Text size="xs" type="secondary">A surface padded by --padding-sm.</Text>
861
+ <Bleed amount="sm">
862
+ <div style={{ background: "var(--muted)", padding: "calc(var(--padding-sm) / 2) var(--padding-sm)", marginBlock: "calc(var(--gap-sm) / 2)" }}>
636
863
  <Text size="xs">This band bleeds to both edges.</Text>
637
864
  </div>
638
865
  </Bleed>
@@ -647,7 +874,7 @@ export default function BleedExample() {
647
874
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
648
875
  import { Stack } from "themelia-ui/base/structure"
649
876
  import { Text } from "themelia-ui/base/typography"
650
- import { Scope } from "themelia-ui/ui-provider"
877
+ import { UIScope } from "themelia-ui/ui-provider"
651
878
 
652
879
  import { InvoiceTable } from "./_shared"
653
880
 
@@ -657,18 +884,41 @@ export default function TableScale() {
657
884
  * Both, captioned. On its own the scoped table just looked like a table —
658
885
  * the section asserted a difference the page gave the reader no way to see.
659
886
  */
660
- <Stack gap="lg" style={{ width: "100%" }}>
661
- <Stack gap="xs" style={{ width: "100%" }}>
662
- <Text size="xs" type="secondary">--density-scale: 1</Text>
887
+ <Stack style={{ width: "100%" }}>
888
+ <Stack gap="sm" style={{ width: "100%" }}>
889
+ <Text size="xs" type="secondary">density: default</Text>
663
890
  <InvoiceTable />
664
891
  </Stack>
665
- <Stack gap="xs" style={{ width: "100%" }}>
666
- <Text size="xs" type="secondary">--density-scale: 0.85</Text>
667
- <Scope vars={{ "--density-scale": 0.85 }} style={{ width: "100%" }}>
892
+ <Stack gap="sm" style={{ width: "100%" }}>
893
+ <Text size="xs" type="secondary">density: compact</Text>
894
+ <UIScope config={{ density: "compact" }} style={{ width: "100%" }}>
668
895
  <InvoiceTable />
669
- </Scope>
896
+ </UIScope>
670
897
  </Stack>
671
898
  </Stack>
672
899
  )
673
900
  }
674
901
  ```
902
+
903
+ ### Colour islands
904
+
905
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
906
+ import { Button } from "themelia-ui/base/buttons"
907
+ import { Card } from "themelia-ui/base/cards"
908
+ import { Grid } from "themelia-ui/base/structure"
909
+ import { UIProvider } from "themelia-ui/ui-provider"
910
+
911
+ export default function ColourIsland() {
912
+ return (
913
+ <Grid columns={{ base: 1, sm: 2 }}>
914
+ {(["light", "dark"] as const).map((colorScheme) => (
915
+ <UIProvider key={colorScheme} config={{ colorScheme }}>
916
+ <Card title={`A ${colorScheme} region`} description="Every colour inside resolves to this half.">
917
+ <Button>Continue</Button>
918
+ </Card>
919
+ </UIProvider>
920
+ ))}
921
+ </Grid>
922
+ )
923
+ }
924
+ ```