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
@@ -20,6 +20,10 @@ ready-made surface does not express the job.
20
20
  compose both; neither may import a block. The complete generated graph is in
21
21
  [Profiles](../generated/profiles.md).
22
22
 
23
+ For structural blocks, spacing roles and responsive widths, use
24
+ [Structure and spacing](./structure-and-spacing.md). For ready analytics, onboarding,
25
+ timeline and admin presentations, use [Choosing blocks](./blocks.md).
26
+
23
27
  ## The composition ladder
24
28
 
25
29
  Use the lowest rung that solves the real requirement:
@@ -68,11 +72,8 @@ generic metadata, and an action without teaching the package what an invoice is:
68
72
 
69
73
  ```tsx compile
70
74
  import { Button } from "themelia-ui/base/buttons"
71
- import "themelia-ui/base/buttons.css"
72
75
  import { MetadataList } from "themelia-ui/base/display"
73
- import "themelia-ui/base/display.css"
74
76
  import { Page } from "themelia-ui/layout/page"
75
- import "themelia-ui/layout/page.css"
76
77
 
77
78
  type Invoice = { id: string; number: string; customerName: string; status: string; dueLabel: string }
78
79
  export function InvoiceDetail({ invoice, onCollectPayment }: {
@@ -111,10 +112,8 @@ callbacks, then open each linked module reference for the complete prop contract
111
112
  ### Dashboard
112
113
 
113
114
  ```tsx fragment — dashboard data and chart series come from the consuming application
114
- import { MetricGrid } from "themelia-ui/patterns/analytics"
115
- import "themelia-ui/patterns/analytics.css"
115
+ import { MetricGrid } from "themelia-ui/blocks/analytics"
116
116
  import { Page } from "themelia-ui/layout/page"
117
- import "themelia-ui/layout/page.css"
118
117
 
119
118
  <Page header={{ title: "Overview", description: periodLabel }}>
120
119
  <MetricGrid metrics={metrics} variant="card" />
@@ -128,7 +127,6 @@ window, permission-filtered figures, and what clicking a metric means.
128
127
 
129
128
  ```tsx fragment — columns, filters, records, paging, and mutations are consumer-owned
130
129
  import { DataView, DataViewPagination } from "themelia-ui/features/data-view"
131
- import "themelia-ui/features/data-view.css"
132
130
 
133
131
  <DataView
134
132
  data={records}
@@ -148,13 +146,18 @@ The invoice example above is the canonical shape: `Page` for route geometry,
148
146
  `MetadataList` and primitives for facts, then domain callbacks on package actions. Keep the
149
147
  record type out of the package.
150
148
 
149
+ When the task also fits the standard loading, empty, error and retry presentation, use
150
+ `ResourceShowShell` or `ResourceIndexShell` from `features/resource`. Those shells already
151
+ own a header, body and state replacement; do not duplicate that route header by wrapping
152
+ them in another Page. Page remains appropriate for a custom record arrangement where the
153
+ application already owns lifecycle feedback. Read the
154
+ [resource API](../generated/components/features--resource.md) for state and slot contracts.
155
+
151
156
  ### Form
152
157
 
153
158
  ```tsx fragment — validation, field values, submit mutation, and product copy remain in the app
154
159
  import { FormActionsBar, FormField, FormSection, SubmitStateButton } from "themelia-ui/base/forms"
155
- import "themelia-ui/base/forms.css"
156
160
  import { Input } from "themelia-ui/base/text-inputs"
157
- import "themelia-ui/base/text-inputs.css"
158
161
 
159
162
  <FormSection title="Billing" description="Where invoices go.">
160
163
  <FormField label="Company" error={errors.company}>
@@ -171,7 +174,6 @@ adapter when React Hook Form already owns the state.
171
174
 
