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,6 +1,6 @@
1
1
  ---
2
2
  name: themelia-ui
3
- description: Use when a React consumer is selecting, importing, composing, theming, localizing, integrating or upgrading themelia-ui components — forms, routing, data, SSR, CSP, consumer CSS overrides, Tailwind, and migrating between versions with the packaged codemod. Do not use for maintaining package internals.
3
+ description: Use when a React consumer is selecting, importing, composing, theming, localizing, integrating or upgrading themelia-ui components — structural layouts, blocks, spacing, responsive grids, forms, routing, data, SSR, CSP, consumer CSS overrides, Tailwind, and migrating between versions with the packaged codemod. Do not use for maintaining package internals.
4
4
  ---
5
5
 
6
6
  <!-- GENERATED by themelia-ui/scripts/gen-agent-skill.mjs -->
@@ -13,17 +13,33 @@ uses CSS Modules over Base UI, publishes exact module subpaths, and has no `ui/`
13
13
 
14
14
  ## Workflow
15
15
 
16
- 1. Search the packaged catalogue by the job the interface must do.
17
- 2. Read the best match's `chooseWhen`, `avoidWhen`, alternatives, status, and optional peers.
16
+ 1. Read the application's instructions and policy skills; they own domain decisions. Identify
17
+ the installed package version and check this copy with the packaged installer `--check`.
18
+ Review drift before reinstalling; keep application policy in a separate skill.
19
+ 2. Map owners: route, surface, section, fact, metric, editable group, field, transport and command.
20
+ Read `references/composition.md` for their insets, names and parent responsibilities. Search
21
+ the catalogue by job and context; read `chooseWhen`, `avoidWhen`, alternatives and peers.
22
+ For page geometry, gaps and responsive widths, read `references/structure-and-spacing.md`;
23
+ for analytics, onboarding, timelines and admin presentation, read `references/blocks.md`.
18
24
  3. Open that module's generated API reference before writing JSX. It contains every public
19
25
  declaration, inherited prop contract, dependency, and attributed live-preview recipe.
20
26
  4. Prefer the highest ready module that owns the behavior, then customize it at the lowest
21
27
  sufficient extension rung: prop → provider default → slot/render prop → composition →
22
28
  consumer CSS → application-owned component.
23
- 5. Import the exact JavaScript subpath and exact module stylesheet.
29
+ 5. Import the exact JavaScript subpath; in a bundled app its CSS comes with it.
24
30
  6. Keep application policy in the application, then verify the composed result in its real
25
31
  route, theme, density, data states, keyboard flow, and production bundle.
26
32
 
33
+ For a shared component/style change, trace its callers first. Select representatives of each
34
+ affected surface and check the initiating control, parent width, inset and portal owners.
35
+ Use `references/reference-workflows.md` when several modules meet; copy the complete source
36
+ directory including helpers. Run the packaged read-only diagnostics against explicit source
37
+ paths and treat advisory findings as review prompts. Read only the relevant guide.
38
+ If the catalogue or declaration is absent, name the missing path and use the installed package's
39
+ export map/types or request the missing artifact. Do not infer an API from another version.
40
+ If browser access is unavailable, finish independent type/build work and report browser
41
+ behavior and appearance as unverified.
42
+
27
43
  **Upgrading between versions** comes before any of that. Read the version's section in
28
44
  `references/migration.md`, then run the packaged codemod — dry first — and handle what it
29
45
  reports (removed tokens, overrides that now set a shared name, look-alike Tailwind utilities)
@@ -33,6 +49,7 @@ by hand. Re-run the skill installer afterwards so this skill matches the install
33
49
  node node_modules/themelia-ui/scripts/consumer/codemod.mjs --dry-run src/
34
50
  node node_modules/themelia-ui/scripts/consumer/codemod.mjs src/
35
51
  node node_modules/themelia-ui/scripts/consumer/install-skill.mjs --project=.
52
+ node node_modules/themelia-ui/scripts/consumer/install-skill.mjs --project=. --check --json
36
53
  ```
37
54
 
38
55
  ## Installed-package authorities
@@ -44,11 +61,9 @@ These paths exist after installation and are the source of truth:
44
61
  | `node_modules/themelia-ui/docs/generated/components/INDEX.md` | module-by-module API references and recipes |
45
62
  | `node_modules/themelia-ui/docs/generated/component-index.json` | machine-readable discovery records |
46
63
  | `node_modules/themelia-ui/docs/generated/public-api.md` | every exported name and exact subpath |
47
- | `node_modules/themelia-ui/docs/generated/imports.md` | every JS/CSS import and optional-peer owner |
64
+ | `node_modules/themelia-ui/docs/generated/imports.md` | every import and optional-peer owner |
48
65
  | `node_modules/themelia-ui/docs/generated/recipes.json` | machine-readable live-preview examples |
49
- | `node_modules/themelia-ui/src/styles/TOKENS.md` | exhaustive public theme-author contract |
50
- | `node_modules/themelia-ui/src/styles/FACTORS.md` | scale, spacing, density, and typography factors |
51
- | `node_modules/themelia-ui/src/styles/SCOPES.md` | boundaries where derived tokens recompute |
66
+ | `node_modules/themelia-ui/src/styles/TOKENS.md` | the theme contract: every variable, its role, and what components compute from it |
52
67
  | `node_modules/themelia-ui/docs/generated/migration.md` | every renamed or removed name, token and utility, with what replaces it |
53
68
  | `node_modules/themelia-ui/scripts/consumer/codemod.mjs` | applies the mechanical half of an upgrade to your source |
54
69
 
@@ -67,11 +82,11 @@ node node_modules/themelia-ui/scripts/consumer/find-component.mjs --peer=@tansta
67
82
  node node_modules/themelia-ui/scripts/consumer/find-component.mjs --help
68
83
  ```
