themelia-ui 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (746) hide show
  1. package/.agents/skills/themelia-ui/SKILL.md +60 -33
  2. package/.agents/skills/themelia-ui/manifest.json +23 -0
  3. package/.agents/skills/themelia-ui/references/api-compatibility.md +5 -4
  4. package/.agents/skills/themelia-ui/references/blocks.md +123 -0
  5. package/.agents/skills/themelia-ui/references/composition-ladder.md +8 -8
  6. package/.agents/skills/themelia-ui/references/composition.md +100 -19
  7. package/.agents/skills/themelia-ui/references/forms.md +23 -3
  8. package/.agents/skills/themelia-ui/references/framework-wiring.md +41 -13
  9. package/.agents/skills/themelia-ui/references/i18n.md +4 -2
  10. package/.agents/skills/themelia-ui/references/imports.md +104 -104
  11. package/.agents/skills/themelia-ui/references/installation.md +60 -31
  12. package/.agents/skills/themelia-ui/references/migration.md +156 -5
  13. package/.agents/skills/themelia-ui/references/provider-and-scoping.md +37 -25
  14. package/.agents/skills/themelia-ui/references/reference-workflows.md +43 -0
  15. package/.agents/skills/themelia-ui/references/structure-and-spacing.md +147 -0
  16. package/.agents/skills/themelia-ui/references/theming.md +174 -131
  17. package/.agents/skills/themelia-ui/references/troubleshooting.md +88 -30
  18. package/.agents/skills/themelia-ui/references/verification.md +60 -5
  19. package/CHANGELOG.md +212 -0
  20. package/README.md +48 -60
  21. package/dist/accordion-CHuzMmWL.js +143 -0
  22. package/dist/{action-menu-BNLURfMK.js → action-menu-BwiL_F6I.js} +35 -33
  23. package/dist/{alert-dialog-BMVo6Z-8.js → alert-dialog-Cg2HhuBe.js} +1 -1
  24. package/dist/avatar-Dc_BNYfB.js +93 -0
  25. package/dist/badge-VlJVZjdm.js +45 -0
  26. package/dist/base/accordion.js +1 -1
  27. package/dist/base/action-menu.js +1 -1
  28. package/dist/base/alert-dialog.js +1 -1
  29. package/dist/base/aspect-ratio.js +3 -1
  30. package/dist/base/avatar.js +1 -1
  31. package/dist/base/badge.js +2 -2
  32. package/dist/base/batch-action-bar.js +1 -1
  33. package/dist/base/buttons.js +1 -1
  34. package/dist/base/cards.js +1 -1
  35. package/dist/base/carousel.js +6 -4
  36. package/dist/base/chart.js +1 -1
  37. package/dist/base/choice-inputs.js +1 -1
  38. package/dist/base/combobox.js +1 -1
  39. package/dist/base/command.js +1 -1
  40. package/dist/base/context-menu.js +22 -21
  41. package/dist/base/copyable.js +1 -1
  42. package/dist/base/date-pickers.js +1 -1
  43. package/dist/base/dialog.js +1 -1
  44. package/dist/base/display.js +1 -1
  45. package/dist/base/dropdown-menu.js +1 -1
  46. package/dist/base/feedback.js +1 -1
  47. package/dist/base/forms-numeric.js +1 -1
  48. package/dist/base/forms.js +1 -1
  49. package/dist/base/hover-card.js +26 -23
  50. package/dist/base/input-group.js +1 -1
  51. package/dist/base/item.js +1 -1
  52. package/dist/base/label.js +1 -1
  53. package/dist/base/menubar.js +20 -14
  54. package/dist/base/navigation-menu.js +47 -38
  55. package/dist/base/navigation.js +1 -1
  56. package/dist/base/otp-input.js +36 -30
  57. package/dist/base/overlay.js +1 -1
  58. package/dist/base/popover-menu.js +1 -1
  59. package/dist/base/popover.js +1 -1
  60. package/dist/base/qr-code.js +51 -47
  61. package/dist/base/repeaters.js +1 -1
  62. package/dist/base/resizable.js +2 -0
  63. package/dist/base/sheet.js +1 -1
  64. package/dist/base/sidebar.js +1 -1
  65. package/dist/base/skeleton.js +1 -1
  66. package/dist/base/spinner.js +1 -1
  67. package/dist/base/structure.js +1 -1
  68. package/dist/base/table.js +1 -1
  69. package/dist/base/text-inputs.js +1 -1
  70. package/dist/base/timeline.js +1 -1
  71. package/dist/base/toaster.js +1 -1
  72. package/dist/base/toggle.js +21 -15
  73. package/dist/base/toolbar.js +1 -1
  74. package/dist/base/tooltip.js +1 -1
  75. package/dist/base/typography.js +2 -2
  76. package/dist/base/upload.js +1 -1
  77. package/dist/base/value-inputs.js +1 -1
  78. package/dist/{batch-action-bar-BZYNKXdV.js → batch-action-bar-DZVMVW83.js} +11 -8
  79. package/dist/{admin/patterns → blocks/admin}/access.js +79 -76
  80. package/dist/blocks/admin/commerce.js +2493 -0
  81. package/dist/{patterns → blocks}/analytics.js +312 -303
  82. package/dist/{patterns → blocks}/onboarding.js +27 -23
  83. package/dist/{patterns → blocks}/timelines.js +1 -1
  84. package/dist/buttons-BX2JfL5X.js +173 -0
  85. package/dist/cards-Ddhz43Bz.js +279 -0
  86. package/dist/chart-BkK3Xm10.js +201 -0
  87. package/dist/choice-inputs-NwRxvmZN.js +694 -0
  88. package/dist/combobox-519ubijc.js +292 -0
  89. package/dist/command-JjApYFds.js +156 -0
  90. package/dist/comments-CCQ2QRaU.js +1443 -0
  91. package/dist/components/base/action-menu/action-menu.d.ts +1 -1
  92. package/dist/components/base/action-menu/action-menu.types.d.ts +2 -2
  93. package/dist/components/base/avatar/avatar.d.ts +5 -2
  94. package/dist/components/base/badge/badge.d.ts +10 -10
  95. package/dist/components/base/badge/badge.variants.d.ts +1 -2
  96. package/dist/components/base/badge/index.d.ts +1 -2
  97. package/dist/components/base/buttons/button.d.ts +9 -8
  98. package/dist/components/base/buttons/button.types.d.ts +2 -2
  99. package/dist/components/base/buttons/index.d.ts +1 -1
  100. package/dist/components/base/buttons/text-button.d.ts +1 -1
  101. package/dist/components/base/cards/card-actions.d.ts +1 -1
  102. package/dist/components/base/cards/card.d.ts +3 -1
  103. package/dist/components/base/cards/partials/card-header.d.ts +2 -1
  104. package/dist/components/base/choice-inputs/choice.types.d.ts +2 -2
  105. package/dist/components/base/choice-inputs/partials/choice-parts.d.ts +3 -3
  106. package/dist/components/base/command/command.d.ts +5 -2
  107. package/dist/components/base/display/icon-badge.d.ts +5 -3
  108. package/dist/components/base/display/index.d.ts +1 -1
  109. package/dist/components/base/display/metadata-list.d.ts +6 -6
  110. package/dist/components/base/display/metadata-value.d.ts +1 -1
  111. package/dist/components/base/display/separator.d.ts +2 -2
  112. package/dist/components/base/feedback/alert.d.ts +3 -2
  113. package/dist/components/base/feedback/empty.d.ts +5 -4
  114. package/dist/components/base/feedback/progress-circle.d.ts +2 -2
  115. package/dist/components/base/feedback/progress.d.ts +3 -1
  116. package/dist/components/base/forms/form-field.d.ts +2 -2
  117. package/dist/components/base/input-group/input-group.d.ts +8 -10
  118. package/dist/components/base/item/item.d.ts +2 -2
  119. package/dist/components/base/overlay/index.d.ts +1 -1
  120. package/dist/components/base/overlay/overlay.types.d.ts +7 -5
  121. package/dist/components/base/qr-code/qr-code.d.ts +4 -4
  122. package/dist/components/base/sheet/sheet.d.ts +1 -1
  123. package/dist/components/base/sidebar/sidebar.d.ts +9 -13
  124. package/dist/components/base/spinner/spinner.d.ts +2 -2
  125. package/dist/components/base/structure/adaptive-grid.d.ts +3 -3
  126. package/dist/components/base/structure/bleed.d.ts +4 -2
  127. package/dist/components/base/structure/grid.d.ts +10 -4
  128. package/dist/components/base/structure/index.d.ts +1 -1
  129. package/dist/components/base/structure/split.d.ts +4 -3
  130. package/dist/components/base/structure/stack.d.ts +5 -5
  131. package/dist/components/base/structure/structure.maps.d.ts +2 -1
  132. package/dist/components/base/structure/structure.types.d.ts +10 -4
  133. package/dist/components/base/toggle/toggle.d.ts +2 -2
  134. package/dist/components/base/toolbar/toolbar.d.ts +3 -3
  135. package/dist/components/base/typography/index.d.ts +2 -0
  136. package/dist/components/base/typography/rich-text/rich-text.variants.d.ts +9 -0
  137. package/dist/components/base/typography/text/index.d.ts +1 -0
  138. package/dist/components/base/typography/text/text.d.ts +15 -8
  139. package/dist/components/base/typography/text/text.variants.d.ts +41 -0
  140. package/dist/components/base/value-inputs/color-input.d.ts +1 -7
  141. package/dist/components/base/value-inputs/slider.d.ts +2 -7
  142. package/dist/components/{admin/patterns → blocks/admin}/commerce/vendor-profile.d.ts +2 -1
  143. package/dist/components/{patterns → blocks}/analytics/analytics.strings.d.ts +2 -5
  144. package/dist/components/features/actions/action-adapters.d.ts +3 -3
  145. package/dist/components/features/actions/actions.types.d.ts +3 -5
  146. package/dist/components/features/actions/index.d.ts +1 -1
  147. package/dist/components/features/activities/activities-feed.d.ts +1 -1
  148. package/dist/components/features/activities/activities.types.d.ts +4 -4
  149. package/dist/components/features/activities/activity-parts.d.ts +3 -3
  150. package/dist/components/features/activities/activity-row.d.ts +4 -4
  151. package/dist/components/features/activities/index.d.ts +1 -1
  152. package/dist/components/features/ai-chat/ai-chat.types.d.ts +10 -3
  153. package/dist/components/features/ai-chat/ai-message-surfaces.d.ts +1 -1
  154. package/dist/components/features/ai-chat/ai-work-surfaces.d.ts +1 -1
  155. package/dist/components/features/combobox/combobox.strings.d.ts +2 -2
  156. package/dist/components/features/combobox/fetching-combobox.d.ts +2 -1
  157. package/dist/components/features/combobox/resource-combobox.d.ts +3 -0
  158. package/dist/components/features/combobox/use-suggestions.d.ts +7 -0
  159. package/dist/components/features/event-calendar/event-calendar.types.d.ts +3 -0
  160. package/dist/components/features/media-library/index.d.ts +1 -1
  161. package/dist/components/features/media-library/media-library-parts.d.ts +4 -3
  162. package/dist/components/features/media-library/media-library-views.d.ts +4 -3
  163. package/dist/components/features/media-library/media-library.d.ts +1 -1
  164. package/dist/components/features/media-library/media-library.strings.d.ts +12 -13
  165. package/dist/components/features/media-library/media-library.types.d.ts +11 -9
  166. package/dist/components/features/media-library/media-resource-gallery.d.ts +1 -1
  167. package/dist/components/features/media-library/use-media-library.d.ts +1 -4
  168. package/dist/components/features/overlays/action-overlay-frame.d.ts +1 -1
  169. package/dist/components/features/overlays/index.d.ts +1 -1
  170. package/dist/components/features/overlays/overlay-parts.d.ts +3 -3
  171. package/dist/components/features/overlays/overlays.types.d.ts +8 -7
  172. package/dist/components/features/rich-text-editor/index.d.ts +0 -1
  173. package/dist/components/features/table/data-table-body.d.ts +1 -1
  174. package/dist/components/features/table/data-table-expanded-row.d.ts +27 -0
  175. package/dist/components/features/table/data-table-header.d.ts +1 -1
  176. package/dist/components/features/table/data-table-size.d.ts +1 -1
  177. package/dist/components/features/table/data-table.d.ts +1 -1
  178. package/dist/components/features/table/index.d.ts +1 -1
  179. package/dist/components/features/table/table-helpers.d.ts +9 -3
  180. package/dist/components/features/table/table.strings.d.ts +11 -0
  181. package/dist/components/features/table/table.types.d.ts +60 -2
  182. package/dist/components/features/theme-tweaker/index.d.ts +1 -1
  183. package/dist/components/features/theme-tweaker/theme-tweaker.strings.d.ts +1 -1
  184. package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +6 -10
  185. package/dist/components/features/theme-tweaker/theme-tweaker.utils.d.ts +22 -6
  186. package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
  187. package/dist/components/layout/auth/auth.d.ts +1 -1
  188. package/dist/components/layout/auth/auth.types.d.ts +1 -1
  189. package/dist/components/primitives/value.d.ts +3 -1
  190. package/dist/containers-B8d8U9GS.js +2 -0
  191. package/dist/{copyable-H1TUEY-H.js → copyable-D9Okb1w6.js} +12 -11
  192. package/dist/core.css +2 -2
  193. package/dist/css/access.css +2 -1
  194. package/dist/css/accordion.css +2 -1
  195. package/dist/css/action-menu.css +2 -1
  196. package/dist/css/activities.css +2 -1
  197. package/dist/css/ai-chat.css +2 -1
  198. package/dist/css/analytics.css +2 -1
  199. package/dist/css/app-shell.css +2 -1
  200. package/dist/css/aspect-ratio.css +2 -1
  201. package/dist/css/async-preview.css +2 -1
  202. package/dist/css/auth.css +2 -1
  203. package/dist/css/avatar.css +2 -1
  204. package/dist/css/badge.css +2 -1
  205. package/dist/css/batch-action-bar.css +2 -1
  206. package/dist/css/buttons.css +2 -1
  207. package/dist/css/cards.css +2 -1
  208. package/dist/css/carousel.css +2 -1
  209. package/dist/css/chart.css +2 -1
  210. package/dist/css/choice-inputs.css +2 -1
  211. package/dist/css/combobox.css +2 -1
  212. package/dist/css/combobox2.css +2 -1
  213. package/dist/css/command.css +2 -1
  214. package/dist/css/comments.css +2 -1
  215. package/dist/css/commerce.css +2 -1
  216. package/dist/css/containers.css +2 -1
  217. package/dist/css/copyable.css +2 -1
  218. package/dist/css/data-view.css +2 -1
  219. package/dist/css/date-pickers.css +2 -1
  220. package/dist/css/display.css +2 -1
  221. package/dist/css/dropdown-menu.css +2 -1
  222. package/dist/css/event-calendar.css +2 -1
  223. package/dist/css/feedback.css +2 -1
  224. package/dist/css/filters.css +2 -1
  225. package/dist/css/forms-numeric.css +2 -1
  226. package/dist/css/forms.css +2 -1
  227. package/dist/css/global-search.css +2 -1
  228. package/dist/css/header.css +2 -1
  229. package/dist/css/hover-card.css +2 -1
  230. package/dist/css/input-group.css +2 -1
  231. package/dist/css/item.css +2 -1
  232. package/dist/css/kanban.css +2 -1
  233. package/dist/css/label.css +2 -1
  234. package/dist/css/map.css +2 -1
  235. package/dist/css/media-library.css +2 -1
  236. package/dist/css/mentions.css +2 -1
  237. package/dist/css/menubar.css +2 -1
  238. package/dist/css/navigation-menu.css +2 -1
  239. package/dist/css/navigation.css +2 -1
  240. package/dist/css/navigation2.css +2 -1
  241. package/dist/css/onboarding.css +2 -1
  242. package/dist/css/otp-input.css +2 -1
  243. package/dist/css/overlay.css +2 -1
  244. package/dist/css/overlays.css +2 -1
  245. package/dist/css/page.css +2 -1
  246. package/dist/css/popover-menu.css +2 -1
  247. package/dist/css/popover.css +2 -1
  248. package/dist/css/primitives.css +2 -1
  249. package/dist/css/products.css +2 -1
  250. package/dist/css/qr-code.css +2 -1
  251. package/dist/css/repeaters.css +2 -1
  252. package/dist/css/resizable.css +2 -1
  253. package/dist/css/resource-assignment.css +2 -1
  254. package/dist/css/resource.css +2 -1
  255. package/dist/css/rich-text-editor.css +2 -1
  256. package/dist/css/schema-form.css +2 -1
  257. package/dist/css/sidebar.css +2 -1
  258. package/dist/css/sidebar2.css +2 -1
  259. package/dist/css/skeleton.css +2 -1
  260. package/dist/css/spinner.css +2 -1
  261. package/dist/css/structure.css +2 -1
  262. package/dist/css/sync.css +2 -1
  263. package/dist/css/table.css +2 -1
  264. package/dist/css/table2.css +2 -1
  265. package/dist/css/text-inputs.css +2 -1
  266. package/dist/css/theme-tweaker.css +2 -1
  267. package/dist/css/timeline.css +2 -1
  268. package/dist/css/timelines.css +2 -1
  269. package/dist/css/toaster.css +2 -1
  270. package/dist/css/toggle.css +2 -1
  271. package/dist/css/toolbar.css +2 -1
  272. package/dist/css/tooltip.css +2 -1
  273. package/dist/css/typography.css +2 -1
  274. package/dist/css/upload.css +2 -1
  275. package/dist/css/value-inputs.css +2 -1
  276. package/dist/css/workspace.css +2 -1
  277. package/dist/css-graph.json +1027 -0
  278. package/dist/date-pickers-BwCwKIVM.js +685 -0
  279. package/dist/{dialog-CtFCuTUF.js → dialog-CAnwRNrm.js} +1 -1
  280. package/dist/display-a7AoX_u7.js +664 -0
  281. package/dist/dropdown-menu-Br8kvjrF.js +235 -0
  282. package/dist/empty.js +0 -0
  283. package/dist/features/actions.js +6 -6
  284. package/dist/features/activities.js +219 -216
  285. package/dist/features/ai-chat.js +593 -565
  286. package/dist/features/async-preview.js +105 -286
  287. package/dist/features/combobox.js +328 -314
  288. package/dist/features/comments.js +1 -1
  289. package/dist/features/data-view.js +56 -55
  290. package/dist/features/event-calendar.js +189 -185
  291. package/dist/features/filters.js +1 -1
  292. package/dist/features/global-search.js +259 -260
  293. package/dist/features/kanban.js +39 -37
  294. package/dist/features/map.js +357 -354
  295. package/dist/features/media-library.js +931 -931
  296. package/dist/features/mentions.js +1 -1
  297. package/dist/features/overlays.js +1 -1
  298. package/dist/features/products.js +950 -942
  299. package/dist/features/resource-assignment.js +39 -37
  300. package/dist/features/resource.js +70 -71
  301. package/dist/features/rich-text-editor.js +2 -2
  302. package/dist/features/schema-form.js +342 -338
  303. package/dist/features/sync.js +14 -12
  304. package/dist/features/table.js +1 -1
  305. package/dist/features/theme-tweaker.js +1002 -962
  306. package/dist/feedback-D4qVsKlD.js +430 -0
  307. package/dist/{filters-DOLKRSmb.js → filters-BhsTkWpZ.js} +386 -383
  308. package/dist/forms-C0WeNPFF.js +250 -0
  309. package/dist/forms-numeric-IwQ1ltNf.js +582 -0
  310. package/dist/hooks/use-native-dialog.d.ts +1 -1
  311. package/dist/index.js +2 -2
  312. package/dist/input-group-HS_Z0Ei_.js +119 -0
  313. package/dist/item-M2pmpWXh.js +150 -0
  314. package/dist/{label-DumoMDm6.js → label-HOBXAscw.js} +7 -5
  315. package/dist/layout/app-shell.js +4 -2
  316. package/dist/layout/auth.js +102 -100
  317. package/dist/layout/header.js +190 -180
  318. package/dist/layout/navigation.js +1 -1
  319. package/dist/layout/page.js +18 -16
  320. package/dist/layout/settings.js +2 -2
  321. package/dist/layout/sidebar.js +50 -46
  322. package/dist/layout/workspace.js +71 -69
  323. package/dist/lib/action-presentation.d.ts +3 -3
  324. package/dist/lib/component-vocabulary.d.ts +2 -2
  325. package/dist/lib/css-length.d.ts +2 -0
  326. package/dist/lib/responsive.d.ts +1 -1
  327. package/dist/lib/theming/index.d.ts +1 -0
  328. package/dist/lib/theming/recipes.d.ts +2 -2
  329. package/dist/lib/theming/themes/dense.d.ts +3 -0
  330. package/dist/lib/theming/themes/editorial.d.ts +3 -0
  331. package/dist/lib/theming/themes/index.d.ts +8 -0
  332. package/dist/lib/theming/themes/pair.d.ts +7 -0
  333. package/dist/lib/theming/themes/sharp.d.ts +3 -0
  334. package/dist/lib/theming/themes/soft.d.ts +3 -0
  335. package/dist/lib/theming/themes/types.d.ts +12 -0
  336. package/dist/lib/ui-provider/index.d.ts +1 -1
  337. package/dist/lib/ui-provider/scope.d.ts +5 -8
  338. package/dist/lib/ui-provider/tokens.d.ts +11 -3
  339. package/dist/lib/ui-provider/tokens.generated.d.ts +6 -4
  340. package/dist/lib/ui-provider/types.d.ts +17 -19
  341. package/dist/lib/ui-provider/ui-scope.d.ts +1 -1
  342. package/dist/{mentions-BbsEHlcH.js → mentions-BOxbigwp.js} +113 -111
  343. package/dist/navigation-Bgu7Vc0M.js +622 -0
  344. package/dist/navigation-DiYACqpE.js +216 -0
  345. package/dist/overlay-BuQOl8aP.js +356 -0
  346. package/dist/{overlays-DvVoS3td.js → overlays-1sULyytH.js} +77 -75
  347. package/dist/popover-CA7SP_iz.js +127 -0
  348. package/dist/popover-menu-QXgQeWeG.js +192 -0
  349. package/dist/{primitives-D0bdDozz.js → primitives-BskKlf35.js} +181 -178
  350. package/dist/primitives.js +1 -1
  351. package/dist/profiles/admin.json +6 -36
  352. package/dist/profiles/general.json +6 -96
  353. package/dist/repeaters-CeH20dvr.js +445 -0
  354. package/dist/rich-text-editor-D_Ppm8yh.js +491 -0
  355. package/dist/{sheet-CKcmRbJ9.js → sheet-CJ1-OAla.js} +3 -3
  356. package/dist/sidebar-D8uGqxio.js +421 -0
  357. package/dist/skeleton-BTKNKTdj.js +173 -0
  358. package/dist/spinner-Tc1QCnxM.js +30 -0
  359. package/dist/{structure-D0WGQAP3.js → structure-CynEZ-OY.js} +15 -23
  360. package/dist/style.css +1 -1
  361. package/dist/styles/TOKENS.md +116 -275
  362. package/dist/styles/animation.css +114 -0
  363. package/dist/styles/base.css +7 -6
  364. package/dist/styles/fields.css +45 -63
  365. package/dist/styles/focus.css +12 -0
  366. package/dist/styles/forced-colors.css +11 -10
  367. package/dist/styles/index.css +23 -30
  368. package/dist/styles/map.css +45 -34
  369. package/dist/styles/mentions.css +14 -52
  370. package/dist/styles/overlays.css +7 -7
  371. package/dist/styles/tailwind.css +76 -127
  372. package/dist/styles/targets.css +3 -3
  373. package/dist/styles/theme/colour.css +86 -0
  374. package/dist/styles/theme/density.css +31 -0
  375. package/dist/styles/theme/elevation.css +9 -0
  376. package/dist/styles/theme/layout.css +18 -0
  377. package/dist/styles/theme/motion.css +18 -0
  378. package/dist/styles/theme/shape.css +12 -0
  379. package/dist/styles/theme/size.css +10 -0
  380. package/dist/styles/theme/spacing.css +11 -0
  381. package/dist/styles/theme/typography.css +20 -0
  382. package/dist/styles/tone.css +61 -0
  383. package/dist/table-B7dtIFUx.js +1262 -0
  384. package/dist/table-Ds_eO9av.js +191 -0
  385. package/dist/tailwind.css +76 -127
  386. package/dist/text-inputs-BboE77nZ.js +395 -0
  387. package/dist/theming-C5ygF5uf.js +292 -0
  388. package/dist/theming.js +2 -2
  389. package/dist/{timeline-BdaGRyj-.js → timeline-BR_jNgvz.js} +57 -49
  390. package/dist/{timelines-BB7550mz.js → timelines-DXG1BfIN.js} +69 -67
  391. package/dist/{toaster-bBMgXm8z.js → toaster-CXL8L7Mm.js} +106 -99
  392. package/dist/tokens.json +1027 -636
  393. package/dist/toolbar-DBK-c4yy.js +74 -0
  394. package/dist/tooltip-BPYP-jUm.js +76 -0
  395. package/dist/{typography-BkxEiwQ1.js → typography-DmeR05Er.js} +87 -53
  396. package/dist/{ui-provider-Cmoq6i_D.js → ui-provider-DpzLUD12.js} +117 -69
  397. package/dist/ui-provider.js +1 -1
  398. package/dist/upload-CYuoJykZ.js +968 -0
  399. package/dist/use-async-preview-BFwf9ElY.js +188 -0
  400. package/dist/value-inputs-ng8aVJJZ.js +728 -0
  401. package/docs/README.md +13 -3
  402. package/docs/build/browser-composition-fixture.ts +28 -0
  403. package/docs/build/recipes.md +11484 -10723
  404. package/docs/generated/component-index.json +9809 -9169
  405. package/docs/generated/components/INDEX.md +5 -5
  406. package/docs/generated/components/base--accordion.md +51 -2
  407. package/docs/generated/components/base--action-menu.md +14 -15
  408. package/docs/generated/components/base--alert-dialog.md +3 -4
  409. package/docs/generated/components/base--aspect-ratio.md +3 -4
  410. package/docs/generated/components/base--avatar.md +7 -7
  411. package/docs/generated/components/base--badge.md +159 -27
  412. package/docs/generated/components/base--batch-action-bar.md +6 -7
  413. package/docs/generated/components/base--buttons.md +151 -47
  414. package/docs/generated/components/base--cards.md +107 -14
  415. package/docs/generated/components/base--carousel.md +1 -2
  416. package/docs/generated/components/base--chart.md +44 -8
  417. package/docs/generated/components/base--choice-inputs.md +10 -11
  418. package/docs/generated/components/base--combobox.md +3 -4
  419. package/docs/generated/components/base--command.md +6 -6
  420. package/docs/generated/components/base--context-menu.md +1 -2
  421. package/docs/generated/components/base--copyable.md +6 -7
  422. package/docs/generated/components/base--date-pickers.md +6 -7
  423. package/docs/generated/components/base--dialog.md +6 -7
  424. package/docs/generated/components/base--direction.md +1 -1
  425. package/docs/generated/components/base--display.md +234 -54
  426. package/docs/generated/components/base--dropdown-menu.md +6 -7
  427. package/docs/generated/components/base--feedback.md +71 -18
  428. package/docs/generated/components/base--forms-numeric.md +6 -7
  429. package/docs/generated/components/base--forms.md +84 -14
  430. package/docs/generated/components/base--hover-card.md +3 -4
  431. package/docs/generated/components/base--input-group.md +27 -30
  432. package/docs/generated/components/base--item.md +8 -9
  433. package/docs/generated/components/base--label.md +2 -3
  434. package/docs/generated/components/base--menubar.md +2 -4
  435. package/docs/generated/components/base--navigation-menu.md +2 -3
  436. package/docs/generated/components/base--navigation.md +2 -3
  437. package/docs/generated/components/base--otp-input.md +3 -4
  438. package/docs/generated/components/base--overlay.md +56 -47
  439. package/docs/generated/components/base--popover-menu.md +7 -8
  440. package/docs/generated/components/base--popover.md +9 -10
  441. package/docs/generated/components/base--qr-code.md +7 -8
  442. package/docs/generated/components/base--repeaters.md +6 -7
  443. package/docs/generated/components/base--resizable.md +2 -3
  444. package/docs/generated/components/base--sheet.md +12 -13
  445. package/docs/generated/components/base--sidebar.md +9 -11
  446. package/docs/generated/components/base--skeleton.md +6 -7
  447. package/docs/generated/components/base--slot.md +1 -1
  448. package/docs/generated/components/base--spinner.md +5 -7
  449. package/docs/generated/components/base--structure.md +320 -70
  450. package/docs/generated/components/base--table.md +61 -3
  451. package/docs/generated/components/base--text-inputs.md +17 -18
  452. package/docs/generated/components/base--timeline.md +45 -4
  453. package/docs/generated/components/base--toaster.md +43 -12
  454. package/docs/generated/components/base--toggle.md +11 -12
  455. package/docs/generated/components/base--toolbar.md +7 -8
  456. package/docs/generated/components/base--tooltip.md +5 -6
  457. package/docs/generated/components/base--typography.md +317 -32
  458. package/docs/generated/components/base--upload.md +8 -9
  459. package/docs/generated/components/base--value-inputs.md +9 -38
  460. package/docs/generated/components/{admin--patterns--access.md → blocks--admin--access.md} +15 -6
  461. package/docs/generated/components/{admin--patterns--commerce.md → blocks--admin--commerce.md} +40 -41
  462. package/docs/generated/components/{patterns--analytics.md → blocks--analytics.md} +57 -14
  463. package/docs/generated/components/{patterns--onboarding.md → blocks--onboarding.md} +6 -7
  464. package/docs/generated/components/{patterns--timelines.md → blocks--timelines.md} +6 -7
  465. package/docs/generated/components/features--actions.md +8 -18
  466. package/docs/generated/components/features--activities.md +31 -32
  467. package/docs/generated/components/features--ai-chat.md +15 -15
  468. package/docs/generated/components/features--async-preview.md +5 -6
  469. package/docs/generated/components/features--combobox.md +71 -5
  470. package/docs/generated/components/features--comments.md +0 -1
  471. package/docs/generated/components/features--data-view.md +63 -8
  472. package/docs/generated/components/features--event-calendar.md +1 -2
  473. package/docs/generated/components/features--filters.md +11 -2
  474. package/docs/generated/components/features--global-search.md +1 -2
  475. package/docs/generated/components/features--kanban.md +1 -2
  476. package/docs/generated/components/features--map.md +1 -2
  477. package/docs/generated/components/features--media-library.md +105 -38
  478. package/docs/generated/components/features--mentions.md +7 -7
  479. package/docs/generated/components/features--overlays.md +75 -22
  480. package/docs/generated/components/features--products.md +10 -11
  481. package/docs/generated/components/features--resource-assignment.md +2 -3
  482. package/docs/generated/components/features--resource.md +3 -4
  483. package/docs/generated/components/features--rich-text-editor.md +42 -13
  484. package/docs/generated/components/features--schema-form.md +1 -2
  485. package/docs/generated/components/features--sync.md +2 -3
  486. package/docs/generated/components/features--table.md +162 -12
  487. package/docs/generated/components/features--theme-tweaker.md +30 -15
  488. package/docs/generated/components/forms.md +2 -2
  489. package/docs/generated/components/layout--app-shell.md +41 -11
  490. package/docs/generated/components/layout--auth.md +8 -9
  491. package/docs/generated/components/layout--containers.md +40 -1
  492. package/docs/generated/components/layout--header.md +2 -3
  493. package/docs/generated/components/layout--navigation.md +0 -1
  494. package/docs/generated/components/layout--page.md +33 -5
  495. package/docs/generated/components/layout--settings.md +0 -1
  496. package/docs/generated/components/layout--sidebar.md +47 -7
  497. package/docs/generated/components/layout--workspace.md +3 -4
  498. package/docs/generated/components/primitives.md +128 -17
  499. package/docs/generated/components/theming.md +147 -4
  500. package/docs/generated/components/ui-provider.md +96 -78
  501. package/docs/generated/composition-ladder.md +8 -8
  502. package/docs/generated/consumer-contract.json +5736 -0
  503. package/docs/generated/imports.md +104 -104
  504. package/docs/generated/migration-broad-imports.json +267 -90
  505. package/docs/generated/migration-broad-imports.md +266 -101
  506. package/docs/generated/migration-codemod.json +365 -70
  507. package/docs/generated/migration.md +665 -95
  508. package/docs/generated/profiles.md +27 -27
  509. package/docs/generated/public-api.md +104 -102
  510. package/docs/generated/recipes.json +755 -810
  511. package/docs/generated/workflows/communications-overview/analytics/communications-reference.tsx +19 -0
  512. package/docs/generated/workflows/index.json +691 -0
  513. package/docs/generated/workflows/media-picking/media-library/media-picking-reference.tsx +63 -0
  514. package/docs/generated/workflows/media-picking/media-library/reference-data.ts +3 -0
  515. package/docs/generated/workflows/multi-section-form/form-workflow/multi-section-reference.tsx +46 -0
  516. package/docs/generated/workflows/nested-action-flow/action-overlays/nested-action-reference.tsx +39 -0
  517. package/docs/generated/workflows/record-detail/page-layout/record-detail-reference.tsx +24 -0
  518. package/docs/generated/workflows/resource-index/data-view/resource-index-reference.tsx +51 -0
  519. package/docs/generated/workflows/scoped-resource-selection/combobox/scoped-resource-reference.tsx +50 -0
  520. package/docs/generated/workflows/website-content-editor/media-library/reference-data.ts +3 -0
  521. package/docs/generated/workflows/website-content-editor/rich-text-editor/website-content-reference.tsx +33 -0
  522. package/docs/generated/workflows/workspace-navigation/app-shell/workspace-navigation-reference.tsx +26 -0
  523. package/docs/learn/api-compatibility.md +5 -4
  524. package/docs/learn/blocks.md +123 -0
  525. package/docs/learn/composition.md +100 -19
  526. package/docs/learn/forms.md +23 -3
  527. package/docs/learn/framework-wiring.md +41 -13
  528. package/docs/learn/i18n.md +4 -2
  529. package/docs/learn/installation.md +60 -31
  530. package/docs/learn/migration.md +156 -5
  531. package/docs/learn/provider-and-scoping.md +37 -25
  532. package/docs/learn/reference-workflows.md +43 -0
  533. package/docs/learn/structure-and-spacing.md +147 -0
  534. package/docs/learn/theming.md +174 -131
  535. package/docs/learn/troubleshooting.md +88 -30
  536. package/docs/learn/verification.md +60 -5
  537. package/package.json +42 -473
  538. package/scripts/consumer/codemod.mjs +50 -32
  539. package/scripts/consumer/contract-reader.mjs +42 -0
  540. package/scripts/consumer/css-scan.mjs +51 -0
  541. package/scripts/consumer/diagnose.mjs +136 -0
  542. package/scripts/consumer/find-component.mjs +30 -17
  543. package/scripts/consumer/install-skill.mjs +93 -11
  544. package/src/styles/TOKENS.md +116 -275
  545. package/dist/accordion-6YPJ9XRO.js +0 -135
  546. package/dist/admin/patterns/access.css +0 -15
  547. package/dist/admin/patterns/commerce.css +0 -29
  548. package/dist/admin/patterns/commerce.js +0 -2493
  549. package/dist/avatar-CS7zow2q.js +0 -85
  550. package/dist/badge-CxOuTfVr.js +0 -63
  551. package/dist/base/accordion.css +0 -3
  552. package/dist/base/action-menu.css +0 -6
  553. package/dist/base/alert-dialog.css +0 -4
  554. package/dist/base/aspect-ratio.css +0 -2
  555. package/dist/base/avatar.css +0 -4
  556. package/dist/base/badge.css +0 -2
  557. package/dist/base/batch-action-bar.css +0 -5
  558. package/dist/base/buttons.css +0 -4
  559. package/dist/base/cards.css +0 -13
  560. package/dist/base/carousel.css +0 -5
  561. package/dist/base/chart.css +0 -2
  562. package/dist/base/choice-inputs.css +0 -10
  563. package/dist/base/combobox.css +0 -3
  564. package/dist/base/command.css +0 -9
  565. package/dist/base/context-menu.css +0 -2
  566. package/dist/base/copyable.css +0 -6
  567. package/dist/base/date-pickers.css +0 -11
  568. package/dist/base/dialog.css +0 -4
  569. package/dist/base/display.css +0 -8
  570. package/dist/base/dropdown-menu.css +0 -2
  571. package/dist/base/feedback.css +0 -5
  572. package/dist/base/forms-numeric.css +0 -12
  573. package/dist/base/forms.css +0 -14
  574. package/dist/base/hover-card.css +0 -2
  575. package/dist/base/input-group.css +0 -6
  576. package/dist/base/item.css +0 -9
  577. package/dist/base/label.css +0 -3
  578. package/dist/base/menubar.css +0 -2
  579. package/dist/base/navigation-menu.css +0 -2
  580. package/dist/base/navigation.css +0 -12
  581. package/dist/base/otp-input.css +0 -9
  582. package/dist/base/overlay.css +0 -4
  583. package/dist/base/popover-menu.css +0 -11
  584. package/dist/base/popover.css +0 -3
  585. package/dist/base/qr-code.css +0 -2
  586. package/dist/base/repeaters.css +0 -18
  587. package/dist/base/resizable.css +0 -2
  588. package/dist/base/sheet.css +0 -4
  589. package/dist/base/sidebar.css +0 -12
  590. package/dist/base/skeleton.css +0 -9
  591. package/dist/base/spinner.css +0 -2
  592. package/dist/base/structure.css +0 -2
  593. package/dist/base/table.css +0 -3
  594. package/dist/base/text-inputs.css +0 -2
  595. package/dist/base/timeline.css +0 -9
  596. package/dist/base/toaster.css +0 -2
  597. package/dist/base/toggle.css +0 -2
  598. package/dist/base/toolbar.css +0 -5
  599. package/dist/base/tooltip.css +0 -2
  600. package/dist/base/typography.css +0 -2
  601. package/dist/base/upload.css +0 -10
  602. package/dist/base/value-inputs.css +0 -14
  603. package/dist/buttons-CqXKWty3.js +0 -179
  604. package/dist/cards-C6Ulbkw7.js +0 -271
  605. package/dist/chart-nomhJ87z.js +0 -193
  606. package/dist/choice-inputs-OUDn0kQw.js +0 -680
  607. package/dist/combobox-C8oP92bT.js +0 -266
  608. package/dist/command-Bp3B6pUu.js +0 -143
  609. package/dist/comments-CAnDlyXO.js +0 -1438
  610. package/dist/components/admin/patterns/index.d.ts +0 -2
  611. package/dist/components/features/rich-text-editor/exec-command-engine.d.ts +0 -2
  612. package/dist/components/patterns/index.d.ts +0 -3
  613. package/dist/css/styles.css +0 -1
  614. package/dist/date-pickers-DOwIT-Nk.js +0 -661
  615. package/dist/display-B3Q17h5z.js +0 -645
  616. package/dist/dropdown-menu-TyNLCLML.js +0 -223
  617. package/dist/features/actions.css +0 -11
  618. package/dist/features/activities.css +0 -25
  619. package/dist/features/ai-chat.css +0 -14
  620. package/dist/features/async-preview.css +0 -10
  621. package/dist/features/combobox.css +0 -12
  622. package/dist/features/comments.css +0 -24
  623. package/dist/features/data-view.css +0 -31
  624. package/dist/features/event-calendar.css +0 -17
  625. package/dist/features/filters.css +0 -24
  626. package/dist/features/global-search.css +0 -19
  627. package/dist/features/kanban.css +0 -7
  628. package/dist/features/map.css +0 -15
  629. package/dist/features/media-library.css +0 -27
  630. package/dist/features/mentions.css +0 -17
  631. package/dist/features/overlays.css +0 -11
  632. package/dist/features/products.css +0 -29
  633. package/dist/features/resource-assignment.css +0 -14
  634. package/dist/features/resource.css +0 -15
  635. package/dist/features/rich-text-editor.css +0 -8
  636. package/dist/features/schema-form.css +0 -22
  637. package/dist/features/sync.css +0 -11
  638. package/dist/features/table.css +0 -20
  639. package/dist/features/theme-tweaker.css +0 -27
  640. package/dist/feedback-DRerHGuV.js +0 -469
  641. package/dist/forms-CPrGGif_.js +0 -242
  642. package/dist/forms-numeric-CPVsL7Vf.js +0 -569
  643. package/dist/index.css +0 -3
  644. package/dist/input-group-BYe0rhoB.js +0 -126
  645. package/dist/item-B3yQ26as.js +0 -146
  646. package/dist/layout/app-shell.css +0 -13
  647. package/dist/layout/auth.css +0 -14
  648. package/dist/layout/containers.css +0 -2
  649. package/dist/layout/header.css +0 -20
  650. package/dist/layout/navigation.css +0 -11
  651. package/dist/layout/page.css +0 -15
  652. package/dist/layout/settings.css +0 -16
  653. package/dist/layout/sidebar.css +0 -16
  654. package/dist/layout/workspace.css +0 -15
  655. package/dist/navigation-CsqTA16F.js +0 -614
  656. package/dist/navigation-DzxzPuwg.js +0 -202
  657. package/dist/overlay-WQOsLd69.js +0 -345
  658. package/dist/patterns/analytics.css +0 -15
  659. package/dist/patterns/onboarding.css +0 -11
  660. package/dist/patterns/timelines.css +0 -11
  661. package/dist/popover-DriLnIFc.js +0 -123
  662. package/dist/popover-menu-C2UCMAe7.js +0 -189
  663. package/dist/primitives.css +0 -3
  664. package/dist/repeaters-DuP1N0nw.js +0 -438
  665. package/dist/rich-text-editor-BQXFe9oN.js +0 -595
  666. package/dist/sidebar-D0N6ckJL.js +0 -412
  667. package/dist/skeleton-DGR9df28.js +0 -172
  668. package/dist/spinner-CUAVFecI.js +0 -52
  669. package/dist/styles/FACTORS.md +0 -36
  670. package/dist/styles/SCOPES.md +0 -86
  671. package/dist/styles/themes/default.css +0 -164
  672. package/dist/styles/theming/animation.css +0 -143
  673. package/dist/styles/theming/colors.css +0 -97
  674. package/dist/styles/theming/feedback.css +0 -17
  675. package/dist/styles/theming/field.css +0 -21
  676. package/dist/styles/theming/focus.css +0 -88
  677. package/dist/styles/theming/layers.css +0 -13
  678. package/dist/styles/theming/layout.css +0 -21
  679. package/dist/styles/theming/motion.css +0 -42
  680. package/dist/styles/theming/overlay.css +0 -52
  681. package/dist/styles/theming/sizing.css +0 -118
  682. package/dist/styles/theming/text.css +0 -30
  683. package/dist/styles/theming/typography.css +0 -26
  684. package/dist/styles/tokens/components.css +0 -22
  685. package/dist/styles/tokens/foundation.css +0 -80
  686. package/dist/styles/tokens/layout.css +0 -19
  687. package/dist/styles/tokens/palette.css +0 -88
  688. package/dist/styles/tokens/primitives.css +0 -18
  689. package/dist/styles/tokens/states.css +0 -77
  690. package/dist/table-BC4qqsUb.js +0 -180
  691. package/dist/table-BHDpjajL.js +0 -982
  692. package/dist/text-inputs-DF_lD7pA.js +0 -385
  693. package/dist/theming-D6KRU7hO.js +0 -104
  694. package/dist/toolbar-DWRywF0R.js +0 -68
  695. package/dist/tooltip-t1VQQ2tZ.js +0 -73
  696. package/dist/upload-B38YZeFJ.js +0 -938
  697. package/dist/value-inputs-Q4ymjXlV.js +0 -716
  698. package/src/styles/FACTORS.md +0 -36
  699. package/src/styles/SCOPES.md +0 -86
  700. /package/dist/components/{admin/patterns → blocks/admin}/access/admin.strings.d.ts +0 -0
  701. /package/dist/components/{admin/patterns → blocks/admin}/access/credential-list.d.ts +0 -0
  702. /package/dist/components/{admin/patterns → blocks/admin}/access/index.d.ts +0 -0
  703. /package/dist/components/{admin/patterns → blocks/admin}/access/role-permissions.d.ts +0 -0
  704. /package/dist/components/{admin/patterns → blocks/admin}/access/sensitive-action.d.ts +0 -0
  705. /package/dist/components/{admin/patterns → blocks/admin}/commerce/account.d.ts +0 -0
  706. /package/dist/components/{admin/patterns → blocks/admin}/commerce/address-lines.d.ts +0 -0
  707. /package/dist/components/{admin/patterns → blocks/admin}/commerce/booking.d.ts +0 -0
  708. /package/dist/components/{admin/patterns → blocks/admin}/commerce/cart.d.ts +0 -0
  709. /package/dist/components/{admin/patterns → blocks/admin}/commerce/commerce.strings.d.ts +0 -0
  710. /package/dist/components/{admin/patterns → blocks/admin}/commerce/commerce.types.d.ts +0 -0
  711. /package/dist/components/{admin/patterns → blocks/admin}/commerce/format-amount.d.ts +0 -0
  712. /package/dist/components/{admin/patterns → blocks/admin}/commerce/index.d.ts +0 -0
  713. /package/dist/components/{admin/patterns → blocks/admin}/commerce/inventory-section.d.ts +0 -0
  714. /package/dist/components/{admin/patterns → blocks/admin}/commerce/invoice.d.ts +0 -0
  715. /package/dist/components/{admin/patterns → blocks/admin}/commerce/loyalty.d.ts +0 -0
  716. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-customer.d.ts +0 -0
  717. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-detail.d.ts +0 -0
  718. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-line-item.d.ts +0 -0
  719. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-transactions.d.ts +0 -0
  720. /package/dist/components/{admin/patterns → blocks/admin}/commerce/order.d.ts +0 -0
  721. /package/dist/components/{admin/patterns → blocks/admin}/commerce/seo-listing.d.ts +0 -0
  722. /package/dist/components/{admin/patterns → blocks/admin}/commerce/seo-score.d.ts +0 -0
  723. /package/dist/components/{admin/patterns → blocks/admin}/commerce/summary-panel.d.ts +0 -0
  724. /package/dist/components/{patterns → blocks}/analytics/activity-heatmap.d.ts +0 -0
  725. /package/dist/components/{patterns → blocks}/analytics/analytics.types.d.ts +0 -0
  726. /package/dist/components/{patterns → blocks}/analytics/chart-card.d.ts +0 -0
  727. /package/dist/components/{patterns → blocks}/analytics/format-metric-value.d.ts +0 -0
  728. /package/dist/components/{patterns → blocks}/analytics/index.d.ts +0 -0
  729. /package/dist/components/{patterns → blocks}/analytics/metric-bar.d.ts +0 -0
  730. /package/dist/components/{patterns → blocks}/analytics/metric-comparison.d.ts +0 -0
  731. /package/dist/components/{patterns → blocks}/analytics/metric-gradient.d.ts +0 -0
  732. /package/dist/components/{patterns → blocks}/analytics/metric-grid.d.ts +0 -0
  733. /package/dist/components/{patterns → blocks}/analytics/metric-micro-grid.d.ts +0 -0
  734. /package/dist/components/{patterns → blocks}/analytics/metric-skeleton.d.ts +0 -0
  735. /package/dist/components/{patterns → blocks}/analytics/metric-trend-chip.d.ts +0 -0
  736. /package/dist/components/{patterns → blocks}/analytics/metric.d.ts +0 -0
  737. /package/dist/components/{patterns → blocks}/analytics/time-ruler.d.ts +0 -0
  738. /package/dist/components/{patterns → blocks}/onboarding/checklist.d.ts +0 -0
  739. /package/dist/components/{patterns → blocks}/onboarding/index.d.ts +0 -0
  740. /package/dist/components/{patterns → blocks}/onboarding/onboarding.strings.d.ts +0 -0
  741. /package/dist/components/{patterns → blocks}/timelines/changelog-timeline.d.ts +0 -0
  742. /package/dist/components/{patterns → blocks}/timelines/index.d.ts +0 -0
  743. /package/dist/components/{patterns → blocks}/timelines/milestones-timeline.d.ts +0 -0
  744. /package/dist/components/{patterns → blocks}/timelines/steps.d.ts +0 -0
  745. /package/dist/components/{patterns → blocks}/timelines/timelines.strings.d.ts +0 -0
  746. /package/dist/styles/{theming/breakpoints.css → breakpoints.css} +0 -0