172
175
  ```tsx fragment — route matching and the router link renderer belong to the application
173
176
  import { AsideNavShell } from "themelia-ui/layout/settings"
174
- import "themelia-ui/layout/settings.css"
175
177
 
176
178
  <AsideNavShell
177
179
  title="Settings"
@@ -200,7 +202,7 @@ documentation tree whose vocabulary is not settings.
200
202
 
201
203
  Look up a specific task with the offline finder. Exact symbols take priority; `--explain`
202
204
  shows matched components, selection reasons and direct API anchors. `--json` exposes the
203
- same records for tools. Guidance marked `family` is a fallback, not a component-specific
205
+ same records for tools. Guidance marked `module` is a fallback, not a component-specific
204
206
  recommendation. An empty result means refine the query or inspect the catalogue, not invent
205
207
  an export.
206
208
 
@@ -218,15 +220,10 @@ the entered value; pending state prevents a second submission.
218
220
  ```tsx compile
219
221
  import { useState } from "react"
220
222
  import { Card, CardHeader, CardContent } from "themelia-ui/base/cards"
221
- import "themelia-ui/base/cards.css"
222
223
  import { FormField } from "themelia-ui/base/forms"
223
- import "themelia-ui/base/forms.css"
224
224
  import { Input } from "themelia-ui/base/text-inputs"
225
- import "themelia-ui/base/text-inputs.css"
226
225
  import { Button } from "themelia-ui/base/buttons"
227
- import "themelia-ui/base/buttons.css"
228
226
  import { Stack } from "themelia-ui/base/structure"
229
- import "themelia-ui/base/structure.css"
230
227
 