69
84
 
70
- It indexes 97 modules, 386 attributed live recipes, and
71
- 118 live preview routes by public symbol, module id, recipe title, preview route,
85
+ It indexes 97 modules, 404 attributed live recipes, and
86
+ 119 live preview routes by public symbol, module id, recipe title, preview route,
72
87
  component capabilities, descriptions, and positive selection guidance. Negative `avoidWhen` guidance is never treated as a
73
88
  recommendation. `--json` includes the exact
74
- `publicImport`, `cssImport`, `apiDoc`, optional peers, dependencies, and alternatives.
89
+ `publicImport`, `apiDoc`, optional peers, dependencies, and alternatives.
75
90
  Use `--explain` to see matched components and why they fit. Component guidance identifies
76
91
  curated decisions separately from module-level fallback; missing prop defaults are not inferred.
77
92
  <!-- /GENERATED:search -->
@@ -102,9 +117,9 @@ Selection rules:
102
117
  | Base (`base`) | 54 | one generic concept: text roles, controls, rows, passive structure | `themelia-ui/base/accordion` |
103
118
  | Layout (`layout`) | 9 | page and application shells | `themelia-ui/layout/app-shell` |
104
119
  | Features (`features`) | 24 | an owned interaction lifecycle — a context, a hook, a state machine | `themelia-ui/features/actions` |
105
- | Blocks (`blocks`) | 5 | an arrangement rendering a subject; the admin blocks make up the admin profile | `themelia-ui/admin/patterns/access` |
120
+ | Blocks (`blocks`) | 5 | an arrangement rendering a subject; the admin blocks make up the admin profile | `themelia-ui/blocks/admin/access` |
106
121
 
107
- 97 modules, 752 public components, 1070 exported symbols in total.
122
+ 97 modules, 752 public components, 1072 exported symbols in total.
108
123
  <!-- /GENERATED:tiers -->
109
124
 
110
125
  Dependencies flow downward:
@@ -134,7 +149,10 @@ analytics, persistence, translation orchestration, and domain decisions. Pass th
134
149
  documented props, callbacks, accessors, slots, render props, hooks, and provider seams.
135
150
 
136
151
  Read `references/composition.md` for page examples and
137
- `references/composition-ladder.md` for tier-by-tier tradeoffs.
152
+ `references/composition-ladder.md` for available extension seams. Structural helpers arrange
153
+ siblings; subject blocks own a recognizable presentation. Stack has gap and alignment props,
154
+ no padding prop. Page already supplies a Container, and DataView already supplies its frame.
155
+ Check child insets before adding parent gaps; flat FormSections retain their inset.
138
156
 
139
157
  ## Imports and CSS delivery
140
158
 
@@ -152,21 +170,21 @@ leaflet. Reach for a module by its own subpath and the question never comes up.
152
170
  <!-- GENERATED:delivery by scripts/gen-agent-skill.mjs — do not edit between these markers. -->
153
171
  ```tsx compile
154
172
  import { Button } from "themelia-ui/base/buttons"
155
- import "themelia-ui/base/buttons.css"
156
173
  ```
157
174
 
158
- **The JavaScript imports no CSS.** A component whose module stylesheet is not imported
159
- renders unstyled.
175
+ **A component brings its own CSS.** In a bundled app (Vite, webpack, Rspack, Next.js, React
176
+ Router, Astro) importing the component is enough: its stylesheet arrives with its
177
+ JavaScript, once, and a module the application never imports brings none. Do not also
178
+ import `themelia-ui/style.css` or a module stylesheet from JavaScript; that loads the CSS twice.
160
179
 
161
- **The stylesheet is split per module.** 90 of 97 modules ship one; a module whose components draw nothing has none. Each module stylesheet imports
162
- `core.css` itself, so the tokens, themes, and cascade layer order arrive automatically.
163
- Import `core.css` on its own only when application CSS needs the token contract before
164
- any component stylesheet is loaded.
180
+ **Server rendering with Vite needs one line.** Astro, React Router, TanStack Start and Vike
181
+ list `themelia-ui` in `ssr.noExternal`; Astro renders the kit unstyled without it.
165
182
 
166
- `themelia-ui/style.css` is the deduplicated union of every sheet, for a consumer who would
167
- rather not track them. It is larger than what any one application uses.
183
+ **No bundler:** link `themelia-ui/style.css`, which includes `core.css`. Node, Vitest and
184
+ `require()` load the JavaScript with no CSS setup; Jest needs 29.4 or newer, with the package
185
+ exempted in `transformIgnorePatterns`.
168
186
 
169
- Import consumer overrides after the kit. Its component rules are layered, so ordinary
187
+ Consumer overrides need no ordering: the kit's component rules are layered, so ordinary
170
188
  unlayered app CSS wins without specificity tricks.
171
189
  <!-- /GENERATED:delivery -->
172
190
 
@@ -192,7 +210,7 @@ There are 15 optional peer packages. A consumer only needs the peers reachable f
192
210
  | `react-hook-form` | `features/sync`, `forms-rhf` |
193
211
  | `react-leaflet` | `features/map` |
194
212
  | `react-leaflet-markercluster` | `features/map` |
195
- | `recharts` | `base/chart`, `patterns/analytics` |
213
+ | `recharts` | `base/chart`, `blocks/analytics` |
196
214
  <!-- /GENERATED:peers -->
