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
@@ -1,146 +1,192 @@
1
1
  # Theming
2
2
 
3
- A theme sets the **global contract** and stops there. Most rebrands begin with the palette,
4
- semantic colours, radii and shadows of the default theme; the contract also covers type,
5
- spacing, motion, focus and layering. [`src/styles/TOKENS.md`](../../src/styles/TOKENS.md)
6
- names the token for each role.
7
-
8
- Component tokens are not the theming surface: most are a `var()` off the contract, and the
9
- rest is geometry no theme would touch. Override one only where a module reference names it
10
- as an extension point.
3
+ The theme is about eighty variables, declared once at `:root` in `src/styles/theme/`. Each
4
+ colour holds both modes as `light-dark(light, dark)`, and every length, shadow, tint and
5
+ duration comes as a pair. Components derive everything else where they use it, so a value
6
+ you set on a region reaches its descendants unless another scope or preset overrides it.
7
+ [`src/styles/TOKENS.md`](../../src/styles/TOKENS.md)
8
+ names the variable for each role.
11
9
 
12
10
  ## Setting a theme
13
11
 
14
- Where an override has to be declared depends on the kind of token.
15
-
16
- A **raw input** (`--radius`, `--radius-sm`, a font stack, a palette step, a scale factor) is
17
- declared once at `:root` and inherits everywhere. The semantic colours resolve through the
18
- palette (`--primary` is `--brand-600` in light and `--brand-350` in dark), so a rebrand that
19
- sets palette steps reaches every scope:
12
+ Set the variables you change on `:root`. A colour takes a `light-dark()` pair, or one value
13
+ for both modes:
20
14
 
21
15
  ```css
22
16
  :root {
23
- --brand-600: oklch(0.55 0.19 250);
24
- --brand-350: oklch(0.72 0.14 250);
25
- --radius: 1rem;
26
- --radius-sm: 0.5rem;
17
+ --primary: light-dark(oklch(0.55 0.19 250), oklch(0.72 0.14 250));
18
+ --primary-foreground: light-dark(oklch(0.985 0 0), oklch(0.2 0.03 250));
19
+ --radius: 0.75rem;
20
+ --radius-sm: 0.375rem;
21
+ --font-sans: "Your interface font", sans-serif;
27
22
  }
28
23
  ```
29
24
 
30
- A **semantic** token (`--primary`, `--background`, `--border`) is declared again at every
31
- scope boundary: `:root`, `[data-ui-scope]`, `[data-density]`, `[data-theme]`, `.light` and
32
- `.dark`. Every provider renders a boundary, so a semantic set on `:root` alone stops at the
33
- first one. Declare it at the same list, which reaches every scope and the popups portalled to
34
- `<body>`:
25
+ That one block reaches every region, including popups portalled to `<body>` and a dark
26
+ region inside a light page. Component styles do not redeclare theme colour defaults;
27
+ an explicit regional theme override takes precedence within that region.
28
+
29
+ The same values work on any element, for a region of their own:
35
30
 
36
31
  ```css
37
- :root, [data-ui-scope], [data-density], [data-theme], .light, .dark {
38
- --primary: oklch(0.55 0.19 250);
32
+ .marketing {
33
+ --primary: oklch(0.6 0.2 30);
39
34
  }
40
35
  ```
41
36
 
