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
@@ -3,6 +3,154 @@
3
3
  What changes between versions, what to do when you upgrade, and which changes a stable major
4
4
  allows.
5
5
 
6
+ ## Upgrading to 3.2
7
+
8
+ 3.2 adds consumer diagnostics, complete reference workflows and optional `scopeKey` support
9
+ for asynchronous combobox lookups, alongside responsive grid, dialog and navigation fixes.
10
+ Applications already on 3.1 need no new codemod replacements. Applications upgrading from
11
+ 3.0 or earlier must also follow [Upgrading to 3.1](#upgrading-to-31).
12
+
13
+ After updating the package, refresh the installed consumer skill with the
14
+ [packaged installer](./verification.md#offline-diagnosis-and-skill-freshness). Review any
15
+ local edits before replacing them, then run the read-only diagnostics and your application's
16
+ type, build and interaction checks. The [structural guide](./structure-and-spacing.md),
17
+ [blocks guide](./blocks.md) and [complete workflows](./reference-workflows.md) describe the
18
+ public composition contracts.
19
+
20
+ For lookups whose results depend on a workspace, tenant or similar context, pass a stable
21
+ `scopeKey` that changes with that context. The lookup aborts and invalidates old responses;
22
+ the application still owns clearing a selection or query that is no longer valid. See the
23
+ [scoped resource selection workflow](./reference-workflows.md).
24
+
25
+ ## Upgrading to 3.1
26
+
27
+ 3.1 renames and removes public API as well as adding to it. Upgrade deliberately, not
28
+ through a caret range: pin `themelia-ui` to `~3.0.0` until you have run the codemod and fixed
29
+ what TypeScript reports.
30
+
31
+ **Blocks are published under `blocks/`.** The tier the documentation, the component index
32
+ and the finder call Blocks now has subpaths that say so:
33
+
34
+ | was | is |
35
+ | --- | --- |
36
+ | `themelia-ui/patterns/analytics` | `themelia-ui/blocks/analytics` |
37
+ | `themelia-ui/patterns/onboarding` | `themelia-ui/blocks/onboarding` |
38
+ | `themelia-ui/patterns/timelines` | `themelia-ui/blocks/timelines` |
39
+ | `themelia-ui/admin/patterns/access` | `themelia-ui/blocks/admin/access` |
40
+ | `themelia-ui/admin/patterns/commerce` | `themelia-ui/blocks/admin/commerce` |
41
+
42
+ Module stylesheet subpaths are removed. Importing a component in a bundled app brings its CSS.
43
+
44
+ **Components bring their own CSS.** In a bundled app, importing a component now brings its
45
+ stylesheet, once, and a module you never import brings none. To upgrade:
46
+
47
+ 1. Run the codemod over each directory that holds application code: `src/`, and `app/` or
48
+ `.storybook/` where you have them.
49
+ It removes JavaScript imports of `themelia-ui/style.css` and of module stylesheets, which would
50
+ now load the CSS twice.
51
+ 2. The codemod removes obsolete module CSS `@import`s. Review any remaining stylesheet
52
+ references it reports. With Tailwind, keep `@import "tailwindcss"` and the bridge, and drop
53
+ `@import "themelia-ui/style.css"` or `@import "themelia-ui/core.css"` from the Tailwind entry.
54
+ 3. If the application renders on the server with Vite (Astro, React Router, TanStack Start, Vike),
55
+ list `themelia-ui`, and any installed package that imports it, in `ssr.noExternal`; Astro
56
+ renders the kit unstyled without it. See
57
+ [Server rendering with Vite](./installation.md#server-rendering-with-vite).
58
+ 4. If your bundler config sets its own resolve conditions, keep `module` in them.
59
+ 5. Pages that link stylesheets without a bundler link `style.css`.
60
+
61
+ **Fill style is `appearance`.** `tone` is colour, `appearance` is fill and `variant` is
62
+ structure, on every component. TypeScript reports each rename:
63
+
64
+ | was | is |
65
+ | --- | --- |
66
+ | `buttonStyle` on a Button, a Button-like component or an action definition | `appearance` |
67
+ | `ButtonStyle`, `ActionButtonStyle` | `ButtonAppearance`, `ActionAppearance` |
68
+ | `defaults: { button: { buttonStyle } }` | `defaults: { button: { appearance } }` |
69
+ | `variant` on `Badge`, `Toggle` and `SidebarMenuButton` | `appearance` |
70
+ | `BadgeVariant` | `BadgeAppearance` |
71
+ | `badgeVariants({ tone, variant })` on your own element | `<Badge tone appearance render={<a … />}>` |
72
+ | `badgeVariant` on a metadata badge value | `badgeAppearance` |
73
+ | `confirmStyle` on an overlay or an action modality | `confirmAppearance` |
74
+
75
+ Button renders `data-appearance` instead of `data-style`, and Toggle `data-appearance`
76
+ instead of `data-variant`: update CSS that selects either.
77
+
78
+ **Two steps for every size.** A size, padding or gap prop offers `default` and `sm`. `md` is
79
+ `default`, which is also what leaving the prop out gives you; a step larger than the default
80
+ is gone. The gaps map like this:
81
+
82
+ | was | is |
83
+ | --- | --- |
84
+ | `gap="2xs"`, `"xs"`, `"sm"`, `"md"` | `gap="sm"` (8px) |
85
+ | `gap="lg"`, `"xl"`, `"2xl"` | `gap="default"` (16px), or no `gap` |
86
+ | no `gap` on a `Stack` or `Split` (8px) | 16px; write `gap="sm"` to keep 8px |
87
+
88
+ Widths take `default`, `sm`, `full`, `none` or a CSS length such as `"48rem"`, and a free
89
+ string no longer type-checks. `Slider` and `SliderField` lose `size`, `InputGroupButton`
90
+ takes `iconOnly` instead of its icon sizes, and an action modality's `size`, which nothing
91
+ read, is gone.
92
+
93
+ **`density` belongs to the provider.** `MetadataList density="compact"` becomes
94
+ `size="sm"`, `MediaLibrary density="compact"` becomes `size="sm"`, `ActivityFeed density`
95
+ becomes `variant`, and `AiTask density="expanded"` becomes `defaultExpanded`. CSS that
96
+ selects `[data-row-density]`, `[data-media-density]` or `[data-activity-density]` selects
97
+ `[data-size]` or `[data-variant]`.
98
+
99
+ `Text` drops `size="xxs"` and `weight="regular"`: write `xs` and `normal`.
100
+
101
+ **The theme is one level.** It is about eighty variables, declared once at `:root`, each
102
+ colour a `light-dark(light, dark)` pair. For a theme of your own:
103
+
104
+ - Declare it on `:root` alone. The selector list 3.0 asked for (`:root, [data-ui-scope],
105
+ [data-density], [data-theme], .light, .dark`) is not needed: component styles inherit the
106
+ root defaults. Explicit regional overrides and density presets replace their corresponding
107
+ inherited values; set a preset-specific spacing override on that preset.
108
+ - Write a dark value into the colour's pair, `--primary: light-dark(#2563eb, #60a5fa)`, rather
109
+ than a `.dark { … }` block, which colours a dark page but misses a dark region inside a light
110
+ one.
111
+ - The palette, the alpha steps, the spacing ladder, the control, icon and avatar ladders, the
112
+ derived role variables and the scale factors are gone. The codemod renames a variable that
113
+ has a successor and reports the rest:
114
+
115
+ | was | is |
116
+ | --- | --- |
117
+ | `--space-2xs` to `--space-md` | `--gap-sm` between things, `--padding-sm` for an inset |
118
+ | `--space-lg` to `--space-2xl` | `--gap` between things, `--padding` for an inset |
119
+ | `--surface-px`, `--surface-py`; `--row-px`, `--row-py` | `--padding`; `--padding-sm` |
120
+ | `--control-h`, `--control-h-sm` | `--control-height`, `--control-height-sm` |
121
+ | `--size-icon`, `--size-icon-sm` | `--icon-size`, `--icon-size-sm` |
122
+ | `--primary-10` and every other alpha step | `color-mix(in oklab, var(--primary) var(--tint), transparent)`; a line takes `--tint-strong` |
123
+ | `--accent-50`, `--border-60`, `--muted-50` | `--accent`, `--border`, `--muted` |
124
+ | `--control-border`, `--focus-ring-color`, `--link-color` | `--input`, `--ring`, `--link` |
125
+ | `--shadow-xs`, `--shadow-sm`; `--shadow-md` to `--shadow-2xl`, `--popover-shadow` | `--shadow`; `--shadow-lg` |
126
+ | `--duration-normal`, `--duration-instant`, `--ease-out` | `--duration`, `--duration-fast`, `--ease` |
127
+ | `--leading-*`, `--weight-*`, `--tracking-*` | Text's `lineHeight`, `weight` and `caps` |
128
+ | `--scale`, `--density-scale` | the provider's `scale` and `density` |
129
+ | `--inverse-*` | a nested provider with `colorScheme: "dark"` |
130
+ | `--animate-spin` and the other `--animate-*` | `--keyframes-spin` and the others, which hold the name alone: `animation: var(--keyframes-spin) 1s linear infinite` |
131
+
132
+ `--text-scale` stays, and Text multiplies each step by it. A component variable you set from
133
+ outside, such as `--content-block-p`, `--overlay-region-p`, `--field-label-width` or
134
+ `--chart-aspect`, is the component's own now: set the theme variable it reads, or style the
135
+ component through `className`. With Tailwind, `p-padding` and `gap-gap-sm` replace `p-md` and
136
+ the other spacing keys, and `rounded` is the container radius.
137
+
138
+ **A browser floor for `light-dark()`.** Safari 17.5 or newer; Chrome and Edge 125 and Firefox
139
+ 121 are unchanged.
140
+
141
+ Run the codemod from your project over each directory that holds application code, dry
142
+ first; the commands below show `src/`. It rewrites the moved subpaths, removes the
143
+ stylesheet imports components now bring, renames each theme variable that has a successor,
144
+ and reports the rest:
145
+
146
+ ```sh
147
+ node node_modules/themelia-ui/scripts/consumer/codemod.mjs --dry-run src/
148
+ node node_modules/themelia-ui/scripts/consumer/codemod.mjs src/
149
+ ```
150
+
151
+ Every change with its replacement is listed in the
152
+ [migration reference](../generated/migration.md).
153
+
6
154
  ## Upgrading to 3.0
7
155
 
8
156
  3.0 changes how the package loads, and gives a few props one shape.
@@ -16,6 +164,9 @@ the package as it is. Server rendering and test runners need no configuration fo
16
164
  CommonJS code on Node 20.19 or later can `require()` it. Jest still needs the package
17
165
  exempted in `transformIgnorePatterns`.
18
166
 
167
+ From 3.1, components bring their own CSS again, and server rendering with Vite lists the
168
+ package in `ssr.noExternal`; see [Upgrading to 3.1](#upgrading-to-31).
169
+
19
170
  TypeScript flags the rest:
20
171
 
21
172
  - `Scope` takes `render` instead of `as`: `<Scope vars={vars} render={<section />}>`.
@@ -201,14 +352,14 @@ Every change is one of:
201
352
  - **additive**: a new export, a new optional prop
202
353
  - **documentation-only**: no runtime or type change
203
354
  - **behaviour-preserving internal**: a refactor whose observable behaviour is identical
204
- - **deprecation**: the old name still works, and says what replaces it
355
+ - **deprecation**: an old name still works while a replacement is available
205
356
  - **breaking**: anything else
206
357
 
207
- ## Within a stable major
358
+ ## Upgrade policy
208
359
 
209
- An alias introduced during a stable major is deprecated in that major, documented with its
210
- replacement, and removed only in the next one. It stays for one full stable major unless
211
- security or correctness makes keeping it unsafe.
360
+ 3.1 removes obsolete aliases and adapters without retaining them for another release. Pin the
361
+ installed version until the application is ready to apply the migration guide, type-check and
362
+ build. Breaking changes are recorded before the API snapshot is updated.
212
363
 
213
364
  ## Import paths
214
365
 
@@ -1,5 +1,11 @@
1
1
  # Provider and scoping
2
2
 
3
+ Choose one document density owner, then use UIScope for a deliberately different region.
4
+ Changing density changes spacing; keep primary copy in Text and headings in Heading or their
5
+ component owners. Check the last field/next heading together: CardContent, FormSection and
6
+ Stack can each contribute separation. A portal must stay inside its intended token scope;
7
+ UIPortalHost provides that boundary. Test open popups as well as the page beneath them.
8
+
3
9
  Three components, and the difference between them is what they are allowed to touch.
4
10
 
5
11
  | | Renders | Reaches | Use for |
@@ -65,43 +71,40 @@ below a slice as well as at it:
65
71
  </UIProvider>
66
72
  ```
67
73
 
68
- This applies to every record-shaped field: `theme.colors`, `theme.palette`, `theme.vars`,
69
- `typography.fonts`, `typography.sizes` and `motion.durations`. Below them a record is a flat
70
- map of token to value, and a value is replaced, not merged.
74
+ This applies to every record-shaped field: `theme.colors`, `theme.vars`, `typography.fonts`,
75
+ `typography.sizes` and `motion.durations`. Below them a record is a flat map of variable to
76
+ value, and a value is replaced, not merged.
71
77
 
72
78
  That is the configuration components read, and the CSS follows it: each scope writes the
73
79
  merged overrides on its element, so inside the nested scope above `--primary` is red and
74
- `--secondary` is green. Raw inputs (palette steps, radii, fonts, durations and the scale
75
- factors) inherit through every boundary. Semantic colours and type sizes do not: a `Scope`,
76
- or any other element on the boundary list, declares them again from the palette. To keep a
77
- colour across one of those, set it through `theme.palette` or declare it at the boundary
78
- list; see [Theming](./theming.md#setting-a-theme).
80
+ `--secondary` is green. Component styles inherit global tokens rather than redeclaring
81
+ theme defaults. Explicit Scope/UIScope overrides replace inherited values; a density preset
82
+ also resets its spacing and control heights on that region. A value outside that boundary
83
+ does not override its local declaration; see
84
+ [Theming](./theming.md#setting-a-theme).
79
85
 
80
86
  ## Scope — tokens only
81
87
 
82
- Overriding a factor requires a **scope boundary**, not just any element:
88
+ `Scope` sets theme variables on a region, without the config machinery:
83
89
 
84
90
  ```tsx fragment — shape only, not a program
85
- <Scope vars={{ "--density-scale": 0.8 }}>
91
+ <Scope vars={{ "--control-height": "2.5rem" }}>
86
92
  <Toolbar />
87
93
  </Scope>
88
94
  ```
89
95
 
90
- `Scope` renders a `div` without layout. `render` picks another element, as on every
91
- component (`render={<section />}`), and `transparent={false}` gives it a box.
92
-
93
- Derived tokens are declared at `:root, [data-ui-scope], [data-density], [data-theme], .light,
94
- .dark` (see [`src/styles/SCOPES.md`](../../src/styles/SCOPES.md)). A plain
95
- `<div style={{ "--density-scale": 0.8 }}>` sets the variable and nothing reads it: the
96
- measurements above it already resolved against the old value. `Scope` renders
97
- `data-ui-scope`, which puts the element on that list and makes every derived token
98
- re-compute.
96
+ `Scope` renders a `div` without layout. Its `render` prop picks another element
97
+ (`render={<section />}`), and `transparent={false}` gives it a box. Every
98
+ component inside reads the variables it sets, because components compute from the theme where
99
+ they use it; any element with a `style` does the same, and `Scope` only adds the missing
100
+ layout rule and the `data-ui-scope` marker.
99
101
 
100
102
  ## Portals and scopes
101
103
 
102
- A scope works through CSS custom properties and the `[data-density]` / `[data-theme]`
103
- attribute selectors, and both inherit down the DOM subtree. A portal renders elsewhere in the
104
- document, so by default neither follows it:
104
+ A scope uses CSS custom properties; its `data-density` and `data-theme` attributes establish
105
+ spacing and colour-scheme values that inherit through the DOM subtree. The attributes
106
+ themselves are not copied to descendants. A portal renders elsewhere in the document, so
107
+ those inherited values do not follow it by default:
105
108
 
106
109
  ```tsx fragment — a template with a hole in it
107
110
  <UIScope config={{ density: "compact" }}>
@@ -142,7 +145,7 @@ in — a shadow root, or a positioned overlay element it manages itself.
142
145
 
143
146
  ## Strict Content Security Policy
144
147
 
145
- Some Base UI-backed controls emit a tiny inline style or pre-hydration script for behavior
148
+ Some Base UI-backed controls emit a tiny inline style element or pre-hydration script for behavior
146
149
  the component stylesheet cannot express. Put `CSPProvider` at the same application boundary
147
150
  as `UIRoot` and pass the request nonce through:
148
151
 
@@ -160,7 +163,7 @@ React 19 hoists styles that carry `precedence`. During streaming SSR, configure
160
163
  renderer with the same style nonce as the provider; otherwise React omits the attribute and
161
164
  warns about the mismatch.
162
165
 
163
- When the policy permits no inline elements at all, suppress Base UI's style elements and
166
+ When the policy forbids inline style elements, suppress Base UI's style elements and
164
167
  ship the scrollbar rule in the consuming application's stylesheet:
165
168
 
166
169
  ```tsx fragment — App comes from the consuming application
@@ -175,7 +178,16 @@ ship the scrollbar rule in the consuming application's stylesheet:
175
178
  ```
176
179
 
177
180
  `disableStyleElements` does not disable kit behavior; it moves those small rules into the
178
- consuming app. It does not replace the normal `core.css`, module stylesheet, or `style.css` import.
181
+ consuming app. It does not change how the kit's CSS loads.
182
+
183
+ This option does not remove inline scripts or `style` attributes. A nonce authorizes the
184
+ matching style/script elements; it does not authorize style attributes in server-rendered
185
+ HTML. Providers, responsive structure and popup positioning can use style attributes, so
186
+ a policy that blocks them needs a separate SSR strategy for the adopted components.
187
+ Inspect the rendered HTML and browser CSP reports; `disableStyleElements` alone does not
188
+ establish compatibility with that policy. See the
189
+ [Base UI CSP reference](https://base-ui.com/react/utils/csp-provider#inline-style-attributes)
190
+ for the distinction and available integration strategies.
179
191
 
180
192
  ## Reading the config
181
193
 
@@ -0,0 +1,43 @@
1
+ # Complete reference workflows
2
+
3
+ These sources use public package imports and fixed local mock operations. Copy the complete
4
+ workflow directory, including relative helpers, then replace its transport and policy with
5
+ your application's. The [versioned inventory](../generated/workflows/index.json) lists every
6
+ file, import and API reference. Its package version must match the installed package.
7
+
8
+ | Workflow | Owners and application seam | Complete entry source |
9
+ | --- | --- | --- |
10
+ | Record detail | Page owns route heading; sibling Cards own subjects; MetadataList owns facts; app owns record commands | [Record detail](../generated/workflows/record-detail/page-layout/record-detail-reference.tsx) |
11
+ | Server resource index | DataView owns browser presentation; app owns server matching, unknown totals, cursor and page selection | [Resource index](../generated/workflows/resource-index/data-view/resource-index-reference.tsx) |
12
+ | Multi-section form | Card owns surface; flat FormSections retain insets; FieldGroup and FormField own names; app owns validation and completion | [Form](../generated/workflows/multi-section-form/form-workflow/multi-section-reference.tsx) |
13
+ | Scoped resource selection | ResourceCombobox owns lookup; app owns scopeKey and selection validity; Overlay owns task | [Selector](../generated/workflows/scoped-resource-selection/combobox/scoped-resource-reference.tsx) |
14
+ | Nested action flow | Parent owns draft; child owns confirmation; app closes explicitly after successful mutation | [Nested action](../generated/workflows/nested-action-flow/action-overlays/nested-action-reference.tsx) |
15
+ | Workspace navigation | Shell owns geometry; workspace owns disclosure; app owns router and same-app policy | [Workspace](../generated/workflows/workspace-navigation/app-shell/workspace-navigation-reference.tsx) |
16
+ | Media picking | MediaLibraryDialog owns query/picking UI; app commits a separate picker draft on confirmation, pages through footer slots, hydrates saved ids independently, reports unavailable selection and authorizes fetches | [Media](../generated/workflows/media-picking/media-library/media-picking-reference.tsx) |
17
+ | Communications overview | MetricGrid owns quantities; MetadataList owns prose facts; app owns period, delivery state and retry | [Communications](../generated/workflows/communications-overview/analytics/communications-reference.tsx) |
18
+ | Website editor | RichTextEditor owns editing; app retains locale drafts and alt text; RichText sanitizes preview | [Website editor](../generated/workflows/website-content-editor/rich-text-editor/website-content-reference.tsx) |
19
+
20
+ Forms using plain state need no form peer. The optional forms-rhf adapter connects existing
21
+ React Hook Form state without duplicating it. The resource-index workflow uses features/table and
22
+ needs its table peer; record-detail uses peer-free base/table; analytics and rich editing require the peers listed in their generated
23
+ API pages. The general reference consumer stays free of optional peers; the admin reference
24
+ consumer demonstrates adopted adapters.
25
+
26
+ Pending, empty, failed refresh, unavailable selection and resolved validation errors are
27
+ different states. These fixtures demonstrate local feedback and retained drafts. They do
28
+ not establish real persistence, permissions, cache invalidation or backend sanitization.
29
+ Exercise the named cases in your app; [record the evidence](./verification.md#completion-record)
30
+ and identify conditions you could not inspect.
31
+
32
+ The inventory's `verification` entries map required cases to behavioral tests or visual
33
+ inspection conditions. They specify coverage to run, not a claim that your application passed.
34
+ `repositoryFile` identifies a maintainer test in the source repository; copy workflow files
35
+ from the inventory's generated source list and adapt the named behaviors to your test runner.
36
+ The browser cases use explicit mock actions; the read-only observer supplies advisory geometry
37
+ findings. Review screenshots and semantics separately in both themes and densities at mobile,
38
+ desktop and wide widths, including long copy and RTL. Build/type checks prove the complete
39
+ sources and public imports; rich-text security tests exercise the sanitization boundary.
40
+
41
+ When embedding a contained app shell in an existing main landmark, use `contentRender={<div />}`
42
+ so the composition keeps one main. For a shell that owns the application's main, omit that
43
+ override. The reference uses the embedded form because it also appears inside a documentation page.
@@ -0,0 +1,147 @@
1
+ # Structure and spacing
2
+
3
+ Choose the semantic owner first, then arrange its siblings. A Page owns route geometry;
4
+ Card owns an independent subject; ContentBlock owns supporting content; FormSection owns
5
+ an editable region. Stack and Grid arrange those owners without adding a heading, landmark,
6
+ surface or inset. See [Composition](./composition.md#decide-the-owners-before-jsx) for names,
7
+ commands and field ownership, and [Blocks](./blocks.md) for ready subject arrangements.
8
+
9
+ ## Choose a structural block
10
+
11
+ | Need | Public owner | What it supplies |
12
+ | --- | --- | --- |
13
+ | Route title, description and commands | `Page` from `layout/page` | Container, page header and body rhythm. It does not create a main landmark or own scrolling. |
14
+ | Page scroll inside a bounded shell | `PageViewport` from `layout/containers` | Scroll region and an inline-size query container. Focusable by default for keyboard scrolling. |
15
+ | Centred width and inline gutter | `Container` from `layout/containers` | Width and gutter only. Page already includes it. |
16
+ | Semantic section with rhythm between groups | `Section` from `layout/containers` | A native section and twice the group gap; supply its heading or accessible name. |
17
+ | Primary work beside a secondary summary | `TwoColumnLayout` from `layout/containers` | Main/aside arrangement, optional full-width header/footer; stacks below `lg`. Aside stays second in the DOM. |
18
+ | One row or column of passive siblings | `Stack` from `base/structure` | Direction, gap, alignment, distribution and optional wrapping. No padding prop. |
19
+ | An explicit column count | `Grid` and `GridCell` from `base/structure` | One to four columns, responsive gaps and cell spans. |
20
+ | As many equal columns as fit | `AdaptiveGrid` from `base/structure` | Auto-fit tracks; `minColumnWidth` is `default` (16rem), `sm` (12rem) or a CSS length. |
21
+ | A fluid main region and a constrained rail | `Split` from `base/structure` | Two direct children: main first, side second. `sideWidth` defaults to 18rem; `collapseBelow` defaults to `md`. |
22
+ | Intentional edge-to-edge content in an inset | `Bleed` from `base/structure` | Negative margins on the selected axis. Match `amount` to the inset it cancels. |
23
+
24
+ Read the exact [structure API](../generated/components/base--structure.md),
25
+ [containers API](../generated/components/layout--containers.md) and
26
+ [page API](../generated/components/layout--page.md) before adding props. Container's
27
+ `maxWidth` (`sm`, `md`, `lg`, `xl`, `2xl`, `full`) and `gutter` (`none`, `sm`, `md`, `lg`)
28
+ are a different contract from Stack/Grid widths (`default`, `sm`, `full`, `none` or a CSS
29
+ length). Container gutters are zero, one, one-and-a-half or twice `--padding`; they do not
30
+ add spacing tokens. Stack/Grid `maxWidth` caps width without centring it or adding a gutter.
31
+
32
+ An app shell normally owns the single main landmark and page scroller. Do not add another
33
+ PageViewport around each section. For document scrolling without a bounded shell, Page can
34
+ live in the application's existing main. When embedding a shell inside another main, use
35
+ its documented `contentRender` seam; see [complete workflows](./reference-workflows.md).
36
+
37
+ ## Use the two spacing roles
38
+
39
+ | Role | Public tokens | Typical use |
40
+ | --- | --- | --- |
41
+ | Container inset | `--padding` | Card regions and decorated ContentBlocks |
42
+ | Item inset | `--padding-sm` | Rows, cells and compact items |
43
+ | Between groups | `--gap`, `gap="default"` | Fields, sibling Cards, sections |
44
+ | Within a group | `--gap-sm`, `gap="sm"` | Title/description, icon/label, toolbar controls |
45
+
46
+ The omitted structure gap is `default`. `gap="none"` removes separation; it is not a third
47
+ spacing step. Insets belong to the child surface and gaps to the parent arrangement. Avoid
48
+ giving both the same separation job. Density changes these lengths together; it does not
49
+ choose smaller text roles. [Theming](./theming.md#scale-and-density) explains density, scale
50
+ and typography scale, including overriding a preset's values.
51
+
52
+ CardContent supplies its inset and a group gap between direct children; it drops its top
53
+ padding after an undivided CardHeader. Card `surface="flat"` removes decoration and retains
54
+ region insets. FormSection is a Card composition, so a flat FormSection inside CardContent
55
+ still adds its own inset. Use `Stack gap="none"` between such sections when their insets
56
+ already supply the intended rhythm; do not assume flat means flush.
57
+
58
+ ContentBlock is different: its default `surface="plain"` supplies heading/content spacing
59
+ without an inset or frame. Its `bordered`, `muted` and `card` surfaces add an inset.
60
+ `flush` drops that decorated surface's inset for children that own their own padding.
61
+ Neither flat nor flush changes field associations or heading semantics.
62
+
63
+ ```tsx compile
64
+ import { Card } from "themelia-ui/base/cards"
65
+ import { ContentBlock, MetadataList } from "themelia-ui/base/display"
66
+ import { Grid, Stack } from "themelia-ui/base/structure"
67
+ import { Text } from "themelia-ui/base/typography"
68
+ import { Page } from "themelia-ui/layout/page"
69
+ import { TwoColumnLayout } from "themelia-ui/layout/containers"
70
+
71
+ export function AccountOverview() {
72
+ return <Page header={{ title: "Account" }} maxWidth="lg">
73
+ <TwoColumnLayout
74
+ main={<Stack>
75
+ <Grid columns={{ base: 1, md: 2 }}>
76
+ <Card title="Contact" titleLevel={2}>
77
+ <MetadataList items={[{ id: "email", label: "Email", value: "alex@example.com" }]} />
78
+ </Card>
79
+ <Card title="Billing" titleLevel={2}>
80
+ <MetadataList items={[{ id: "status", label: "Status", value: "Active" }]} />
81
+ </Card>
82
+ </Grid>
83
+ <Card title="Notes" titleLevel={2}>
84
+ <ContentBlock description="Context for the next account review.">
85
+ <Text>The customer prefers email updates.</Text>
86
+ </ContentBlock>
87
+ </Card>
88
+ </Stack>}
89
+ aside={<Card title="Summary" titleLevel={2}><Text>Review due next month.</Text></Card>}
90
+ />
91
+ </Page>
92
+ }
93
+ ```
94
+
95
+ The example has one route heading, three independent subjects in the main region and a
96
+ secondary summary. Page supplies the gutter; TwoColumnLayout supplies main/aside separation;
97
+ Stack/Grid separate subjects; each Card supplies its inset. The complete record and form
98
+ workflows add application-owned commands, validation and asynchronous states.
99
+
100
+ ## Know which width drives responsiveness
101
+
102
+ A responsive structure prop accepts a single value or an object such as
103
+ `gap={{ base: "sm", md: "default" }}`. Values carry forward until another named step replaces
104
+ them; omitted lower steps use the component's defaults. `sm` as a gap value means the small
105
+ gap; `sm` as an object key means a breakpoint.
106
+
107
+ | Step | Viewport minimum | Grid's nearest query-container minimum |
108
+ | --- | --- | --- |
109
+ | `base` | All widths | All widths |
110
+ | `sm` | 40rem | 24rem |
111
+ | `md` | 48rem | 32rem |
112
+ | `lg` | 64rem | 40rem |
113
+ | `xl` | 80rem | 52rem |
114
+ | `2xl` | 96rem | 64rem |
115
+
116
+ Grid uses viewport steps when no ancestor establishes inline-size containment. With a query
117
+ container, such as PageViewport or ContentBlock, Grid's columns, gaps, alignment and maximum
118
+ width use the nearest container and the smaller thresholds above. Grid does not create its
119
+ own query container. Stack, Split, Bleed, AdaptiveGrid's responsive gap/alignment and
120
+ GridCell spans use viewport steps. AdaptiveGrid's **column count** always follows available
121
+ width through auto-fit. TwoColumnLayout stacks below the viewport's `lg` step.
122
+
123
+ Grid defaults to one column and two from `md`; `columns={1}` stays one at every width.
124
+ Use `GridCell span="full"` for a full row at every width. Numeric spans must fit the current
125
+ column count; `span={{ base: 1, md: "full", xl: 2 }}` can switch between numeric and full
126
+ placement. Coordinate responsive spans with the Grid, especially inside a query
127
+ container where their thresholds differ. Prefer AdaptiveGrid when the available panel width
128
+ should decide the count without coordinating breakpoints. Visual side positioning in Split
129
+ or TwoColumnLayout does not change reading or keyboard order.
130
+
131
+ ## Bleed, custom CSS and verification
132
+
133
+ Bleed's default amount is `none` and its default axis is `inline`. An intentional image
134
+ escape can use `amount="default"` inside an inset of `--padding`, or `sm` inside
135
+ `--padding-sm`. The shipped spacing pairs have matching padding/gap values; a custom theme
136
+ that separates those values must account for the actual inset. Bleed does not create a
137
+ surface or crop media. Check edges and focus visibility in the surrounding surface.
138
+
139
+ Application-specific geometry can use `className` and CSS over public tokens; use the
140
+ documented props first. Do not target private `--_…` variables or CSS Module hashes. Keep
141
+ copy in Text/Heading and field labels in FormField rather than setting local type styles.
142
+ For product CSS, prefer logical properties so inline start/end follow RTL.
143
+
144
+ Check a narrow **parent** as well as a narrow viewport, long headings and translated labels,
145
+ both themes and densities, and keyboard access to the scroller. Verify that additional
146
+ surfaces or gaps serve an independent subject. [Consumer verification](./verification.md)
147
+ separates compiled examples, interaction evidence and visual inspection.