197
215
 
198
216
  ## Provider, scopes, themes, and portals
@@ -224,15 +242,16 @@ export function ScopedPreview() {
224
242
  }
225
243
  ```
226
244
 
227
- Theme through the public contract in `node_modules/themelia-ui/src/styles/TOKENS.md`.
228
- The three factors are `--scale` (everything), `--density-scale` (spacing and control
229
- geometry, rounded to whole pixels) and `--text-scale` (type); the last two default to
230
- `--scale`. Set them on `:root`, with a `density` preset, or on a scope boundary; semantic
231
- colours are re-derived at each boundary, so override those through the provider or a scope. Component-level variables
232
- are implementation plumbing unless the public token reference explicitly promotes them.
245
+ Theme through the public contract in `node_modules/themelia-ui/src/styles/TOKENS.md`: about
246
+ eighty variables, declared once at `:root`, each colour a `light-dark(light, dark)` pair. Set
247
+ the ones you change on `:root` (or on any element, for a region). Component defaults inherit
248
+ them; explicit scope overrides and density presets establish new values on their regions.
249
+ `density` changes spacing and control heights; `scale` also changes icons and type;
250
+ `typography.scale` changes type alone. A component's own variables are private (`--_x`), never
251
+ an override surface.
233
252
 
234
- Import application overrides after kit CSS. Kit component rules are layered, so ordinary
235
- unlayered consumer CSS wins without `!important`. Target stable documented `data-slot` or
253
+ Kit component rules are layered, so ordinary unlayered consumer CSS wins whatever its order,
254
+ without `!important`. Target stable documented `data-slot` or
236
255
  BEM hooks, and Base UI's state attributes (`data-open`, `data-checked`, `data-disabled`,
237
256
  `data-highlighted`, `data-popup-open`) for a state — not Radix's `[data-state="open"]`; never
238
257
  target CSS Module hashes. If the application uses Tailwind
@@ -267,6 +286,9 @@ portals, strict CSP, or streaming SSR. Read `references/theming.md` before defin
267
286
  | `references/theming.md` | changing color, radius, density, scale, typography, DTCG, or Tailwind integration |
268
287
  | `references/provider-and-scoping.md` | configuring roots, nested regions, portals, CSP, or SSR |
269
288
  | `references/composition.md` | building application-specific pages and business components |
289
+ | `references/structure-and-spacing.md` | choosing structural blocks, insets/gaps, widths, responsive grids, scroll owners or bleed |
290
+ | `references/blocks.md` | choosing analytics, onboarding, timelines or admin blocks and their application seams |
291
+ | `references/reference-workflows.md` | complete compositions, state ownership and helper sources |
270
292
  | `references/composition-ladder.md` | choosing the highest ready tier and lowest extension seam |
271
293
  | `references/framework-wiring.md` | connecting router, data, permissions, persistence, and rendering boundaries |
272
294
  | `references/forms.md` | binding fields to React state, react-hook-form, or another controller |
@@ -278,6 +300,11 @@ portals, strict CSP, or streaming SSR. Read `references/theming.md` before defin
278
300
 
279
301
  ## Consumer completion checklist
280
302
 
303
+ Record the package/skill versions, selected owners and public seams, changed callers, tested
304
+ routes and states, widths/themes/densities/locales, keyboard/focus interactions, exact commands
305
+ and observed results. List unavailable checks and application acceptance still required.
306
+ Only claim checks you executed; a successful typecheck cannot establish visual or workflow success.
307
+
281
308
  - Exact module import and its CSS resolve from the installed package.
282
309
  - Only the selected modules' optional peers are installed and bundled.
283
310
  - Public props and slots are used; no internal path, hash class, or undocumented token leaks in.
@@ -0,0 +1,23 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "packageVersion": "3.2.0",
4
+ "files": {
5
+ "SKILL.md": "c9a3884bc4315abd7425417e64aa68460a3a890c3f93f8f201d6dd0e3f79209d",
6
+ "references/api-compatibility.md": "7ecd0b9be0eff433391709fdf08321885d9ac4f1f30d99579b9ec179ea070da2",
7
+ "references/blocks.md": "42772d3390cdb22d0aac25dd47ddc0ed7de18159a760b3f8dc09eb9346b386c3",
8
+ "references/composition-ladder.md": "f02ee3b3f55464684ba993d7e129915d5c4732b329d8b9f702ab7579ef6322f2",
9
+ "references/composition.md": "ccf8fa769cc605c9f7d59ec939e3be5873f97b5d4158eee5eb04dc62d523f270",
10
+ "references/forms.md": "8e1b86b5da221f04855b59f1ebcf90c7cc6fe63284be34b30afd09e4d978fafb",
11
+ "references/framework-wiring.md": "c98ca307c33c0e89ba4371d3d893af2aa0fd219aeea7413d534c3ac83d4cbf20",
12
+ "references/i18n.md": "74759967f8460ceb2e41c18d6ff20c62f40ccd745bbc87b645106360be3d7c59",
13
+ "references/imports.md": "c45ff607b729b9b00b8a58ed62bf0da9f12c355a554f3ef7b0aa5f17d9b7b684",
14
+ "references/installation.md": "60e3ca9ac46f5d43f27cb3eacf482bb4bbae05f5bc673f10a3fe7aa6fd34b5ed",
15
+ "references/migration.md": "e8e3875e4db01b6ed32246733e493f8077db8dd1b18ca82a8309af0889e74381",
16
+ "references/provider-and-scoping.md": "71a9844192804c3be7c604545b9592bf17e6f591595553d6a91b1de9b954259a",
17
+ "references/reference-workflows.md": "9f7a02aa3d34934cd8a22fbabcc377a880513c251bba0b2a49f5ecdc50f7c47c",
18
+ "references/structure-and-spacing.md": "e44c3f90e2d3c4aa590c7a88115e7806d6e0fdff1c7bba9ce862894fdd671653",
19
+ "references/theming.md": "f5e14f5c72274a7b58a1148a8365334aafdbb884bac2ed6854022a895e3c9023",
20
+ "references/troubleshooting.md": "f81f8fb782933bedadf347efbc15898bd531b0719d9ffe6f1ff2cc6d309837d8",
21
+ "references/verification.md": "c8a8f2313021d7f15fe02a6f49f46b5bf457ffba69ece9f962c836bd1a1a3a3e"
22
+ }
23
+ }
@@ -1,6 +1,6 @@
1
1
  # API compatibility
2
2
 
3
- Within a major version, exact package subpaths, exported names, callable signatures, and
3
+ Exact package subpaths, exported names, callable signatures, and
4
4
  exported props/type members are compatibility surfaces. Public global theme tokens, documented
5
5
  `data-slot` and BEM hooks, and the `strings` contracts are also consumer contracts.
6
6
 
@@ -15,9 +15,10 @@ exported props/type members are compatibility surfaces. Public global theme toke
15
15
  | a documented default changes | behavioural change; release notes required |
16
16
  | component token or hashed CSS Module name changes | internal unless documented as an extension point |
17
17
 
18
- A deprecated API introduced during a stable major remains available for that major with a
19
- named replacement and migration instructions. It is removed only in the next major unless
20
- security or correctness makes retaining it unsafe.
18
+ 3.1 includes breaking changes despite its minor version number: it removes obsolete aliases
19
+ and adapters. Removed names do not stay available solely for an
20
+ upgrade window. A breaking release records the replacement in the migration reference and
21
+ the changelog; consumers pin the old version until they are ready to update.
21
22
 
22
23
  A removal, a newly required member or an incompatible type change ships with a migration
23
24
  record: the migration reference (`node_modules/themelia-ui/docs/generated/migration.md`) names each one with its
@@ -0,0 +1,123 @@
1
+ # Choosing and composing blocks
2
+
3
+ A structural block arranges regions; a subject block renders a recognizable job such as
4
+ metrics, onboarding or an order summary. Use [Structure and spacing](structure-and-spacing.md)
5
+ for page geometry, surfaces and gaps. Start with a ready subject block when its vocabulary
6
+ fits the product, then use its documented props, callbacks or parts. The application keeps
7
+ data, permission checks, routing, mutation and persistence.
8
+
9
+ ## Published subject modules
10
+
11
+ | Job | Exact subpath and examples | Application owns | Optional peers |
12
+ | --- | --- | --- | --- |
13
+ | Quantities, changes and plots | `themelia-ui/blocks/analytics`: MetricGrid, Metric, MetricComparison, ChartCard, ActivityHeatmap | Measures, period, comparison meaning, loading/errors and metric actions | `recharts`, for the module even when the adopted block has no plot |
14
+ | Setup tasks completed over time | `themelia-ui/blocks/onboarding`: Checklist | Step status, content, submission and persistence | None |
15
+ | Milestones, changelog or linear progress | `themelia-ui/blocks/timelines`: MilestonesTimeline, ChangelogTimeline, Steps, StepsBar | Sequence, status, dates and navigation | None |
16
+ | Permissions and credential management | `themelia-ui/blocks/admin/access`: RolePermissions, CredentialList, SensitiveAction | Authorization, actual secrets, deletion confirmation and mutations | None |
17
+ | Orders, invoices, inventory and payment summaries | `themelia-ui/blocks/admin/commerce`: OrderSummary, InvoiceLineItems, InventorySection, PaymentTimeline | Commerce records, calculation policy, commands and transport | None |
18
+
19
+ These are modules, not broad barrels: there is no `themelia-ui/blocks` import. General and
20
+ admin profiles come from the same installation. Admin is presentation vocabulary rather
21
+ than an authorization layer; importing an admin block does not protect its actions or data.
22
+ The generated [import table](imports.md) is authoritative for optional peers.
23
+ Do not assume a symbol is peer-free because its own UI looks simple.
24
+
25
+ Open the selected API before JSX: analytics (`node_modules/themelia-ui/docs/generated/components/blocks--analytics.md`),
26
+ onboarding (`node_modules/themelia-ui/docs/generated/components/blocks--onboarding.md`),
27
+ timelines (`node_modules/themelia-ui/docs/generated/components/blocks--timelines.md`),
28
+ admin access (`node_modules/themelia-ui/docs/generated/components/blocks--admin--access.md`), or
29
+ admin commerce (`node_modules/themelia-ui/docs/generated/components/blocks--admin--commerce.md`).
30
+ They list exact record shapes, defaults, strings, dependencies and preview recipes.
31
+
32
+ ## Facts versus quantities
33
+
34
+ MetadataList owns label/value facts such as owner, status, address or a date. A numeric
35
+ identifier is still a fact. MetricGrid/Metric own measures such as delivered messages,
36
+ revenue or a conversion rate, with optional comparison and trend. Put prose facts beside
37
+ quantities rather than turning every value into a metric tile.
38
+
39
+ ```tsx compile
40
+ import { ContentBlock, MetadataList } from "themelia-ui/base/display"
41
+ import { Stack } from "themelia-ui/base/structure"
42
+ import { MetricGrid, type MetricData } from "themelia-ui/blocks/analytics"
43
+ import { Page } from "themelia-ui/layout/page"
44
+
45
+ const metrics: MetricData[] = [
46
+ { id: "delivered", label: "Delivered", value: 248 },
47
+ { id: "opened", label: "Opened", value: null, subtitle: "Tracking unavailable" },
48
+ ]
49
+
50
+ export function DeliveryOverview() {
51
+ return <Page header={{ title: "Delivery overview", description: "Current campaign" }}>
52
+ <Stack>
53
+ <MetricGrid metrics={metrics} variant="card" />
54
+ <ContentBlock title="Campaign details">
55
+ <MetadataList items={[
56
+ { id: "owner", label: "Owner", value: "Alex" },
57
+ { id: "status", label: "Status", value: "Sending" },
58
+ ]} />
59
+ </ContentBlock>
60
+ </Stack>
61
+ </Page>
62
+ }
63
+ ```
64
+
65
+ Use `null` for an unavailable MetricData value; zero means a measured zero. MetricGrid's
66
+ loading contract is for initial loading. For error or refresh behavior, inspect the adopted
67
+ component's exact API rather than assuming every analytics block accepts the same props.
68
+ The [communications workflow](reference-workflows.md) demonstrates retained figures,
69
+ failure feedback, retry, unknown tracking and a separate facts region.
70
+
71
+ ## Compose without duplicating owners
72
+
73
+ Inspect whether a block already owns its title, surface, controls and responsive layout
74
+ before surrounding it with another Card or Grid. MetricGrid already arranges tiles;
75
+ ChartCard already owns its chart frame; FormSection already owns an editable section's
76
+ header and inset. Use a sibling surface for an independent subject and ContentBlock for
77
+ supporting prose inside one. [Composition](composition.md#decide-the-owners-before-jsx)
78
+ describes the owners in detail.
79
+
80
+ Keep default typography and spacing with those owners. Do not invent `size`, `padding`,
81
+ `error` or `strings` props by analogy with another block. Use a documented slot or render
82
+ prop for one region; use public parts or an application composition when the arrangement
83
+ must differ. No block needs every extension seam. The [composition ladder](composition-ladder.md)
84
+ is a discovery aid; the selected API remains the contract.
85
+
86
+ ## Compose your own subject
87
+
88
+ When the ready block's vocabulary cannot express the product, start from its public
89
+ lower-tier recipe rather than copying internals. The live block pages include these
90
+ compose-your-own examples; their source is also embedded in
91
+ recipes.json (`node_modules/themelia-ui/docs/generated/recipes.json`) under the exact id below and in the
92
+ recipe book (`node_modules/themelia-ui/docs/build/recipes.md`). The recipe imports identify the adopted modules and
93
+ their peer requirements; they do not require importing the corresponding ready block.
94
+
95
+ | Subject | Recipe id | Public building blocks |
96
+ | --- | --- | --- |
97
+ | A custom measure | `analytics-blueprint` | Card, Stack, Money, Badge, Sparkline |
98
+ | Setup checklist | `blocks-checklist-blueprint` | Progress, Accordion, IconBadge, Text, Button |
99
+ | Release timeline | `blocks-changelog-blueprint` | Timeline, MonoValue, Badge |
100
+ | Role/permission summary | `blocks-roles-blueprint` | Table, Badge, VisuallyHidden |
101
+ | Custom order summary | `cart-summary-blueprint` | Card, MetadataList, Money, Button, toast |
102
+
103
+ For example, retrieve the exact checklist source from the installed package:
104
+
105
+ ```bash
106
+ node <<'NODE'
107
+ const fs = require('node:fs')
108
+ const { recipes } = JSON.parse(fs.readFileSync('node_modules/themelia-ui/docs/generated/recipes.json', 'utf8'))
109
+ const recipe = recipes.find(item => item.id === 'blocks-checklist-blueprint')
110
+ if (!recipe) throw new Error('Recipe missing from this installed version')
111
+ process.stdout.write(recipe.code)
112
+ NODE
113
+ ```
114
+
115
+ These examples establish presentation seams, with fixed sample data and mock callbacks.
116
+ Keep the application's real permission model, calculations and completion state in its
117
+ own component. Use the [complete workflows](reference-workflows.md) when the task needs
118
+ submission, lookup, selection or retained-draft behavior beyond a presentation recipe.
119
+
120
+ For translated copy, use the selected module's typed strings and exported defaults. Product
121
+ labels and record content remain application copy. Test permissions, loading/empty/error
122
+ states, long labels, keyboard interaction, RTL and the adopted density in the real route;
123
+ the package's previews do not establish application acceptance.
@@ -10,9 +10,9 @@ The rungs are ordinary props; controlled state and callbacks when state exists;
10
10
  named slots; render props; exported parts; headless hooks; and complete recipes. Passive
11
11
  modules may stop at the first rung. Interaction features normally expose several.
12
12
 
13
- This table is derived from what each module declares, so it cannot describe a seam that
14
- was removed or miss one that was added. The table focuses on feature modules, where the
15
- higher rungs are meaningful; the columns start at accessors.
13
+ This table summarizes detected declarations and recipes. It is a discovery aid, not a
14
+ prop contract: open the selected module API for exact signatures and supported seams.
15
+ It focuses on feature modules; the columns start at accessors.
16
16
 
17
17
  | module | accessors | slots | render props | headless hook | partials | recipe |
18
18
  | --- | :-: | :-: | :-: | :-: | :-: | :-: |
@@ -41,7 +41,7 @@ higher rungs are meaningful; the columns start at accessors.
41
41
  | `features/table` | ● | ● | · | ● | ● | ● |
42
42
  | `features/theme-tweaker` | · | ● | · | ● | ● | ● |
43
43
 
44
- ## The four the plan names
44
+ ## Four feature examples
45
45
 
46
46
  Global Search, Filters, Comments and Data View are the demonstration cases, because a
47
47
  ladder that only works on a Badge proves nothing. Each is usable at three heights:
@@ -50,7 +50,7 @@ ladder that only works on a Badge proves nothing. Each is usable at three height
50
50
 
51
51
  **Ready-made** — `GlobalSearch`, dropped in with props and callbacks.
52
52
 
53
- **Region-customized** — 8 exported parts, so a region can be replaced without copying the whole: `GlobalSearchDialog`, `GlobalSearchEmptyState`, `GlobalSearchFooter`, `GlobalSearchIdleState`, `GlobalSearchInput`, and 2 more.
53
+ **Region-customized** — 7 other public exports to inspect for region customization: `GlobalSearchDialog`, `GlobalSearchEmptyState`, `GlobalSearchFooter`, `GlobalSearchIdleState`, `GlobalSearchInput`, and 2 more.
54
54
 
55
55
  **Headless** — `useGlobalSearch`, for presentation the parts cannot express.
56
56
 
@@ -58,7 +58,7 @@ ladder that only works on a Badge proves nothing. Each is usable at three height
58
58
 
59
59
  **Ready-made** — `FilterLayout`, dropped in with props and callbacks.
60
60
 
61
- **Region-customized** — 18 exported parts, so a region can be replaced without copying the whole: `AsyncFilterEditor`, `DateFilterEditor`, `FilterEditor`, `FilterErrorBoundary`, `FilterOperator`, and 12 more.
61
+ **Region-customized** — 17 other public exports to inspect for region customization: `AsyncFilterEditor`, `DateFilterEditor`, `FilterEditor`, `FilterErrorBoundary`, `FilterOperator`, and 12 more.
62
62
 
63
63
  **Headless** — `useAsyncOptions`, `useFilterCache`, `useFilterGroups`, `useFilters`, for presentation the parts cannot express.
64
64
 
@@ -66,7 +66,7 @@ ladder that only works on a Badge proves nothing. Each is usable at three height
66
66
 
67
67
  **Ready-made** — `Comments`, dropped in with props and callbacks.
68
68
 
69
- **Region-customized** — 6 exported parts, so a region can be replaced without copying the whole: `CommentAttachmentChip`, `CommentComposer`, `CommentContent`, `CommentItem`, `CommentTimeline`.
69
+ **Region-customized** — 5 other public exports to inspect for region customization: `CommentAttachmentChip`, `CommentComposer`, `CommentContent`, `CommentItem`, `CommentTimeline`.
70
70
 
71
71
  **Headless** — `useAttachmentUpload`, `useComments`, for presentation the parts cannot express.
72
72
 
@@ -74,6 +74,6 @@ ladder that only works on a Badge proves nothing. Each is usable at three height
74
74
 
75
75
  **Ready-made** — `DataView`, dropped in with props and callbacks.
76
76
 
77
- **Region-customized** — 6 exported parts, so a region can be replaced without copying the whole: `DataViewPagination`, `DataViewShell`, `DataViewTableFrame`, `DataViewToolbar`, `SavedViewTabs`.
77
+ **Region-customized** — 5 other public exports to inspect for region customization: `DataViewPagination`, `DataViewShell`, `DataViewTableFrame`, `DataViewToolbar`, `SavedViewTabs`.
78
78
 
79
79
  **Headless** — `useDataView`, for presentation the parts cannot express.
@@ -20,6 +20,10 @@ ready-made surface does not express the job.
20
20
  compose both; neither may import a block. The complete generated graph is in
21
21
  Profiles (`node_modules/themelia-ui/docs/generated/profiles.md`).
22
22
 
23
+ For structural blocks, spacing roles and responsive widths, use
24
+ [Structure and spacing](structure-and-spacing.md). For ready analytics, onboarding,
25
+ timeline and admin presentations, use [Choosing blocks](blocks.md).
26
+
23
27
  ## The composition ladder
24
28
 
25
29
  Use the lowest rung that solves the real requirement:
@@ -68,11 +72,8 @@ generic metadata, and an action without teaching the package what an invoice is:
68
72
 
69
73
  ```tsx compile