@@ -15,7 +15,6 @@ A region reports its own state — informational alert, empty, loading, error, o
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { Alert } from "themelia-ui/base/feedback"
18
- import "themelia-ui/base/feedback.css"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -113,8 +112,10 @@ The alert's heading. It inherits the alert's ink.
113
112
 
114
113
  Kind: type.
115
114
 
115
+ Semantic colour: the kit's one tone union.
116
+
116
117
  ```text
117
- "neutral" | "primary" | "secondary" | "destructive" | "warning" | "success" | "info"
118
+ SemanticTone
118
119
  ```
119
120
 
120
121
  ### `AlertVariant`
@@ -207,8 +208,8 @@ How the `media` slot is dressed.
207
208
 
208
209
  Kind: type.
209
210
 
210
- Breathing room: `sm` for panels and cells, `lg` for a whole page. Not derived from
211
- provider density, which already reaches these tokens via `--density-scale`.
211
+ Breathing room: `sm` for panels and cells, `default` for a card body or a page. Not
212
+ derived from provider density, which already reaches the paddings through the presets.
212
213
 
213
214
  ```text
214
215
  ComponentScale
@@ -229,7 +230,7 @@ Extends: `Omit<React.ComponentProps<"div">, "title">`.
229
230
  | `description` | no | `React.ReactNode \| false` | Why it is empty, or what will fill it. `false` hides it, for a title that already tells<br>the whole story. |
230
231
  | `action` | no | `React.ReactNode` | Buttons or links offering the next step. An empty state that only explains is a dead<br>end. |
231
232
  | `footer` | no | `React.ReactNode` | Quiet copy under the action — a hint, a learn-more, a shortcut. |
232
- | `padding` | no | `EmptyPadding` | Breathing room, on both axes: `sm` for panels and cells, `lg` for a whole page. The<br>inline padding is what keeps copy off a dashed edge. |
233
+ | `padding` | no | `EmptyPadding` | Breathing room, on both axes: `sm` for panels and cells, `default` for a card body or a<br>page. The inline padding is what keeps copy off a dashed edge. @default "default" |
233
234
  | `border` | no | `boolean` | The dashed outline. Off by default; use it when the empty state stands in for a card's<br>body and the edge says "something goes here". |
234
235
  | `strings` | no | `Partial<EmptyStrings>` | Overrides this state's own copy: `title`, `description`, and `ariaLabel`. The region<br>announces through `role="status"`, so a list that empties out while the reader is on the<br>page says so. |
235
236
 
@@ -336,7 +337,7 @@ attributes are then dropped rather than reporting 0%.
336
337
  Kind: callable.
337
338
 
338
339
  A determinate ring with the reading inside it, for tiles, scores and grids of small
339
- measures. Its size comes from `--progress-circle`; there is no size prop.
340
+ measures. It has one size, big enough for a percentage in the hole; there is no size prop.
340
341
 
341
342
  ```text