42
- That rule applies in light and dark alike. For a separate dark value, follow it with a rule
43
- on the dark selectors shown in [`SCOPES.md`](../../src/styles/SCOPES.md).
37
+ A provider takes them as config and writes them on its own element:
38
+
39
+ ```tsx fragment — shape only, not a program
40
+ <UIProvider config={{ theme: { colors: { primary: "light-dark(#2563eb, #60a5fa)" } } }}>
41
+ ```
42
+
43
+ Colours passed this way reach the provider's subtree. A popup portalled to `<body>` leaves
44
+ that subtree; render it into the provider with `UIPortalHost` (see
45
+ [Provider and scoping](./provider-and-scoping.md#portals-and-scopes)), or set the value on
46
+ `:root` instead.
44
47
 
45
- A provider takes the same values as config and writes them on its own element:
48
+ ## Ready-made themes
49
+
50
+ Four themes ship with the kit, each a style rather than a colour: Soft (large corners,
51
+ diffuse shadows, comfortable spacing), Sharp (square corners, hairlines, no shadows), Dense
52
+ (compact spacing and small corners, for data) and Editorial (serif headings on warm paper, a
53
+ step larger type). Each is a `ThemePreset`: a `label`, a `description`, and the provider
54
+ `config` it sets. That config reaches past colour to radii, shadows and border weight, density,
55
+ typography, motion and component defaults, such as the card surface. Every theme's colours
56
+ hold WCAG AA contrast in both modes, as the kit's own do.
46
57
 
47
58
  ```tsx fragment — shape only, not a program
48
- <UIProvider config={{ theme: { colors: { primary: "oklch(0.55 0.19 250)" } } }}>
59
+ import { themes } from "themelia-ui/theming"
60
+
61
+ <UIProvider config={themes.sharp.config}>
62
+ ```
63
+
64
+ Switching themes is handing the provider another theme's config. Keep the choice in state,
65
+ and wrap the application in `UIPortalHost`, so menus and popovers, which portal to `<body>`,
66
+ take the theme too:
67
+
68
+ ```tsx fragment — shape only, not a program
69
+ const [name, setName] = useState<ThemeName>("soft")
70
+
71
+ <UIProvider config={themes[name].config}>
72
+ <UIPortalHost>
73
+ <App onThemeChange={setName} />
74
+ </UIPortalHost>
75
+ </UIProvider>
49
76
  ```
50
77
 
51
- Colours passed this way reach the provider's subtree down to the next boundary: a nested
52
- provider, `Scope` or `data-density` region declares the kit's colours again, and popups
53
- portalled outside the provider never see them. `theme.palette` reaches every boundary inside
54
- the provider, because each one derives its colours from the palette.
78
+ A nested provider themes one region the same way. Settings of your own go beside a theme's:
79
+ `config={{ ...themes.dense.config, formatting: { locale: "de-DE" } }}`.
55
80
 
56
- For a subtree, use a scope boundary rather than a bare element; see
57
- [Provider and scoping](./provider-and-scoping.md#scope--tokens-only). Derived tokens resolve
58
- **where they are declared**, so a variable set on an element that is not a boundary is set
59
- and never read.
81
+ A theme of your own is the same shape. Start from one of these and change what you need:
82
+
83
+ ```tsx fragment — shape only, not a program
84
+ const brand: ThemePreset = {
85
+ label: "Brand",
86
+ description: "Our product's look.",
87
+ config: {
88
+ ...themes.sharp.config,
89
+ density: "comfortable",
90
+ theme: {
91
+ ...themes.sharp.config.theme,
92
+ colors: {
93
+ ...themes.sharp.config.theme?.colors,
94
+ primary: "light-dark(oklch(0.5 0.19 15), oklch(0.76 0.13 15))",
95
+ "primary-foreground": "light-dark(oklch(0.985 0 0), oklch(0.2 0.05 15))",
96
+ },
97
+ },
98
+ },
99
+ }
100
+ ```
101
+
102
+ A square theme should set `defaults.card.surface` to `"card"`: the default `framed` surface is
103
+ a band that follows the corner, and with no corner to follow it reads as a box in a box. Write
104
+ a zero radius as `0px`: the kit subtracts lengths from the radii, and `calc()` cannot subtract
105
+ a length from a bare `0`. Write no shadow as `0 0 transparent`, not `none`: a popup lists
106
+ `--shadow-lg` after its hairline, and `none` cannot stand in a list, so the popup would lose
107
+ its edge.
108
+
109
+ To edit a theme's colours and variables visually, load them into the theme editor with
110
+ `themeFromConfig(themes.soft.config.theme)` from `themelia-ui/features/theme-tweaker`; the
111
+ editor exports the result as CSS or provider config.
60
112
 
61
113
  ## Start with the shared controls
62
114
 
63
- Most layout adjustments need only the surface insets, row insets, density factor, font
64
- family and the two radii. They follow a component's role rather than its name:
115
+ Most adjustments need only these, and they follow a component's role rather than its name:
65
116
 
66
117
  ```css
67
118
  :root {
68
- --surface-x: 1.25rem;
69
- --surface-y: 1rem;
70
- --row-x: 0.75rem;
71
- --row-y: 0.5rem;
72
- --font-sans: "Your interface font", sans-serif;
73
- --radius: 0.75rem; /* containers */
74
- --radius-sm: 0.375rem; /* what sits inside them — set both, nothing derives it */
119
+ --padding: 1.25rem; /* container insets: cards, dialogs, sheets, popovers */
120
+ --padding-sm: 0.625rem; /* item insets: rows, cells, chips, fields */
121
+ --gap: 1.25rem; /* between groups: fields, cards, sections */
122
+ --gap-sm: 0.625rem; /* inside a group: icon and label, title and description */
123
+ --control-height: 2.25rem;
124
+ --radius: 0.75rem; /* containers */
125
+ --radius-sm: 0.375rem; /* what sits inside them; nothing derives one from the other */
75
126
  }
76
127
  ```
77
128
 
78
- - Cards, framed ContentBlocks and overlay bodies share the surface X/Y insets.
79
- - Overlay headers and footers use the same horizontal inset and 75% of the vertical inset;
80
- the header adds a small optical inset above its title.
81
- - Menus and option lists inset their rows by `--space-md`, the difference between the two
82
- radii, so rows sit concentric.
83
- - Dark mode inherits the chosen fonts.
129
+ - A nested corner is the container's radius less its inset, computed where it is used, so
130
+ menus and option lists keep their rows concentric at any radius.
131
+ - A density preset sets the four lengths and the two control heights on its region (see
132
+ [Scale and density](#scale-and-density)); a value you set on `:root` applies where no preset
133
+ is in effect.
84
134
 
85
135
  **Fonts.** The kit ships Geist for text and Geist Mono for code and identifiers (SIL OFL 1.1),
86
136
  as variable-weight woff2 files beside `core.css`, one per script. A browser downloads a file
87
137
  only when text in that script renders in that family, so a theme that sets `--font-sans` and
88
- `--font-mono` to its own fonts downloads none of them.
138
+ `--font-mono` to its own fonts downloads none of them. `--font-heading` is unset by default,
139
+ and headings fall back to the interface font.
89
140
 
90
141
  Compose title and description regions with CardHeader, ContentBlock or OverlayHeader, action
91
142
  regions with CardFooter or OverlayFooter, and label/value facts with MetadataList. These
92
143
  components own their spacing, so the application does not reproduce it.
93
- `--content-block-p` and `--overlay-region-p` override one surface's inset locally; leave them
94
- unset so the surface follows the theme.
144
+ See [Structure and spacing](./structure-and-spacing.md) for the owner and responsive-width
145
+ contracts before changing layout values.
95
146
 
96
- ## Scale
147
+ ## Scale and density
97
148
 
98
- Three factors, and no per-module ones:
149
+ Controls take two sizes, `default` and `sm`. A denser or roomier region is a scope instead,
150
+ so everything inside it moves together:
99
151
 
100
- | Factor | Multiplies |
101
- |---|---|
102
- | `--scale` | everything; the other two default to it |
103
- | `--density-scale` | spacing, control heights and row rhythm, rounded to whole pixels |
104
- | `--text-scale` | the type scale, control labels included |
152
+ | Setting | Moves |
153
+ | --- | --- |
154
+ | `density` | the four lengths and the two control heights; type keeps its size |
155
+ | `scale` | the same, the two icon sizes, and type |
156
+ | `typography.scale` | type alone, through `--text-scale` |
105
157
 
106
- Setting `--scale` alone moves the whole system. `UIProvider`'s `typography.scale` sets
107
- `--text-scale` for a scope without changing its geometry.
108
- [`src/styles/FACTORS.md`](../../src/styles/FACTORS.md) is the reference.
109
-
110
- Named `density` presets set only `--density-scale`, so compact and comfortable regions
111
- change spacing, control heights and row rhythm without resizing readable type. Controls are
112
- 34, 30 and 24px at the default and 32, 28 and 23px under `compact`. Use `scale` when the
113
- whole scoped UI should move together.
158
+ ```tsx fragment — shape only, not a program
159
+ <UIProvider config={{ density: "compact" }}>
160
+ <UIProvider config={{ scale: 1.125 }}>
161
+ <UIProvider config={{ typography: { scale: 0.875 } }}>
162
+ ```
114
163
 
115
- All three are raw inputs: set them on `:root`, with a `density` preset, or on a boundary such
116
- as [`Scope`](./provider-and-scoping.md#scope--tokens-only). On a plain nested element nothing
117
- re-derives from them.
164
+ The provider computes `scale` in JavaScript and writes the lengths themselves, rounded to
165
+ whole pixels, so no length is multiplied twice. A density preset also works without a
166
+ provider: any element can carry `data-density="compact"` or `"comfortable"`.
118
167
 
119
- A single module cannot be scaled on its own; scale a region with a scope instead, and use the
120
- three factors rather than reconstructing component calculations.
168
+ A preset sets its lengths on the region. To change a length under one preset, set it for
169
+ that preset: `[data-density="compact"] { --padding: 0.625rem; }`.
121
170
 
122
171
  ## Dark mode
123
172
 
124
- The kit answers three signals: a `.dark` class, `data-theme="dark"`, and
125
- `prefers-color-scheme: dark` when no explicit scheme is set. A dark-only override should
126
- answer all three, because an app that toggles a class and an app that sets an attribute are
127
- both normal. Use the selectors in [`SCOPES.md`](../../src/styles/SCOPES.md), which also reach
128
- the bare boundaries nested under a dark ancestor.
129
-
130
- A bare boundary under an explicit dark ancestor (a `Scope`, a `data-density` region, or a
131
- nested provider on the default `system` scheme) resolves the dark values. An explicit light
132
- island inside a dark tree keeps its own boundary light, but a bare boundary inside that
133
- island resolves dark again; give it its own `data-theme`, or use `UIScope`, which writes the
134
- resolved scheme on each boundary it renders.
173
+ Colours switch through `color-scheme`, which the kit sets from three signals: a `.dark` or
174
+ `.light` class, `data-theme="dark"` or `"light"`, and, with neither, the operating system's
175
+ preference. Each colour's `light-dark()` pair resolves on the element that paints it, so a
176
+ dark region inside a light page needs only `data-theme="dark"` (or a nested provider with
177
+ `colorScheme: "dark"`) on its container, and a light island inside a dark page the same.
135
178
 
136
- In CSS Modules, `.dark` is hashed like any other class. Write a dark rule as
137
- `:global(.dark)`, or it matches nothing and the theme silently does not apply.
179
+ A value of your own switches the same way: write `light-dark()` in the value, never a rule
180
+ under `.dark` or `@media (prefers-color-scheme: dark)`, which would miss a dark region inside
181
+ a light page.
138
182
 
139
183
  ## Editing a theme at runtime
140
184
 
141
185
  `ThemeTweaker` (`themelia-ui/features/theme-tweaker`) lets people change appearance, accent
142
186
  colour, density, corners and font while the app runs, and exports CSS theme values and
143
187
  provider configuration separately. Mount it as a floating button, a full-page route, or both.
188
+ The exported stylesheet is one `:root` block in which each colour it changed is a
189
+ `light-dark()` pair.
144
190
 
145
191
  The application owns the theme and provider state, above its router:
146
192
 
@@ -155,7 +201,6 @@ import { UIProvider, type UIConfig } from "themelia-ui/ui-provider"
155
201
  import {
156
202
  ThemeTweaker, createTheme, themeToStyle, useAppliedTheme, type ThemeDefinition,
157
203
  } from "themelia-ui/features/theme-tweaker"
158
- import "themelia-ui/features/theme-tweaker.css"
159
204
 
160
205
  export function ThemedApp({ children }: { children: ReactNode }) {
161
206
  const [theme, setTheme] = useState<ThemeDefinition>(() => createTheme())
@@ -195,10 +240,11 @@ const overrides = deriveThemePalette({ primary: "#3b82f6" })
195
240
  // { "--primary": "#3b82f6", "--primary-foreground": "oklch(0.18 0.01 260)", … }
196
241
  ```
197
242
 
198
- The keys are semantic custom properties, so write them at the boundary list or pass them to
199
- a `Scope`'s `vars`. The derived values stay CSS
200
- (`color-mix(in oklch, var(--primary) 10%, var(--background))` rather than a computed
201
- literal), so they keep following the tokens they derive from.
243
+ The keys are theme variables, so write them on `:root` or pass them to a `Scope`'s `vars`.
244
+ The derived values stay CSS (`color-mix(in oklch, var(--primary) 10%, var(--background))`
245
+ rather than a computed literal), so they keep following the variables they derive from.
246
+ Derive one set for each mode and pair them, as the ThemeTweaker does, when the two should
247
+ differ.
202
248
 
203
249
  `readableForeground(background)` **measures** WCAG contrast against both candidates and
204
250
  returns the better one, with the ratio and whether it clears AA:
@@ -215,64 +261,61 @@ Both functions are also re-exported from `features/theme-tweaker`.
215
261
 
216
262
  ## Design tokens (DTCG)
217
263
 
218
- `themelia-ui/tokens.json` is the contract in [W3C DTCG][dtcg] format, for Figma and
219
- tools like Style Dictionary. Colours are OKLCH objects with a `hex` fallback:
264
+ `themelia-ui/tokens.json` is the theme in [W3C DTCG][dtcg] format, for Figma and tools like
265
+ Style Dictionary. Each colour is a token in `theme.light` and one in `theme.dark`; every other
266
+ variable is written once in `theme.light` and aliased from `theme.dark`. Colours are OKLCH
267
+ objects with a `hex` fallback:
220
268
 
221
269
  ```json
222
270
  { "$value": { "colorSpace": "oklch", "components": [0.45, 0.124, 167.35], "hex": "#006a47" } }
223
271
  ```
224
272
 
225
- Two kinds of value are left out, and the file lists each one under its `$extensions`:
226
-
227
- - **Mixed colours.** `--destructive-accent` and the inverse steps are `color-mix()` over
228
- other tokens; DTCG has no type for a mix, and resolving one would bake one theme's value in.
229
- - **Shadows.** Each is a multi-layer shadow whose colour is a `color-mix()`; resolving it
230
- would bake one theme's ink in.
273
+ Shadows, durations, the easing curve and the font stacks carry their DTCG types. The two tint
274
+ strengths are percentages, which DTCG cannot express, and the unset font roles have no value;
275
+ the file lists them under its `$extensions`.
231
276
 
232
277
  [dtcg]: https://www.designtokens.org/TR/drafts/format/
233
278
 
234
279
  ## Tailwind CSS v4
235
280
 
236
281
  The kit ships no Tailwind and needs none. If your application already uses Tailwind v4,
237
- import the bridge after Tailwind and the kit's stylesheet, and its utilities resolve against
238
- this contract:
282
+ import the bridge after Tailwind, and its utilities resolve against the theme:
239
283
 
240
284
  ```css
241
285
  @import "tailwindcss";
242
- @import "themelia-ui/core.css";
243
286
  @import "themelia-ui/tailwind.css";
244
287
  ```
245
288
 
246
- `bg-primary` is `var(--primary)`, `rounded-sm` is the kit's inner radius, `p-md` is
247
- `var(--space-md)`, and `text-sm` is `calc(0.875rem * var(--text-scale, var(--scale)))`. The
248
- container radius has no named utility (`rounded` stays Tailwind's own), so write
249
- `rounded-(--radius)`. Every utility reads the token **at the element**, so a `.dark`
250
- subtree, a `[data-density="compact"]` scope, a nested `UIProvider` and a provider's
251
- `theme.radiusSm` or `typography.fonts` all move Tailwind's output the way they move the
252
- kit's own.
253
-
254
- **Import the bridge even if you never write a kit-token utility.** Both projects descend
255
- from shadcn, so custom-property names collide: `--radius-sm`, `--text-xs` through
256
- `--text-2xl`, `--shadow-*`, `--font-sans/serif/mono`, `--leading-*`, `--tracking-*`,
257
- `--ease-*` and `--animate-*`. Tailwind emits its defaults onto `:root` inside `@layer theme`,
258
- and when the kit's layers are declared first, that layer sits **above** the kit's `tokens`
259
- layer. Every module stylesheet imports `core.css` too, so which comes first depends on the
260
- order your application imports its CSS. Without the bridge, Tailwind can win every shared
261
- name, among them:
289
+ The kit's own CSS arrives with its components. Do not `@import` `themelia-ui/style.css` or
290
+ `themelia-ui/core.css` here as well: that inlines a second copy.
291
+
292
+ `bg-primary` is `var(--primary)`, `rounded` is the container radius and `rounded-sm` the
293
+ item radius, `p-padding` and `gap-gap-sm` are the kit's lengths, and `text-sm` is
294
+ `calc(0.875rem * var(--text-scale))`, which follows the type factor as Text does. Every
295
+ utility reads the variable **at the element**, so a dark region, a `[data-density="compact"]`
296
+ scope, a nested `UIProvider` and a provider's `theme.radiusSm` or `typography.fonts` all move
297
+ Tailwind's output the way they move the kit's own.
298
+
299
+ **Import the bridge even if you never write a kit utility.** Both projects descend from
300
+ shadcn, so custom-property names collide: `--radius`, `--radius-sm`, `--shadow`,
301
+ `--shadow-lg`, `--text-xs` through `--text-2xl` and the font stacks. Tailwind emits its
302
+ defaults onto `:root` inside `@layer theme`, and depending on the order your application
303
+ imports its CSS, that layer can sit above the kit's `tokens` layer. Without the bridge,
304
+ Tailwind can win every shared name:
262
305
 
263
306
  | what | kit | Tailwind takes it to |
264
307
  | --- | --- | --- |
265
- | `--radius-sm` | `0.5rem`, the kit's inner radius | `0.25rem` |
266
- | `--text-sm` | `calc(0.875rem * var(--text-scale, var(--scale)))` | `0.875rem`, and **scoped type scaling stops working** |
308
+ | `--radius-sm` | `0.5rem`, the kit's item radius | `0.25rem` |
309
+ | `--shadow-lg` | the kit's floating shadow | Tailwind's `shadow-lg` |
267
310
  | `--font-sans` | Geist first | Tailwind's system stack |
268
- | `--animate-pulse` | `pulse 2s var(--ease-in-out) infinite` | `pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite` |
269
311
 
270
- The symptom is a slightly wrong radius and a density control that stops working, not an
271
- error. The bridge restates those names with the kit's own definitions, so Tailwind's
272
- override becomes a no-op in either order. It is generated from the same public tokens.
312
+ The symptom is a slightly wrong radius or shadow, not an error. The bridge restates those
313
+ names with the kit's own values, so Tailwind's override becomes a no-op in either order. It is
314
+ generated from the theme. The kit declares nothing in Tailwind's `--animate-*` namespace, so
315
+ `animate-spin` and its neighbours stay Tailwind's own.
273
316
 
274
- The bridge is two theme declarations and nothing else: no rules and no utilities, and
275
- Tailwind drops every key no utility uses, so it costs nothing you do not use. Keys that read
276
- a kit token or a formula are `@theme inline`, so they resolve at the element; the restated
277
- literals (the inner radius, font stacks, leading, easing) are a plain `@theme`, so their
278
- utilities read the variable and follow a theme that moves it.
317
+ The bridge is theme declarations and nothing else: no rules and no utilities, and Tailwind
318
+ drops every key no utility uses, so it costs nothing you do not use. Keys that read a kit
319
+ variable or a formula are `@theme inline`, so they resolve at the element; the restated
320
+ literals (the radii, shadows and font stacks) are a plain `@theme`, so their utilities read
321
+ the variable and follow a theme that moves it.
@@ -1,10 +1,37 @@
1
1
  # Troubleshooting
2
2
 
3
+ Before patching a shared component, trace its callers and inspect one representative of
4
+ every affected surface. Recheck open portals, nested forms and small screens when shared
5
+ spacing or naming changes. Use the [read-only diagnosis and completion record](./verification.md)
6
+ to distinguish contract errors, advisory composition findings and unavailable coverage.
7
+
8
+ ## A lookup still shows another workspace
9
+
10
+ Set `scopeKey` on ResourceCombobox, SuggestionsCombobox or useSuggestions. Callback identity is not an invalidation API.
11
+ The key invalidates answers and errors while keeping query/open/value ownership; explicitly
12
+ clear a selected id if it is invalid in the new scope. See the [complete selector](./reference-workflows.md).
13
+
14
+ ## Validation resolves but the dialog closes
15
+
16
+ Set `closeOnAsyncComplete={false}` and close controlled `open` after successful validation
17
+ and mutation. Use `formId` for native submission and keep one mutation owner. Nested child
18
+ cancel/Escape should leave the parent draft visible; verify focus returns to the child invoker.
19
+
3
20
  ## A component is unstyled
4
21
 
5
- The JavaScript imports no CSS. Import the module's stylesheet beside the JavaScript subpath,
6
- or `themelia-ui/style.css` once. `core.css` alone supplies tokens but no component rules. See
7
- [Loading the CSS](./installation.md#loading-the-css).
22
+ A component brings its own CSS in a bundler. When it arrives unstyled:
23
+
24
+ - **Server rendering with Vite** (Astro, React Router, TanStack Start, Vike): add
25
+ `themelia-ui`, and any installed package that imports it, to `ssr.noExternal`. See
26
+ [Server rendering with Vite](./installation.md#server-rendering-with-vite).
27
+ - **Parcel:** set `"@parcel/resolver-default": { "packageExports": true }`.
28
+ - **Custom resolve conditions:** a bundler config that sets its own conditions replaces the
29
+ defaults, and the kit's CSS resolves only under `module`. Keep it: in Vite 6 or later,
30
+ spread `defaultClientConditions` into `resolve.conditions` and `defaultServerConditions`
31
+ into `ssr.resolve.conditions` (both exported from `vite`); in esbuild, add `module` to
32
+ `conditions`.
33
+ - **No bundler:** link `style.css`. See
34
+ [Loading the CSS](./installation.md#loading-the-css).
8
35
 
9
36
  Overrides need no `!important` or selector escalation: the kit's rules are layered, and
10
37
  unlayered application CSS beats them.
@@ -12,15 +39,36 @@ unlayered application CSS beats them.
12
39
  ## Node throws on a `.css` import
13
40
 
14
41
  `ERR_UNKNOWN_FILE_EXTENSION` for a `.css` file means Node is running one of your own modules
15
- that imports a stylesheet, without a bundler. The kit's JavaScript imports none. Import the
16
- stylesheets where your bundler or framework processes CSS, or map `\.css$` to a stub in a
17
- test runner that runs your modules directly.
42
+ that imports a stylesheet, without a bundler. The kit's own CSS imports resolve to an empty
43
+ module in Node. Import your stylesheets where your bundler or framework processes CSS, or map
44
+ `\.css$` to a stub in a test runner that runs your modules directly.
18
45
 
19
46
  ## Jest: `Cannot use import statement outside a module`
20
47
 
21
48
  The package is ES modules, and Jest transforms nothing in `node_modules` by default. Exempt
22
49
  the package in `transformIgnorePatterns`. See [In Node](./installation.md#in-node).
23
50
 
51
+ ## Jest: `Cannot find module '#core.css'`
52
+
53
+ Jest resolves the package's `imports` map from 29.4 onwards. Upgrade Jest.
54
+
55
+ ## A build fails on a `.css` file
56
+
57
+ A bundler that resolves the package's `module` condition bundles its CSS as well. A server
58
+ build with no CSS handling, such as a webpack or Rollup config without a CSS loader, fails on
59
+ it. Leave the package external in that build, so Node loads it with no CSS, or add a loader
60
+ that ignores `.css`. A client build needs a CSS loader too; with one in place, remove any
61
+ `<link>` to a kit stylesheet, since the CSS now arrives with the components.
62
+
63
+ ## The kit's CSS loads twice
64
+
65
+ Components bring their own CSS, so an application that also imports `themelia-ui/style.css`
66
+ or a module stylesheet from JavaScript, or `@import`s one into its own CSS, ships the same
67
+ rules twice. Remove those imports: the upgrade codemod removes the JavaScript ones and lists
68
+ the rest. A JavaScript import of `themelia-ui/core.css` is harmless, since bundlers keep one
69
+ copy. A page whose JavaScript is bundled that also links a kit stylesheet with an HTML
70
+ `<link>` loads it twice as well; remove the `<link>`.
71
+
24
72
  ## A subpath does not resolve
25
73
 
26
74
  There are no tier barrels such as `themelia-ui/base`. Use the generated
@@ -30,7 +78,10 @@ There are no tier barrels such as `themelia-ui/base`. Use the generated
30
78
  node node_modules/themelia-ui/scripts/consumer/find-component.mjs "what the UI must do"
31
79
  ```
32
80
 
33
- Import the returned exact module path and its returned CSS path.
81
+ Import the returned module path; in a bundled app its CSS comes with it.
82
+
83
+ Parcel reads a package's `exports` only with `"@parcel/resolver-default": { "packageExports":
84
+ true }` in the application's `package.json`.
34
85
 
35
86
  ## An optional peer is missing
36
87
 
@@ -40,23 +91,20 @@ listed there, report it as a package containment defect.
40
91
 
41
92
  ## A theme or density override does not apply
42
93
 
43
- Derived tokens are declared at every scope boundary (`:root`, `[data-ui-scope]`,
44
- `[data-density]`, `[data-theme]`, `.light` and `.dark`) and resolve there. Which selector an
45
- override needs depends on the token:
46
-
47
- - **Raw inputs**, such as the radii, font stacks, palette steps, `--scale`,
48
- `--density-scale` and `--text-scale`, are declared at `:root` only, so a value set on
49
- `:root` reaches every scope. Inside a `data-density` preset region, the preset's
50
- `--density-scale` applies instead.
51
- - **Semantic colours** such as `--primary` and `--background` are re-declared at every
52
- boundary. Set on `:root` alone, they stop at the first boundary, and every provider renders
53
- one. Declare them at the boundary list, or pass them through provider config.
54
- - **A provider's `theme.colors`** is written on the provider's own element, so a nested
55
- provider, `Scope` or `data-density` region inside it declares the kit's colours again. For
56
- colours that must reach every region, use the boundary list, or set palette steps
57
- (`theme.palette`), which each nested boundary derives its colours from.
58
- - **A plain element** that is not a boundary sets the variable, and nothing re-derives from
59
- it: the derived values were resolved above it. Wrap the region in `Scope`.
94
+ Theme defaults are declared at `:root` and inherit until an explicit scope override or
95
+ density preset establishes another value. When an override does not show:
96
+
97
+ - **Is it the theme's name?** A 3.0 name such as `--space-md`, `--control-h` or
98
+ `--primary-10` is gone; the codemod renames or reports each one, and
99
+ [`src/styles/TOKENS.md`](../../src/styles/TOKENS.md) names the variable for every role.
100
+ - **Is a density preset in effect?** A `data-density` region (or a provider's `density`) sets
101
+ the lengths and control heights on its element, so a value set further out does not reach
102
+ inside it. Set the value for the preset too: `[data-density="compact"] { --padding: … }`.
103
+ - **Is it a colour set to one value?** One value applies in both modes. For a separate dark
104
+ value, write `light-dark(light, dark)`; a rule under `.dark` misses a dark region inside a
105
+ light page.
106
+ - **Is it in a portalled popup?** A value set on a provider or a region reaches its subtree,
107
+ and a popup portalled to `<body>` leaves it; see the next section.
60
108
 
61
109
  See [Theming](./theming.md#setting-a-theme) and
62
110
  [Provider and scoping](./provider-and-scoping.md).
@@ -66,8 +114,8 @@ See [Theming](./theming.md#setting-a-theme) and
66
114
  Popups portal to `<body>` by default, outside any nested scope, so they miss its density,
67
115
  colour scheme and token overrides. Wrap the region in `UIPortalHost` so its popups render
68
116
  inside the scope, or pass the component a `container`. A root provider with a
69
- `documentTarget` mirrors only `data-theme` and `data-density` to the document; token
70
- overrides that `<body>` popups must see belong in CSS at the scope boundaries. See
117
+ `documentTarget` mirrors only `data-theme` and `data-density` to the document; a value that
118
+ `<body>` popups must see belongs on `:root`. See
71
119
  [Provider and scoping](./provider-and-scoping.md#portals-and-scopes).
72
120
 
73
121
  ## A controlled component appears frozen
@@ -87,17 +135,27 @@ element's semantics while applying the component's behaviour and geometry.
87
135
 
88
136
  Use `CSPProvider` with the request nonce. For a policy that forbids style elements entirely,
89
137
  set `disableStyleElements` and serve the documented Base UI behaviour rules from an external
90
- stylesheet. The module stylesheets themselves are ordinary static CSS. See
138
+ stylesheet. The kit's stylesheets are ordinary static CSS. See
91
139
  [Provider and scoping](./provider-and-scoping.md#strict-content-security-policy).
92
140
 
141
+ If the report names `style-src-attr`, a nonce or `disableStyleElements` will not authorize
142
+ server-rendered style attributes. Inspect the adopted components' SSR output and use the
143
+ separate attribute-policy strategy described in that guide.
144
+
145
+ In a bundled app the kit's CSS follows your own pipeline: stylesheet files in production,
146
+ while a dev server or `style-loader` that injects `<style>` elements needs the nonce, as your
147
+ own CSS does.
148
+
93
149
  ## The design looks inconsistent after overrides
94
150
 
95
151
  Override global semantic tokens first: colour roles, radius, spacing and density,
96
- typography, and control geometry. Component-level variables are implementation detail
97
- unless the module reference describes one as an extension point. Do not target hashed CSS
152
+ typography, and control geometry. Variables prefixed `--_` are private implementation detail.
153
+ Use a component-level variable only when its module reference documents a public extension
154
+ point. Do not target hashed CSS
98
155
  Module names; use the stable `data-slot` attributes and BEM hooks such as
99
156
  `{name}--component`, and for a state the attributes the primitives set (`data-open`, `data-checked`, `data-disabled`,
100
- `data-highlighted`, `data-popup-open`). Radix's `[data-state="open"]` matches nothing here.
157
+ `data-highlighted`, `data-popup-open`). Do not assume Radix's `[data-state="open"]` for Base
158
+ UI primitives. Use a module's own `data-state` only when its API documents that contract.
101
159
 
102
160
  ## Rich text and untrusted HTML
103
161