70
74
  import { Button } from "themelia-ui/base/buttons"
71
- import "themelia-ui/base/buttons.css"
72
75
  import { MetadataList } from "themelia-ui/base/display"
73
- import "themelia-ui/base/display.css"
74
76
  import { Page } from "themelia-ui/layout/page"
75
- import "themelia-ui/layout/page.css"
76
77
 
77
78
  type Invoice = { id: string; number: string; customerName: string; status: string; dueLabel: string }
78
79
  export function InvoiceDetail({ invoice, onCollectPayment }: {
@@ -111,10 +112,8 @@ callbacks, then open each linked module reference for the complete prop contract
111
112
  ### Dashboard
112
113
 
113
114
  ```tsx fragment — dashboard data and chart series come from the consuming application
114
- import { MetricGrid } from "themelia-ui/patterns/analytics"
115
- import "themelia-ui/patterns/analytics.css"
115
+ import { MetricGrid } from "themelia-ui/blocks/analytics"
116
116
  import { Page } from "themelia-ui/layout/page"
117
- import "themelia-ui/layout/page.css"
118
117
 
119
118
  <Page header={{ title: "Overview", description: periodLabel }}>
120
119
  <MetricGrid metrics={metrics} variant="card" />
@@ -128,7 +127,6 @@ window, permission-filtered figures, and what clicking a metric means.
128
127
 
129
128
  ```tsx fragment — columns, filters, records, paging, and mutations are consumer-owned
130
129
  import { DataView, DataViewPagination } from "themelia-ui/features/data-view"
131
- import "themelia-ui/features/data-view.css"
132
130
 
133
131
  <DataView
134
132
  data={records}
@@ -148,13 +146,18 @@ The invoice example above is the canonical shape: `Page` for route geometry,
148
146
  `MetadataList` and primitives for facts, then domain callbacks on package actions. Keep the
149
147
  record type out of the package.
150
148
 
149
+ When the task also fits the standard loading, empty, error and retry presentation, use
150
+ `ResourceShowShell` or `ResourceIndexShell` from `features/resource`. Those shells already
151
+ own a header, body and state replacement; do not duplicate that route header by wrapping
152
+ them in another Page. Page remains appropriate for a custom record arrangement where the
153
+ application already owns lifecycle feedback. Read the
154
+ resource API (`node_modules/themelia-ui/docs/generated/components/features--resource.md`) for state and slot contracts.
155
+
151
156
  ### Form
152
157
 
153
158
  ```tsx fragment — validation, field values, submit mutation, and product copy remain in the app
154
159
  import { FormActionsBar, FormField, FormSection, SubmitStateButton } from "themelia-ui/base/forms"
155
- import "themelia-ui/base/forms.css"
156
160
  import { Input } from "themelia-ui/base/text-inputs"
157
- import "themelia-ui/base/text-inputs.css"
158
161
 
159
162
  <FormSection title="Billing" description="Where invoices go.">
160
163
  <FormField label="Company" error={errors.company}>
@@ -171,7 +174,6 @@ adapter when React Hook Form already owns the state.
171
174
 
172
175
  ```tsx fragment — route matching and the router link renderer belong to the application
173
176
  import { AsideNavShell } from "themelia-ui/layout/settings"
174
- import "themelia-ui/layout/settings.css"
175
177
 
176
178
  <AsideNavShell
177
179
  title="Settings"
@@ -200,7 +202,7 @@ documentation tree whose vocabulary is not settings.
200
202
 
201
203
  Look up a specific task with the offline finder. Exact symbols take priority; `--explain`
202
204
  shows matched components, selection reasons and direct API anchors. `--json` exposes the
203
- same records for tools. Guidance marked `family` is a fallback, not a component-specific
205
+ same records for tools. Guidance marked `module` is a fallback, not a component-specific
204
206
  recommendation. An empty result means refine the query or inspect the catalogue, not invent
205
207
  an export.
206
208
 
@@ -218,15 +220,10 @@ the entered value; pending state prevents a second submission.
218
220
  ```tsx compile
219
221
  import { useState } from "react"
220
222
  import { Card, CardHeader, CardContent } from "themelia-ui/base/cards"
221
- import "themelia-ui/base/cards.css"
222
223
  import { FormField } from "themelia-ui/base/forms"
223
- import "themelia-ui/base/forms.css"
224
224
  import { Input } from "themelia-ui/base/text-inputs"
225
- import "themelia-ui/base/text-inputs.css"
226
225
  import { Button } from "themelia-ui/base/buttons"
227
- import "themelia-ui/base/buttons.css"
228
226
  import { Stack } from "themelia-ui/base/structure"
229
- import "themelia-ui/base/structure.css"
230
227
 
231
228
  export function RenameRecord({ initialName, save }: {
232
229
  initialName: string
@@ -248,7 +245,7 @@ export function RenameRecord({ initialName, save }: {
248
245
  catch { setError("Could not save. Your changes are still here; try again.") }
249
246
  finally { setPending(false) }
250
247
  }}>
251
- <Stack gap="md">
248
+ <Stack gap="sm">
252
249
  <FormField label="Name" error={error}>
253
250
  <Input value={name} disabled={pending} onChange={(event) => setName(event.target.value)} />
254
251
  </FormField>
@@ -270,7 +267,6 @@ filtering contract to your query layer instead of filtering an already paged sub
270
267
  ```tsx compile
271
268
  import { useState } from "react"
272
269
  import { DataView, type DataViewProps } from "themelia-ui/features/data-view"
273
- import "themelia-ui/features/data-view.css"
274
270
  import { FilterType, FilterOperator, type ActiveFilter, type FilterConfig } from "themelia-ui/features/filters"
275
271
 
276
272
  type RecordRow = { id: string; name: string; status: string }
@@ -298,7 +294,6 @@ edge fade through the public prop instead of adding a local mask or a second scr
298
294
 
299
295
  ```tsx compile
300
296
  import { Tabs, TabList, Tab, TabPanel } from "themelia-ui/base/navigation"
301
- import "themelia-ui/base/navigation.css"
302
297
 
303
298
  export function SettingsTabs() {
304
299
  return <Tabs defaultValue="general">
@@ -330,6 +325,92 @@ Only use states the selected module exposes; the API reference is authoritative.
330
325
  complete examples above type-check against the built package, but their application
331
326
  callbacks are illustrative: verify persistence and browser behaviour in your app.
332
327
 
328
+ ## Decide the owners before JSX
329
+
330
+ | Owner | Insets and type | Name and command scope | Parent responsibility |
331
+ | --- | --- | --- | --- |
332
+ | `Page` | Route geometry; header owns heading type | One route heading; route commands | Data, routing and independent subjects |
333
+ | `Card` / parts | Surface and content inset; header owns title/description | A bounded subject; commands for that subject | Arrange sibling subjects, choose heading level |
334
+ | `ContentBlock` | Title/content gap; `plain` has no inset, decorated surfaces add one | Supporting content within a subject | Decide whether another independent surface is warranted |
335
+ | `MetadataList` / values | Fact layout; labels and semantic value formatting | Read-only facts, not editable labels | Permission-filtered records and value descriptors |
336
+ | Analytics blocks | Quantity hierarchy and responsive metric arrangement | Measures and their period; metric actions | Query, unknown quantities and interpretation |
337
+ | `FormSection` | Section inset and heading; `flat` retains its padding | Editable region title; section-specific actions | Form, values, validation and completion |
338
+ | `FieldGroup` | Related control arrangement and support line | Fieldset/legend for a group; children retain distinct labels | Group disabled state and validation policy |
339
+ | `FormField` / binding | Label and support typography, control association | One editable field | Value, mutation and explicit name/ARIA overrides |
340
+ | `Stack` / `Grid` | Shared gaps; no new typography owner | Passive arrangement | Choose whether child insets already supply separation |
341
+ | `DataView` | Filter/table shell and responsive filter presentation | Resource-browser commands | Transport, page totals and selection lifetime |
342
+ | `DataTable` | Tabular interaction and table geometry | Column/row names and row commands | Filters, surrounding surface and server transport |
343
+ | `FilterLayout` / slots | Responsive controls and sheet | Filter controls only | Shared filter state; put export/create in action slots |
344
+
345
+ `surface="flat"` changes decoration, not the inset contract. Several flat FormSections
346
+ inside CardContent accumulate the card content inset and each section's inset. Use the
347
+ ready Card body when that separation is useful; use parts when you need a different region
348
+ arrangement. `Stack gap="none"` is appropriate when adjacent sections already own their
349
+ vertical separation. Do not compensate by assigning private padding variables or local type.
350
+
351
+ These are fragments; the [complete workflows](reference-workflows.md) include state,
352
+ helpers and submission behavior.
353
+
354
+ ```tsx fragment — fields and subject data come from the application
355
+ <Card title="Account details">
356
+ <Stack gap="none">
357
+ <FormSection surface="flat" title="Contact">{contactFields}</FormSection>
358
+ <FormSection surface="flat" title="Billing">{billingFields}</FormSection>
359
+ </Stack>
360
+ </Card>
361
+ ```
362
+
363
+ ```tsx fragment — parts expose the same owners; table rows and columns are application data
364
+ <Card>
365
+ <CardHeader title="Related records" titleLevel={2} />
366
+ <CardContent><DataTable data={rows} columns={columns} /></CardContent>
367
+ </Card>
368
+ ```
369
+
370
+ Use sibling Cards for independent subjects. Use ContentBlock inside a Card for supporting
371
+ prose. Repeating the route heading as each Card title adds no new subject. Repeating a
372
+ FormField label in a nested DisplayLabel creates competing names; supply the field label
373
+ once and let FormField associate it. A FieldGroup legend names the group, so its children's
374
+ labels should identify their distinct values. Labels on different records may repeat.
375
+
376
+ ```tsx fragment — each subject supplies its own application-owned facts
377
+ <Grid columns={{ base: 1, md: 2 }}>
378
+ <Card title="Contact"><MetadataList items={contactFacts} /></Card>
379
+ <Card title="Billing"><MetadataList items={billingFacts} /></Card>
380
+ </Grid>
381
+ ```
382
+
383
+ Grid owns separation between the sibling subjects and their responsive columns. Each Card
384
+ owns its header and body inset. For a resource browser, DataView already owns the filter/table
385
+ frame: put a Heading and supporting Text beside that frame instead of wrapping it in another
386
+ Card. The [resource workflow](reference-workflows.md) demonstrates a constrained parent;
387
+ the detail workflow demonstrates a secondary table within an independent titled subject.
388
+
389
+ Keep a record's command beside that record, a page command in the page header, and a
390
+ selected-row command in the table's bulk-action seam. Filter toolbars communicate query
391
+ state; export and create belong in the action slots. Applications decide destructive policy,
392
+ field-per-row arrangements and permission boundaries.
393
+
394
+ For server filtering, use `filtering.filterRows: ({ data }) => [...data]` when the server
395
+ already matched the page. DataView's default filtering is local and can remove valid server
396
+ matches whose search fields are absent from the visible columns. Use an app-owned cursor
397
+ footer when totals are unknown; never invent a page count. Drop to DataTable when the app
398
+ already owns the browser shell, filters and command placement.
399
+
400
+ Selector variants serve different lifecycles: SuggestionsCombobox uses the generic lookup
401
+ hook; AsyncCombobox accepts application-owned results; ResourceCombobox owns the ready
402
+ single-resource fetching presentation. Use `scopeKey` on SuggestionsCombobox or ResourceCombobox when workspace or permission context changes without a
403
+ query change. It invalidates lookup results, not the controlled selection. The application
404
+ clears a value that is invalid in the new context.
405
+
406
+ ```bash
407
+ node node_modules/themelia-ui/scripts/consumer/find-component.mjs "editable section" --context=existing-surface --context=editable --explain
408
+ node node_modules/themelia-ui/scripts/consumer/find-component.mjs "resource selector" --context=changing-scope --json
409
+ ```
410
+
411
+ Context matches are positive evidence. Uncurated exports remain visible with unknown
412
+ context coverage; they do not become recommendations by omission.
413
+
333
414
  ## When to wrap, compose, or contribute
334
415
 
335
416
  - **Wrap** when the product needs a stable local name or defaults around one module.