342
343
  ({ value, max, tone, label, children, className, style, ...props }: ProgressCircleProps) => React.JSX.Element
@@ -373,8 +374,10 @@ Extends: `Omit<React.ComponentProps<"div">, "children">`.
373
374
 
374
375
  Kind: type.
375
376
 
377
+ The tones a measure takes: the kit's tone union, without neutral and secondary.
378
+
376
379
  ```text
377
- "primary" | "success" | "warning" | "destructive" | "info"
380
+ Extract<SemanticTone, "primary" | "success" | "warning" | "destructive" | "info">
378
381
  ```
379
382
 
380
383
  ### `SearchGlassIllustration`
@@ -458,7 +461,7 @@ export default function AlertLayout() {
458
461
  <AlertTitle>With an action</AlertTitle>
459
462
  <AlertDescription>Inline space is reserved on the trailing edge.</AlertDescription>
460
463
  <AlertAction>
461
- <Button tone="neutral" buttonStyle="ghost">
464
+ <Button tone="neutral" appearance="ghost">
462
465
  Undo
463
466
  </Button>
464
467
  </AlertAction>
@@ -472,6 +475,56 @@ export default function AlertLayout() {
472
475
  }
473
476
  ```
474
477
 
478
+ ### Compose your own checklist
479
+
480
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
481
+ import { CheckIcon, CircleIcon } from "lucide-react"
482
+
483
+ import { Accordion } from "themelia-ui/base/accordion"
484
+ import { Button } from "themelia-ui/base/buttons"
485
+ import { IconBadge } from "themelia-ui/base/display"
486
+ import { Progress } from "themelia-ui/base/feedback"
487
+ import { Stack } from "themelia-ui/base/structure"
488
+ import { Text } from "themelia-ui/base/typography"
489
+
490
+ export default function ChecklistBlueprint() {
491
+ return (
492
+ <Stack style={{ maxWidth: "34rem", width: "100%" }}>
493
+ <Progress value={1} max={3} label="1 of 3 steps complete" />
494
+ <Accordion
495
+ media="medallion"
496
+ defaultValue={["invite"]}
497
+ items={[
498
+ {
499
+ value: "profile",
500
+ title: "Complete your profile",
501
+ icon: <IconBadge icon={CheckIcon} tone="success" shape="circle" />,
502
+ content: <Text type="secondary">Name, avatar and time zone are set.</Text>,
503
+ },
504
+ {
505
+ value: "invite",
506
+ title: "Invite your team",
507
+ icon: <IconBadge icon={CircleIcon} shape="circle" />,
508
+ content: (
509
+ <Stack gap="sm" align="start">
510
+ <Text type="secondary">Teammates see the same projects and saved views.</Text>
511
+ <Button>Send invites</Button>
512
+ </Stack>
513
+ ),
514
+ },
515
+ {
516
+ value: "connect",
517
+ title: "Connect a data source",
518
+ icon: <IconBadge icon={CircleIcon} shape="circle" />,
519
+ content: <Text type="secondary">Postgres, a CSV upload or the REST API.</Text>,
520
+ },
521
+ ]}
522
+ />
523
+ </Stack>
524
+ )
525
+ }
526
+ ```
527
+
475
528
  ### Empty
476
529
 
477
530
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
@@ -490,7 +543,7 @@ export default function EmptyExample() {
490
543
  action={
491
544
  <>
492
545
  <Button>Create invoice</Button>
493
- <Button tone="neutral" buttonStyle="outline">
546
+ <Button tone="neutral" appearance="outline">
494
547
  Import
495
548
  </Button>
496
549
  </>
@@ -511,7 +564,7 @@ import { Grid } from "themelia-ui/base/structure"
511
564
 
512
565
  export default function EmptyMedia() {
513
566
  return (
514
- <Grid columns={{ base: 1, md: 3 }} gap="xl">
567
+ <Grid columns={{ base: 1, md: 3 }}>
515
568
  <Empty
516
569
  padding="sm"
517
570
  border
@@ -564,9 +617,9 @@ const ILLUSTRATIONS = [
564
617
 
565
618
  export default function EmptyIllustrations() {
566
619
  return (
567
- <Grid columns={{ base: 1, sm: 2, lg: 3 }} gap="2xl">
620
+ <Grid columns={{ base: 1, sm: 2, lg: 3 }}>
568
621
  {ILLUSTRATIONS.map(({ name, Component, use }) => (
569
- <Stack key={name} gap="md" align="center">
622
+ <Stack key={name} gap="sm" align="center">
570
623
  <Component />
571
624
  <Stack gap="none" align="center">
572
625
  <Text size="sm" weight="medium">{name}</Text>
@@ -589,9 +642,9 @@ import { Stack } from "themelia-ui/base/structure"
589
642
 
590
643
  export default function EmptyBorder() {
591
644
  return (
592
- <Stack gap="xl">
645
+ <Stack>
593
646
  <Empty padding="sm" border media={<InboxIcon />} mediaVariant="icon" title="padding=&quot;sm&quot;" description="A side panel, a table cell, a card body." />
594
- <Empty padding="lg" media={<InboxIcon />} mediaVariant="icon" title="padding=&quot;lg&quot;" description="A whole page, with no border." />
647
+ <Empty media={<InboxIcon />} mediaVariant="icon" title="padding=&quot;default&quot;" description="A whole page, with no border." />
595
648
  </Stack>
596
649
  )
597
650
  }
@@ -606,7 +659,7 @@ import { Stack } from "themelia-ui/base/structure"
606
659
 
607
660
  export default function FormStates() {
608
661
  return (
609
- <Stack gap="lg">
662
+ <Stack>
610
663
  <Card>
611
664
  <CardContent>
612
665
  <LoadingState />
@@ -640,7 +693,7 @@ import { Text } from "themelia-ui/base/typography"
640
693
  export default function ProgressExample() {
641
694
  return (
642
695
  // Captioned: `label` is the accessible name and renders nothing.
643
- <Stack gap="lg" style={{ width: "100%" }}>
696
+ <Stack style={{ width: "100%" }}>
644
697
  {[
645
698
  { value: 24, tone: undefined, caption: "value={24}" },
646
699
  { value: 64, tone: "info" as const, caption: 'value={64} tone="info"' },
@@ -648,7 +701,7 @@ export default function ProgressExample() {
648
701
  { value: 92, tone: "warning" as const, caption: 'value={92} tone="warning"' },
649
702
  { value: undefined, tone: undefined, caption: "no value — indeterminate" },
650
703
  ].map((row) => (
651
- <Stack key={row.caption} gap="2xs">
704
+ <Stack key={row.caption} gap="sm">
652
705
  <Text size="xs" type="secondary">{row.caption}</Text>
653
706
  <Progress value={row.value} tone={row.tone} label={row.caption} />
654
707
  </Stack>
@@ -667,7 +720,7 @@ import { Text } from "themelia-ui/base/typography"
667
720
 
668
721
  export default function ProgressCircleExample() {
669
722
  return (
670
- <Stack direction="horizontal" gap="lg" wrap>
723
+ <Stack direction="horizontal" wrap>
671
724
  {[
672
725
  { value: 24, tone: undefined },
673
726
  { value: 60, tone: "info" as const },
@@ -15,12 +15,11 @@ A numeric field carries a unit, currency or precision the input itself must enfo
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { CoordinatesInput } from "themelia-ui/base/forms-numeric"
18
- import "themelia-ui/base/forms-numeric.css"
19
18
  ```
20
19
 
21
20
  ## Composition
22
21
 
23
- This module composes `base/choice-inputs`, `base/text-inputs`.
22
+ This module composes `base/choice-inputs`, `base/text-inputs`, `base/typography`.
24
23
 
25
24
  Application policy—routing, fetching, persistence, permissions, and translation—stays
26
25
  outside the package and arrives through the public props, callbacks, slots, or accessors below.
@@ -456,7 +455,7 @@ export default function Currency() {
456
455
  const [currency, setCurrency] = useState("EUR")
457
456
 
458
457
  return (
459
- <Stack gap="xl" style={{ maxWidth: "26rem", width: "100%" }}>
458
+ <Stack style={{ maxWidth: "26rem", width: "100%" }}>
460
459
  <FormField label="Invoice total">
461
460
  <CurrencyInput
462
461
  value={amount}
@@ -484,7 +483,7 @@ import { Stack } from "themelia-ui/base/structure"
484
483
 
485
484
  export default function Decimal() {
486
485
  return (
487
- <Stack gap="xl" style={{ maxWidth: "26rem", width: "100%" }}>
486
+ <Stack style={{ maxWidth: "26rem", width: "100%" }}>
488
487
  <FormField label="Plain" helperText="Commas become dots; extra decimals are refused.">
489
488
  <DecimalInput defaultValue="12.5" decimalPlaces={2} />
490
489
  </FormField>
@@ -516,7 +515,7 @@ export default function RoundingModeExample() {
516
515
  const [mode, setMode] = useState<RoundingMode>("half-even")
517
516
 
518
517
  return (
519
- <Stack gap="xl" style={{ maxWidth: "26rem", width: "100%" }}>
518
+ <Stack style={{ maxWidth: "26rem", width: "100%" }}>
520
519
  <FormField label="Rounding" helperText="Applies to the field below.">
521
520
  <RoundingModeSelect
522
521
  value={mode}
@@ -542,7 +541,7 @@ import { Stack } from "themelia-ui/base/structure"
542
541
 
543
542
  export default function Percentage() {
544
543
  return (
545
- <Stack gap="xl" style={{ maxWidth: "26rem", width: "100%" }}>
544
+ <Stack style={{ maxWidth: "26rem", width: "100%" }}>
546
545
  <FormField label="VAT rate">
547
546
  <PercentageInput defaultValue="21" />
548
547
  </FormField>
@@ -576,7 +575,7 @@ export default function Units() {
576
575
  const [coordinates, setCoordinates] = useState<CoordinatesValue>({ latitude: "52.370216", longitude: "4.895168" })
577
576
 
578
577
  return (
579
- <Stack gap="xl" style={{ maxWidth: "34rem", width: "100%" }}>
578
+ <Stack style={{ maxWidth: "34rem", width: "100%" }}>
580
579
  <FormField label="Shipping weight">
581
580
  <WeightInput
582
581
  value={weight}
@@ -14,8 +14,7 @@ Assembling a form's visible structure — label, control, support text, sections
14
14
  ## Import
15
15
 
16
16
  ```tsx fragment — import-only example
17
- import { DirtyStateBanner } from "themelia-ui/base/forms"
18
- import "themelia-ui/base/forms.css"
17
+ import { FormField, FormSection } from "themelia-ui/base/forms"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -136,6 +135,16 @@ Several fields sharing one label and one supporting line — a date range, a nam
136
135
  two. A real `<fieldset>` and `<legend>`, so the legend is announced when focus enters the
137
136
  group.
138
137
 
138
+ **Use when:** Related controls sharing an announced fieldset legend.
139
+
140
+ **Avoid when:** A whole independently titled subject surface.
141
+
142
+ **Compose:** Use one legend for the group and distinct FormField labels for its controls.
143
+
144
+ **Capabilities:** semantic fieldset legend; related editable controls.
145
+
146
+ **Alternatives:** FormSection.
147
+
139
148
  ```text
140
149
  ({ legend, description, className, children, ...props }: FieldGroupProps) => React.JSX.Element
141
150
  ```
@@ -231,6 +240,16 @@ Kind: callable.
231
240
 
232
241
  A titled group of fields, on a card's surface.
233
242
 
243
+ **Use when:** Editable form sections, including groups inside an existing Card.
244
+
245
+ **Avoid when:** Read-only facts or a semantic fieldset with one shared legend.
246
+
247
+ **Compose:** Use flat inside a surface; flat retains Card region insets. Let its title name the section and FormField name each field.
248
+
249
+ **Capabilities:** editable form sections; existing surface grouping.
250
+
251
+ **Alternatives:** ContentBlock, FieldGroup.
252
+
234
253
  ```text
235
254
  ({ title, description, actions, children, footer, surface, className, }: FormSectionProps) => import("react").JSX.Element
236
255
  ```
@@ -304,7 +323,7 @@ import { Input } from "themelia-ui/base/text-inputs"
304
323
 
305
324
  export default function FormFieldExample() {
306
325
  return (
307
- <Stack gap="xl" style={{ maxWidth: "26rem", width: "100%" }}>
326
+ <Stack style={{ maxWidth: "26rem", width: "100%" }}>
308
327
  <FormField label="Email" required hint="We only use this for receipts.">
309
328
  <Input type="email" placeholder="you@example.com" />
310
329
  </FormField>
@@ -354,7 +373,7 @@ import { Input } from "themelia-ui/base/text-inputs"
354
373
 
355
374
  export default function HorizontalFields() {
356
375
  return (
357
- <Stack gap="lg" style={{ width: "100%" }}>
376
+ <Stack style={{ width: "100%" }}>
358
377
  <FormField orientation="horizontal" label="Display name" hint="Shown on invoices.">
359
378
  <Input defaultValue="Acme Corporation" />
360
379
  </FormField>
@@ -378,7 +397,7 @@ export default function FieldGroupExample() {
378
397
  return (
379
398
  <div style={{ maxWidth: "34rem", width: "100%" }}>
380
399
  <FieldGroup legend="Reporting period" description="Both ends are inclusive.">
381
- <Stack direction="horizontal" gap="md">
400
+ <Stack direction="horizontal" gap="sm">
382
401
  <FormField label="From">
383
402
  <Input type="date" defaultValue="2026-03-01" />
384
403
  </FormField>
@@ -392,6 +411,57 @@ export default function FieldGroupExample() {
392
411
  }
393
412
  ```
394
413
 
414
+ ### Multi-section form reference
415
+
416
+ ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
417
+ import { useRef, useState } from "react"
418
+ import { Card } from "themelia-ui/base/cards"
419
+ import { ContentBlock } from "themelia-ui/base/display"
420
+ import { FieldGroup, FormField, FormSection, FormActionsBar, SubmitStateButton } from "themelia-ui/base/forms"
421
+ import { Stack } from "themelia-ui/base/structure"
422
+ import { Input } from "themelia-ui/base/text-inputs"
423
+ import { Text } from "themelia-ui/base/typography"
424
+ import { useFormFieldBinding, useStateFormControl, type FormControl } from "themelia-ui/forms"
425
+
426
+ type Draft = { firstName: string; lastName: string; company: string }
427
+ function BoundField({ control, name, label, error }: { control: FormControl<Draft>; name: keyof Draft; label: string; error?: string }) {
428
+ const field = useFormFieldBinding<string, Draft>({ control, name })
429
+ return <FormField label={label} error={error} hint={name === "company" ? "The name shown on invoices." : undefined}><Input required value={field.value ?? ""} onChange={event => field.onValueChange(event.target.value)} onBlur={field.onBlur} /></FormField>
430
+ }
431
+
432
+ export default function MultiSectionReference() {
433
+ const control = useStateFormControl<Draft>({ firstName: "Alex", lastName: "Example", company: "Example team" })
434
+ const [pending, setPending] = useState(false)
435
+ const [error, setError] = useState<string>()
436
+ const [rootError, setRootError] = useState<string>()
437
+ const [saved, setSaved] = useState(0)
438
+ const running = useRef(false)
439
+ return <Stack>
440
+ <Card title="Account details" description="One outer surface, editable sections with retained region insets.">
441
+ <form onSubmit={async event => {
442
+ event.preventDefault(); if (running.current) return
443
+ running.current = true; setPending(true); setError(undefined); setRootError(undefined)
444
+ try {
445
+ await new Promise(resolve => setTimeout(resolve, 250))
446
+ if (control.values.company === "offline") throw new Error("Request failed. Your values remain here.")
447
+ if (control.values.company.length < 3) { setError("Company must have at least three characters."); return }
448
+ setSaved(count => count + 1)
449
+ } catch (failure) { setRootError((failure as Error).message) }
450
+ finally { running.current = false; setPending(false) }
451
+ }}>
452
+ <Stack gap="none">
453
+ {rootError && <Text role="alert" type="error">{rootError}</Text>}
454
+ <FormSection surface="flat" title="Contact"><FieldGroup legend="Legal name" disabled={pending}><BoundField control={control} name="firstName" label="First name" /><BoundField control={control} name="lastName" label="Last name" /></FieldGroup></FormSection>
455
+ <FormSection surface="flat" title="Billing"><fieldset disabled={pending} style={{ border: 0, padding: 0, margin: 0 }}><BoundField control={control} name="company" label="Company" error={error} /></fieldset></FormSection>
456
+ <FormActionsBar leading={<Text role="status">Successful submissions {saved}</Text>}><SubmitStateButton type="submit" state={pending ? "submitting" : "idle"} strings={{ idle: "Save account" }} /></FormActionsBar>
457
+ </Stack>
458
+ </form>
459
+ </Card>
460
+ <Card title="Preferences" description="A sibling subject owns its own surface."><ContentBlock surface="plain" title="Delivery instructions"><Text>Use ContentBlock for supporting prose; FieldGroup supplies fieldset semantics for related controls.</Text></ContentBlock></Card>
461
+ </Stack>
462
+ }
463
+ ```
464
+
395
465
  ### FormSection
396
466
 
397
467
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
@@ -403,12 +473,12 @@ import { Text } from "themelia-ui/base/typography"
403
473
 
404
474
  export default function FormSectionExample() {
405
475
  return (
406
- <Stack gap="xl" style={{ maxWidth: "34rem" }}>
476
+ <Stack style={{ maxWidth: "34rem" }}>
407
477
  <FormSection
408
478
  title="Billing"
409
479
  description="Where invoices go. Changing it does not change the shipping address."
410
480
  actions={
411
- <Button tone="neutral" buttonStyle="ghost">
481
+ <Button tone="neutral" appearance="ghost">
412
482
  Edit
413
483
  </Button>
414
484
  }
@@ -446,7 +516,7 @@ export default function FormActions() {
446
516
  </Text>
447
517
  }
448
518
  >
449
- <Button tone="neutral" buttonStyle="outline">
519
+ <Button tone="neutral" appearance="outline">
450
520
  Discard
451
521
  </Button>
452
522
  <Button>Save</Button>
@@ -466,7 +536,7 @@ import { Stack } from "themelia-ui/base/structure"
466
536
 
467
537
  export default function FormErrorSummary() {
468
538
  return (
469
- <Stack style={{ maxWidth: "34rem" }}>
539
+ <Stack gap="sm" style={{ maxWidth: "34rem" }}>
470
540
  <ErrorSummary
471
541
  errors={[
472
542
  "Name is required.",
@@ -474,7 +544,7 @@ export default function FormErrorSummary() {
474
544
  "VAT number does not match the selected country.",
475
545
  ]}
476
546
  action={
477
- <Button tone="neutral" buttonStyle="outline">
547
+ <Button tone="neutral" appearance="outline">
478
548
  Review the first problem
479
549
  </Button>
480
550
  }
@@ -493,14 +563,14 @@ import { Stack } from "themelia-ui/base/structure"
493
563
 
494
564
  export default function FormDirty() {
495
565
  return (
496
- <Stack gap="lg" style={{ maxWidth: "34rem" }}>
566
+ <Stack style={{ maxWidth: "34rem" }}>
497
567
  {(["neutral", "info", "warning"] as const).map((tone) => (
498
568
  <DirtyStateBanner
499
569
  key={tone}
500
570
  tone={tone}
501
571
  actions={
502
572
  <>
503
- <Button tone="neutral" buttonStyle="outline">
573
+ <Button tone="neutral" appearance="outline">
504
574
  Discard
505
575
  </Button>
506
576
  <Button>Save</Button>
@@ -526,13 +596,13 @@ export default function FormSubmitState() {
526
596
  const [state, setState] = useState<SubmitState>("idle")
527
597
 
528
598
  return (
529
- <Stack direction="horizontal" gap="lg" wrap align="center">
599
+ <Stack direction="horizontal" wrap align="center">
530
600
  {(["idle", "submitting", "succeeded"] as SubmitState[]).map((s) => (
531
601
  <SubmitStateButton key={s} state={s} />
532
602
  ))}
533
603
  <Button
534
604
  tone="neutral"
535
- buttonStyle="outline"
605
+ appearance="outline"
536
606
  onClick={() => {
537
607
  setState("submitting")
538
608
  setTimeout(() => setState("succeeded"), 1200)
@@ -15,12 +15,11 @@ Hovering a reference reveals a preview the reader does not have to act on.
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { HoverCard } from "themelia-ui/base/hover-card"
18
- import "themelia-ui/base/hover-card.css"
19
18
  ```
20
19
 
21
20
  ## Composition
22
21
 
23
- This module depends on no other module.
22
+ This module composes `base/typography`.
24
23
 
25
24
  Application policy—routing, fetching, persistence, permissions, and translation—stays
26
25
  outside the package and arrives through the public props, callbacks, slots, or accessors below.
@@ -111,11 +110,11 @@ export default function HoverCardExample() {
111
110
  @jane
112
111
  </HoverCardTrigger>
113
112
  <HoverCardContent>
114
- <Stack direction="horizontal" gap="md" align="start">
113
+ <Stack direction="horizontal" gap="sm" align="start">
115
114
  <Avatar>
116
115
  <AvatarFallback>JM</AvatarFallback>
117
116
  </Avatar>
118
- <Stack gap="2xs">
117
+ <Stack gap="sm">
119
118
  <Text weight="medium">Jane McDonald</Text>
120
119
  <Text size="xs" type="secondary">Billing · joined March 2024</Text>
121
120
  </Stack>
@@ -15,7 +15,6 @@ A control needs an affix inside its border — an icon, unit, prefix button or c
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { InputGroup } from "themelia-ui/base/input-group"
18
- import "themelia-ui/base/input-group.css"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -66,18 +65,20 @@ Kind: callable.
66
65
  A quiet Button sized to sit inside the field rather than beside it.
67
66
 
68
67
  ```text
69
- ({ className, type, tone, buttonStyle, size, ...props }: InputGroupButtonProps) => React.JSX.Element
68
+ ({ className, type, tone, appearance, iconOnly, ...props }: InputGroupButtonProps) => React.JSX.Element
70
69
  ```
71
70
 
72
71
  ### `InputGroupButtonProps`
73
72
 
74
73
  Kind: interface.
75
74
 
76
- Extends: `Omit<React.ComponentProps<typeof Button>, "size" | "type">`.
75
+ One size, inset inside the field: a full-height Button would set the field's height rather
76
+ than fit in it. `iconOnly` makes it square.
77
+
78
+ Extends: `Omit<React.ComponentProps<typeof Button>, "type">`.
77
79
 
78
80
  | member | required | type | description / documented default |
79
81
  | --- | :-: | --- | --- |
80
- | `size` | no | `"xs" \| "sm" \| "icon-xs" \| "icon-sm"` | The sizes that fit inside a field: two text sizes and their icon-only twins. A<br>full-height Button would set the field's height rather than fit in it, which is why<br>this is the one place the kit keeps a size prop on a control. |
81
82
  | `type` | no | `"button" \| "submit" \| "reset"` | The native button type: `button` unless set, so pressing it never submits the form around the field. |
82
83
 
83
84
  ### `InputGroupInput`
@@ -111,8 +112,8 @@ React.ComponentProps<"div">
111
112
 
112
113
  Kind: callable.
113
114
 
114
- Secondary text at the group's own size — a unit, a domain suffix, a counter. It inherits
115
- the size, so it cannot drift from the input beside it.
115
+ Secondary text at the field's size — a unit, a domain suffix, a counter. Text's `sm`, the
116
+ step every field control's value uses, so it cannot drift from the input beside it.
116
117
 
117
118
  ```text
118
119
  ({ className, ...props }: React.ComponentProps<"span">) => React.JSX.Element
@@ -161,7 +162,7 @@ import { Stack } from "themelia-ui/base/structure"
161
162
 
162
163
  export default function InputGroupInline() {
163
164
  return (
164
- <Stack gap="lg" style={{ maxWidth: "26rem" }}>
165
+ <Stack style={{ maxWidth: "26rem" }}>
165
166
  <InputGroup>
166
167
  <InputGroupAddon>
167
168
  <SearchIcon aria-hidden="true" />
@@ -182,7 +183,7 @@ export default function InputGroupInline() {
182
183
  <InputGroup>
183
184
  <InputGroupInput placeholder="Add a label" aria-label="Label" />
184
185
  <InputGroupAddon align="inline-end">
185
- <InputGroupButton size="icon-xs" aria-label="Add">
186
+ <InputGroupButton iconOnly aria-label="Add">
186
187
  <ArrowRightIcon aria-hidden="true" />
187
188
  </InputGroupButton>
188
189
  </InputGroupAddon>
@@ -204,10 +205,10 @@ import { Stack } from "themelia-ui/base/structure"
204
205
 
205
206
  export default function InputGroupBlock() {
206
207
  return (
207
- <Stack gap="lg" style={{ maxWidth: "26rem" }}>
208
+ <Stack style={{ maxWidth: "26rem" }}>
208
209
  <InputGroup>
209
210
  <InputGroupAddon align="block-start">
210
- <InputGroupButton size="icon-xs" aria-label="Favourite">
211
+ <InputGroupButton iconOnly aria-label="Favourite">
211
212
  <StarIcon aria-hidden="true" />
212
213
  </InputGroupButton>
213
214
  <InputGroupText>Internal note</InputGroupText>
@@ -222,7 +223,7 @@ export default function InputGroupBlock() {
222
223
  }
223
224
  ```
224
225
 
225
- ### Button sizes inside the shell
226
+ ### A button inside the shell
226
227
 
227
228
  ```tsx fragment — excerpt from the live preview; surrounding values are supplied by the application
228
229
  import { ArrowRightIcon } from "lucide-react"
@@ -234,25 +235,21 @@ import { Stack } from "themelia-ui/base/structure"
234
235
 
235
236
  export default function InputGroupButtons() {
236
237
  return (
237
- <Stack gap="lg" style={{ maxWidth: "26rem" }}>
238
- {(["xs", "sm"] as const).map((size) => (
239
- <InputGroup key={size}>
240
- <InputGroupInput placeholder={`size="${size}"`} aria-label={size} />
241
- <InputGroupAddon align="inline-end">
242
- <InputGroupButton size={size}>Apply</InputGroupButton>
243
- </InputGroupAddon>
244
- </InputGroup>
245
- ))}
246
- {(["icon-xs", "icon-sm"] as const).map((size) => (
247
- <InputGroup key={size}>
248
- <InputGroupInput placeholder={`size="${size}"`} aria-label={size} />
249
- <InputGroupAddon align="inline-end">
250
- <InputGroupButton size={size} aria-label="Go">
251
- <ArrowRightIcon aria-hidden="true" />
252
- </InputGroupButton>
253
- </InputGroupAddon>
254
- </InputGroup>
255
- ))}
238
+ <Stack style={{ maxWidth: "26rem" }}>
239
+ <InputGroup>
240
+ <InputGroupInput placeholder="A labelled button" aria-label="Coupon code" />
241
+ <InputGroupAddon align="inline-end">
242
+ <InputGroupButton>Apply</InputGroupButton>
243
+ </InputGroupAddon>
244
+ </InputGroup>
245
+ <InputGroup>
246
+ <InputGroupInput placeholder="An icon-only button" aria-label="Search" />
247
+ <InputGroupAddon align="inline-end">
248
+ <InputGroupButton iconOnly aria-label="Go">
249
+ <ArrowRightIcon aria-hidden="true" />
250
+ </InputGroupButton>
251
+ </InputGroupAddon>
252
+ </InputGroup>
256
253
  </Stack>
257
254
  )
258
255
  }
@@ -15,7 +15,6 @@ A row carries identity — media, title, description and trailing actions — in
15
15
 
16
16
  ```tsx fragment — import-only example
17
17
  import { Item } from "themelia-ui/base/item"
18
- import "themelia-ui/base/item.css"
19
18
  ```
20
19
 
21
20
  ## Composition
@@ -31,8 +30,8 @@ outside the package and arrives through the public props, callbacks, slots, or a
31
30
 
32
31
  Kind: callable.
33
32
 
34
- A row — a list row, a menu row, a table row. No size prop: row height follows
35
- `--density-scale`, so use a denser scope for a denser list.
33
+ A row — a list row, a menu row, a table row. No size prop: row height follows the
34
+ density, so use a denser scope for a denser list.
36
35
 
37
36
  **Use when:** An identity row with a title, description, media and actions.
38
37
 
@@ -205,14 +204,14 @@ export default function ItemExample() {
205
204
  import { Card } from "themelia-ui/base/cards"
206
205
  import { Item, ItemContent, ItemDescription, ItemGroup, ItemTitle } from "themelia-ui/base/item"
207
206
  import { Stack } from "themelia-ui/base/structure"
208
- import { Scope } from "themelia-ui/ui-provider"
207
+ import { UIScope } from "themelia-ui/ui-provider"
209
208
 
210
209
  export default function CardsScale() {
211
210
  return (
212
- <Stack gap="lg" style={{ width: "100%" }}>
213
- {[1, 0.85].map((scale) => (
214
- <Scope key={scale} vars={{ "--density-scale": scale }}>
215
- <Card surface="bordered" title={`--density-scale ${scale}`}>
211
+ <Stack style={{ width: "100%" }}>
212
+ {(["default", "compact"] as const).map((density) => (
213
+ <UIScope key={density} config={{ density }}>
214
+ <Card surface="bordered" title={`density="${density}"`}>
216
215
  <ItemGroup>
217
216
  <Item surface="bordered">
218
217
  <ItemContent>
@@ -228,7 +227,7 @@ export default function CardsScale() {
228
227
  </Item>
229
228
  </ItemGroup>
230
229
  </Card>
231
- </Scope>
230
+ </UIScope>
232
231
  ))}
233
232
  </Stack>
234
233
  )