231
228
  export function RenameRecord({ initialName, save }: {
232
229
  initialName: string
@@ -248,7 +245,7 @@ export function RenameRecord({ initialName, save }: {
248
245
  catch { setError("Could not save. Your changes are still here; try again.") }
249
246
  finally { setPending(false) }
250
247
  }}>
251
- <Stack gap="md">
248
+ <Stack gap="sm">
252
249
  <FormField label="Name" error={error}>
253
250
  <Input value={name} disabled={pending} onChange={(event) => setName(event.target.value)} />
254
251
  </FormField>
@@ -270,7 +267,6 @@ filtering contract to your query layer instead of filtering an already paged sub
270
267
  ```tsx compile
271
268
  import { useState } from "react"
272
269
  import { DataView, type DataViewProps } from "themelia-ui/features/data-view"
273
- import "themelia-ui/features/data-view.css"
274
270
  import { FilterType, FilterOperator, type ActiveFilter, type FilterConfig } from "themelia-ui/features/filters"
275
271
 
276
272
  type RecordRow = { id: string; name: string; status: string }
@@ -298,7 +294,6 @@ edge fade through the public prop instead of adding a local mask or a second scr
298
294
 
299
295
  ```tsx compile
300
296
  import { Tabs, TabList, Tab, TabPanel } from "themelia-ui/base/navigation"
301
- import "themelia-ui/base/navigation.css"
302
297
 
303
298
  export function SettingsTabs() {
304
299
  return <Tabs defaultValue="general">
@@ -330,6 +325,92 @@ Only use states the selected module exposes; the API reference is authoritative.
330
325
  complete examples above type-check against the built package, but their application
331
326
  callbacks are illustrative: verify persistence and browser behaviour in your app.
332
327
 
328
+ ## Decide the owners before JSX
329
+
330
+ | Owner | Insets and type | Name and command scope | Parent responsibility |
331
+ | --- | --- | --- | --- |
332
+ | `Page` | Route geometry; header owns heading type | One route heading; route commands | Data, routing and independent subjects |
333
+ | `Card` / parts | Surface and content inset; header owns title/description | A bounded subject; commands for that subject | Arrange sibling subjects, choose heading level |
334
+ | `ContentBlock` | Title/content gap; `plain` has no inset, decorated surfaces add one | Supporting content within a subject | Decide whether another independent surface is warranted |
335
+ | `MetadataList` / values | Fact layout; labels and semantic value formatting | Read-only facts, not editable labels | Permission-filtered records and value descriptors |
336
+ | Analytics blocks | Quantity hierarchy and responsive metric arrangement | Measures and their period; metric actions | Query, unknown quantities and interpretation |
337
+ | `FormSection` | Section inset and heading; `flat` retains its padding | Editable region title; section-specific actions | Form, values, validation and completion |
338
+ | `FieldGroup` | Related control arrangement and support line | Fieldset/legend for a group; children retain distinct labels | Group disabled state and validation policy |
339
+ | `FormField` / binding | Label and support typography, control association | One editable field | Value, mutation and explicit name/ARIA overrides |
340
+ | `Stack` / `Grid` | Shared gaps; no new typography owner | Passive arrangement | Choose whether child insets already supply separation |
341
+ | `DataView` | Filter/table shell and responsive filter presentation | Resource-browser commands | Transport, page totals and selection lifetime |
342
+ | `DataTable` | Tabular interaction and table geometry | Column/row names and row commands | Filters, surrounding surface and server transport |
343
+ | `FilterLayout` / slots | Responsive controls and sheet | Filter controls only | Shared filter state; put export/create in action slots |
344
+
345
+ `surface="flat"` changes decoration, not the inset contract. Several flat FormSections
346
+ inside CardContent accumulate the card content inset and each section's inset. Use the
347
+ ready Card body when that separation is useful; use parts when you need a different region
348
+ arrangement. `Stack gap="none"` is appropriate when adjacent sections already own their
349
+ vertical separation. Do not compensate by assigning private padding variables or local type.
350
+
351
+ These are fragments; the [complete workflows](./reference-workflows.md) include state,
352
+ helpers and submission behavior.
353
+
354
+ ```tsx fragment — fields and subject data come from the application
355
+ <Card title="Account details">
356
+ <Stack gap="none">
357
+ <FormSection surface="flat" title="Contact">{contactFields}</FormSection>
358
+ <FormSection surface="flat" title="Billing">{billingFields}</FormSection>
359
+ </Stack>
360
+ </Card>
361
+ ```
362
+
363
+ ```tsx fragment — parts expose the same owners; table rows and columns are application data
364
+ <Card>
365
+ <CardHeader title="Related records" titleLevel={2} />
366
+ <CardContent><DataTable data={rows} columns={columns} /></CardContent>
367
+ </Card>
368
+ ```
369
+
370
+ Use sibling Cards for independent subjects. Use ContentBlock inside a Card for supporting
371
+ prose. Repeating the route heading as each Card title adds no new subject. Repeating a
372
+ FormField label in a nested DisplayLabel creates competing names; supply the field label
373
+ once and let FormField associate it. A FieldGroup legend names the group, so its children's
374
+ labels should identify their distinct values. Labels on different records may repeat.
375
+
376
+ ```tsx fragment — each subject supplies its own application-owned facts
377
+ <Grid columns={{ base: 1, md: 2 }}>
378
+ <Card title="Contact"><MetadataList items={contactFacts} /></Card>
379
+ <Card title="Billing"><MetadataList items={billingFacts} /></Card>
380
+ </Grid>
381
+ ```
382
+
383
+ Grid owns separation between the sibling subjects and their responsive columns. Each Card
384
+ owns its header and body inset. For a resource browser, DataView already owns the filter/table
385
+ frame: put a Heading and supporting Text beside that frame instead of wrapping it in another
386
+ Card. The [resource workflow](./reference-workflows.md) demonstrates a constrained parent;
387
+ the detail workflow demonstrates a secondary table within an independent titled subject.
388
+
389
+ Keep a record's command beside that record, a page command in the page header, and a
390
+ selected-row command in the table's bulk-action seam. Filter toolbars communicate query
391
+ state; export and create belong in the action slots. Applications decide destructive policy,
392
+ field-per-row arrangements and permission boundaries.
393
+
394
+ For server filtering, use `filtering.filterRows: ({ data }) => [...data]` when the server
395
+ already matched the page. DataView's default filtering is local and can remove valid server
396
+ matches whose search fields are absent from the visible columns. Use an app-owned cursor
397
+ footer when totals are unknown; never invent a page count. Drop to DataTable when the app
398
+ already owns the browser shell, filters and command placement.
399
+
400
+ Selector variants serve different lifecycles: SuggestionsCombobox uses the generic lookup
401
+ hook; AsyncCombobox accepts application-owned results; ResourceCombobox owns the ready
402
+ single-resource fetching presentation. Use `scopeKey` on SuggestionsCombobox or ResourceCombobox when workspace or permission context changes without a
403
+ query change. It invalidates lookup results, not the controlled selection. The application
404
+ clears a value that is invalid in the new context.
405
+
406
+ ```bash
407
+ node node_modules/themelia-ui/scripts/consumer/find-component.mjs "editable section" --context=existing-surface --context=editable --explain
408
+ node node_modules/themelia-ui/scripts/consumer/find-component.mjs "resource selector" --context=changing-scope --json
409
+ ```
410
+
411
+ Context matches are positive evidence. Uncurated exports remain visible with unknown
412
+ context coverage; they do not become recommendations by omission.
413
+
333
414
  ## When to wrap, compose, or contribute
334
415
 
335
416
  - **Wrap** when the product needs a stable local name or defaults around one module.
@@ -69,9 +69,10 @@ consumer on plain state never resolves react-hook-form.
69
69
 
70
70
  ## Field chrome
71
71
 
72
- `FormField` renders exactly **one** supporting line, resolved as `error || helperText ||
73
- hint`. They replace each other rather than stacking, so a field never grows or shifts as
74
- validation state changes. It also owns the wiring: it associates the label, points
72
+ `FormField` renders at most **one** supporting message, resolved as `error || helperText ||
73
+ hint`. They replace each other rather than stacking. A message can wrap, and adding or
74
+ changing it can change field height; check long translated errors at narrow widths.
75
+ It also owns the wiring: it associates the label, points
75
76
  `aria-describedby` at the supporting line, and sets `aria-invalid` on the control when there
76
77
  is an error, without overriding any of these that the caller set explicitly. Errors are
77
78
  announced politely (`role="status"`), so validation firing on each keystroke does not
@@ -80,6 +81,25 @@ interrupt typing.
80
81
  `FieldGroup` covers several controls sharing one label and one supporting line — a date
81
82
  range, a name split in two.
82
83
 
84
+ ## Sections and completion
85
+
86
+ Use FormSection for an editable region inside a form, Card for an independent subject,
87
+ and ContentBlock for supporting read-only prose. Flat FormSections retain region padding;
88
+ an enclosing Stack can use `gap="none"` when that padding supplies the desired separation.
89
+ FieldGroup supplies fieldset/legend semantics. Each child FormField still needs a distinct
90
+ label. A section heading is not a field label.
91
+
92
+ A resolved promise is not evidence that validation succeeded. ActionDialog normally closes
93
+ after its confirmation callback resolves. Set `closeOnAsyncComplete={false}` when the app
94
+ resolves with errors, and close controlled `open` only after explicit success. For a native
95
+ form, use `formId` to associate the dialog's submit action with that form; avoid also invoking
96
+ the mutation in `onConfirm`. Native constraint validation, the submit handler and domain
97
+ validation then each have one owner. Prevent duplicate submissions while pending, retain
98
+ drafts after rejection and associate errors with the relevant field or root region.
99
+
100
+ See the complete [multi-section form and nested action](./reference-workflows.md) sources.
101
+ For the inset and gap contract, see [Structure and spacing](./structure-and-spacing.md#use-the-two-spacing-roles).
102
+
83
103
  ## Generated forms
84
104
 
85
105
  When the fields come from a schema at runtime, use `features/schema-form`. When they are
@@ -22,7 +22,9 @@ cells. Write it once:
22
22
  import type { LinkRenderer } from "themelia-ui/layout/sidebar"
23
23
 
24
24
  export const renderLink: LinkRenderer = ({ href, children, active, disabled, external, ...rest }) =>
25
- disabled || !href ? <span {...rest}>{children}</span> : <AppLink to={href} {...rest}>{children}</AppLink>
25
+ disabled || !href ? <span {...rest}>{children}</span>
26
+ : external ? <a href={href} {...rest}>{children}</a>
27
+ : <AppLink to={href} {...rest}>{children}</AppLink>
26
28
  ```
27
29
 
28
30
  Return one element and spread the rest of the props onto it: they carry the class, the
@@ -50,6 +52,20 @@ async lifecycle; the application decides cache invalidation, retries, and error
50
52
  </ResourceIndexShell>
51
53
  ```
52
54
 
55
+ ## Lookup and navigation lifetimes
56
+
57
+ Pass a stable `scopeKey` to ResourceCombobox, SuggestionsCombobox or useSuggestions when the lookup's workspace, locale or
58
+ permission context changes. Changing callback identity alone does not refetch. A scope
59
+ change aborts old work, hides old results/errors and refetches an eligible open query while
60
+ retaining query, controlled value and open state. Late responses from an old scope cannot
61
+ complete the current lookup. The app owns whether the selected id remains valid.
62
+
63
+ Sidebar workspace disclosure keeps the mobile sheet open. A selected workspace marked
64
+ `external: false` dismisses the sheet after selection; external destinations retain native
65
+ target/rel behavior. Forward renderer props, including the click handler, to the real link.
66
+ The app's router handles same-app addresses and preserves modifiers and new-tab gestures.
67
+ See the [workspace reference](./reference-workflows.md).
68
+
53
69
  ## Permissions
54
70
 
55
71
  Resolve authorization before constructing actions. Omit an action the user cannot perform;
@@ -58,29 +74,41 @@ through the module's tooltip or description seam.
58
74
 
59
75
  ## Translation
60
76
 
61
- Supply user-facing package copy through each component's `strings` prop. Keep product copy
77
+ Supply component-owned copy through the selected API's documented `strings` prop. Passive
78
+ components whose copy comes from children need no strings object. Keep product copy
62
79
  in application data or children. The default objects are exported so a locale can start
63
80
  from the complete shape rather than guessing keys; see [Internationalization](./i18n.md).
64
81
 
65
82
  ## Server rendering and client boundaries
66
83
 
67
- Import server-pure formatting modules freely. Interactive modules carry their own
68
- `"use client"` boundary in the published entrypoint. Do not wrap the whole package in one
69
- client module: exact subpaths keep server-pure imports server-pure and optional peers
70
- isolated.
84
+ Interactive and provider-dependent entrypoints carry `"use client"`, including
85
+ `themelia-ui/primitives` and `themelia-ui/ui-provider`; passive modules such as
86
+ `themelia-ui/base/structure` can remain server-pure. Inspect the exact published entrypoint
87
+ rather than inferring its boundary from its name. In a React Server Components framework, a server component
88
+ can render those client components with serializable props; callbacks, hooks and live
89
+ controlled state belong in an application client component. A provider can receive server
90
+ rendered children, so keep the boundary around the interactive region rather than the whole
91
+ page. Check your framework's serialization rules for config containing functions or modules.
92
+
93
+ Formatting helpers exported from `primitives` share its client boundary: do not call them
94
+ from an RSC server component as if they came from a server-pure subpath. Format server data
95
+ with the application's server utilities or render the corresponding display primitive.
96
+ `themelia-ui/theming` exports pure derivation helpers without a client directive. Exact
97
+ subpaths also keep optional peers isolated. Ordinary Node SSR can load and render the
98
+ component modules; that does not make their exports server-callable in RSC.
71
99
 
72
100
  For CSP, portals, nested theme regions, and defaults, use
73
101
  [Provider and scoping](./provider-and-scoping.md). Do not recreate provider context in an
74
102
  application adapter unless the documented public hooks are insufficient.
75
103
 
76
- ## Vite, Next.js, and CSS entrypoints
104
+ ## Vite, Next.js, and CSS
77
105
 
78
- The JavaScript imports no CSS: import the exact module stylesheet beside the component. In a
79
- framework that restricts where global CSS may be imported, collect the same module
80
- stylesheets in its permitted application or route-layout entry. Do not replace them with
81
- source paths. `style.css` loads every module; prefer module stylesheets when a route uses a
82
- few. Server rendering and test runners are covered in
83
- [Loading the CSS](./installation.md#loading-the-css).
106
+ A component brings its own CSS, so there is no stylesheet to collect: it arrives through the
107
+ component's JavaScript, which your bundler processes. Frameworks that render on the server
108
+ with Vite, such as Astro, React Router, TanStack Start and Vike, list the package in
109
+ `ssr.noExternal`; see [Server rendering with Vite](./installation.md#server-rendering-with-vite).
110
+ Parcel needs its `packageExports` option. Next.js needs nothing. Pages with no bundler link
111
+ `style.css`.
84
112
 
85
113
  Server-rendered HTML and the client bundle must load the same theme tokens before hydration.
86
114
  Apply the theme attribute and provider configuration from the same persisted value to avoid
@@ -5,8 +5,10 @@ overridable, and nothing in it inspects `navigator.language` or imports a transl
5
5
 
6
6
  ## Strings
7
7
 
8
- Each module exports a `*Strings` interface and a `default*Strings` object, and its
9
- components take a `strings` prop:
8
+ Components that own visible or accessible copy document a `strings` prop; their modules
9
+ export the matching `*Strings` interface and `default*Strings` object. Passive structures
10
+ and components whose copy comes entirely from children need no strings object. Read the
11
+ selected API rather than adding `strings` by analogy:
10
12
 
11
13
  ```tsx fragment — shape only, not a program
12
14
  <Copyable strings={{ copy: "Kopieren", copied: "Kopiert" }} value={apiKey} />
@@ -4,16 +4,19 @@
4
4
  npm install themelia-ui
5
5
  ```
6
6
 
7
- React 19 and `react-dom` are required peers. Everything else is optional and only pulled in
8
- by the module that needs it; see [Optional peers](#optional-peers).
7
+ React 19 and `react-dom` are required peers. The package's regular dependencies install
8
+ automatically; additional peer packages are optional and resolved only by the modules
9
+ that need them. See [Optional peers](#optional-peers).
9
10
 
10
11
  ## Browser support
11
12
 
12
- Chrome and Edge 125, Firefox 121 and Safari 16.4 or newer. The stylesheets rely on
13
- `round()`, `:has()`, `:dir()` and `color-mix()` with no fallback below those versions.
14
- Entrance transitions use `@starting-style` and simply don't animate where it is missing.
15
- If your bundler lowers CSS for older targets, keep `:dir()` out of it: lowered, it becomes a
16
- list of right-to-left languages and ignores `dir="rtl"`.
13
+ Chrome and Edge 125, Firefox 121 and Safari 17.5 or newer. The stylesheets rely on
14
+ `round()`, `:has()`, `:dir()`, `color-mix()` and `light-dark()` with no fallback below those
15
+ versions. Entrance transitions use `@starting-style` and simply don't animate where it is
16
+ missing. If your bundler lowers CSS for older targets, keep `:dir()` and `light-dark()` out of
17
+ it: lowered, `:dir()` becomes a list of right-to-left languages and ignores `dir="rtl"`, and
18
+ `light-dark()` resolves where a theme variable is declared, so a dark region inside a light
19
+ page keeps the light colours.
17
20
 
18
21
  ## Import exactly what you use
19
22
 
@@ -36,41 +39,67 @@ The exact import for every module is in
36
39
 
37
40
  ## Loading the CSS
38
41
 
39
- The package ships three kinds of stylesheet:
42
+ ### In a bundled app
40
43
 
41
- | Import | Contains |
42
- | --- | --- |
43
- | `themelia-ui/<module>.css` | `core.css`, then the rules of the module and of the modules it draws with |
44
- | `themelia-ui/style.css` | `core.css` and every module, in one file |
45
- | `themelia-ui/core.css` | Tokens, themes, typefaces, the base reset and the cascade layer order; no component rules |
44
+ A component brings its own CSS. Import it from its subpath and nothing else: Vite, webpack,
45
+ Rspack and the frameworks built on them, such as Next.js and React Router, add its stylesheet
46
+ with its JavaScript, include each stylesheet once however many components need it, and leave
47
+ out the CSS of any module the application never imports. Your bundler processes the kit's CSS
48
+ like your own, so the note on lowering under [Browser support](#browser-support) applies to it.
49
+
50
+ Do not also import `themelia-ui/style.css` or a module stylesheet from JavaScript; that loads
51
+ the same rules twice. The upgrade codemod removes those imports.
46
52
 
47
- [`imports.md`](../generated/imports.md) gives each module's stylesheet path. A module whose
48
- components draw nothing has no stylesheet.
53
+ Parcel reads a package's `exports` only when the application's `package.json` sets
54
+ `"@parcel/resolver-default": { "packageExports": true }`.
49
55
 
50
- ### Import the stylesheets
56
+ ### Server rendering with Vite
57
+
58
+ Astro, React Router, TanStack Start, Vike and other frameworks that render on the server with
59
+ Vite hand installed packages to Node, which loads the kit without its CSS. List `themelia-ui`,
60
+ and any installed package that imports it, in `ssr.noExternal`, so Vite processes it:
61
+
62
+ ```ts fragment — the consuming application's bundler config, not compiled against the package
63
+ // vite.config.ts, or the `vite` key of astro.config.mjs
64
+ export default {
65
+ ssr: { noExternal: ["themelia-ui"] },
66
+ }
67
+ ```
51
68
 
52
- The JavaScript imports no CSS. Import each module's stylesheet beside its JavaScript, as the
53
- examples in these docs do, or `style.css` once. Vite, webpack, Rspack, Next.js and other
54
- bundlers that handle CSS imports include each file once, however many modules import it. A
55
- component whose stylesheet is not imported renders unstyled.
69
+ Astro gathers a page's CSS on the server, so without this line it renders the kit unstyled.
70
+ React Router takes CSS from the client build; the line fixes its development server's first
71
+ render. Next.js needs nothing.
72
+
73
+ ### Without a bundler
74
+
75
+ A page that links stylesheets directly links `style.css`, which includes `core.css`:
76
+
77
+ | Stylesheet | Contains |
78
+ | --- | --- |
79
+ | `themelia-ui/core.css` | Tokens, themes, typefaces, the base reset and the cascade layer order; no component rules |
80
+ | `themelia-ui/style.css` | `core.css` and every module, in one file |
56
81
 
57
82
  ### In Node
58
83
 
59
- The package is ES modules, and its JavaScript imports no CSS, so Node loads it as it is:
60
- server rendering and test runners need no configuration for it, and CommonJS code on Node
61
- 20.19 or later can `require()` it. Jest is the exception, because it transforms nothing in
62
- `node_modules` by default: exempt the package in `transformIgnorePatterns`.
84
+ The package is ES modules. Its JavaScript imports its CSS through the package's private
85
+ `imports` map, which resolves to an empty module outside a bundler, so Node loads it as it
86
+ is, without the CSS. Test runners need no configuration for it, and CommonJS code on Node
87
+ 20.19 or later can `require()` it; a server render needs configuration only where the
88
+ framework gathers CSS on the server, as in
89
+ [Server rendering with Vite](#server-rendering-with-vite). Jest is the exception: it needs
90
+ 29.4 or newer, which resolves the `imports` map, and it transforms nothing in `node_modules`
91
+ by default, so exempt the package in `transformIgnorePatterns`.
63
92
 
64
93
  ### `core.css` on its own
65
94
 
66
- Every module stylesheet begins by importing `core.css`, so a component never needs a
67
- separate core import to render correctly. Import `core.css` on its own when application CSS
68
- uses the tokens on a page without kit components, or to place the kit's layers next to
69
- another layered stylesheet, as in the [Tailwind setup](./theming.md#tailwind-css-v4).
95
+ Import `core.css` on its own when application CSS uses the tokens on a page without kit
96
+ components, or to place the kit's layers next to another layered stylesheet: import it from
97
+ JavaScript before that stylesheet. It is the file the components import, so a bundler keeps
98
+ one copy; an `@import` from a CSS file inlines a second one.
70
99
 
71
100
  ### Overriding the kit
72
101
 
73
- Component rules live in the cascade layers `tokens, theming, base, components, utilities`,
102
+ Component rules live in the cascade layers `tokens, base, components, utilities`,
74
103
  so unlayered application CSS wins over them whatever its order or specificity. Select with
75
104
  the stable `data-slot` attributes and BEM hooks such as `{name}--component`, and select a
76
105
  state with the attributes the primitives set (`data-open`, `data-checked`, `data-disabled`,
@@ -79,8 +108,8 @@ releases.
79
108
 
80
109
  ## Optional peers
81
110
 
82
- Every peer other than React is optional, and each is reachable only from the modules that
83
- use it: a consumer who never imports `features/map` never resolves Leaflet.
111
+ Every peer other than `react` and `react-dom` is optional, and each is reachable only from
112
+ the modules that use it: a consumer who never imports `features/map` never resolves Leaflet.
84
113
 
85
114
  The peer-to-module table is in [`docs/generated/imports.md`](../generated/imports.md).
86
115