themelia-react-ui 2.0.1 → 2.0.2

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 (480) hide show
  1. package/CHANGELOG.md +307 -131
  2. package/README.md +28 -8
  3. package/THIRD_PARTY_NOTICES.md +13 -0
  4. package/dist/{accordion-B6a3vVgA.js → accordion-Cjb6sx0G.js} +14 -13
  5. package/dist/accordion-Cjb6sx0G.js.map +1 -0
  6. package/dist/action-menu-CllU52Mm.js +280 -0
  7. package/dist/action-menu-CllU52Mm.js.map +1 -0
  8. package/dist/affordance-geometry.generated-tF36bREk.js +140 -0
  9. package/dist/affordance-geometry.generated-tF36bREk.js.map +1 -0
  10. package/dist/ai-artifact-DvTwDVyL.js +1148 -0
  11. package/dist/ai-artifact-DvTwDVyL.js.map +1 -0
  12. package/dist/{app-shell-ZK5RWdo6.js → app-shell-C4FhvCqF.js} +5 -5
  13. package/dist/{app-shell-ZK5RWdo6.js.map → app-shell-C4FhvCqF.js.map} +1 -1
  14. package/dist/attachment-BxDfL2mw.js +246 -0
  15. package/dist/attachment-BxDfL2mw.js.map +1 -0
  16. package/dist/{auth-CYxKfo69.js → auth-ax2BqjrI.js} +58 -54
  17. package/dist/auth-ax2BqjrI.js.map +1 -0
  18. package/dist/{avatar-BBnEJIx8.js → avatar-DAPlDvhJ.js} +7 -7
  19. package/dist/avatar-DAPlDvhJ.js.map +1 -0
  20. package/dist/{badge-MrKVNzW9.js → badge-HpFqoqSY.js} +40 -40
  21. package/dist/badge-HpFqoqSY.js.map +1 -0
  22. package/dist/base/accordion.js +1 -1
  23. package/dist/base/action-menu.js +1 -1
  24. package/dist/base/attachment.js +1 -1
  25. package/dist/base/avatar.js +1 -1
  26. package/dist/base/badge.js +1 -1
  27. package/dist/base/batch-action-bar.js +1 -1
  28. package/dist/base/buttons.js +1 -1
  29. package/dist/base/cards.js +2 -2
  30. package/dist/base/carousel.js +40 -36
  31. package/dist/base/carousel.js.map +1 -1
  32. package/dist/base/cascader.js +92 -92
  33. package/dist/base/cascader.js.map +1 -1
  34. package/dist/base/chart.js +1 -1
  35. package/dist/base/choice-inputs.js +2 -2
  36. package/dist/base/code-block.js +1 -1
  37. package/dist/base/combobox.js +2 -2
  38. package/dist/base/command.js +1 -1
  39. package/dist/base/copyable.js +1 -1
  40. package/dist/base/date-pickers.js +2 -2
  41. package/dist/base/display.js +6 -6
  42. package/dist/base/feedback.js +3 -3
  43. package/dist/base/forms-numeric.js +1 -1
  44. package/dist/base/forms.js +2 -2
  45. package/dist/base/inline-edit.js +14 -14
  46. package/dist/base/inline-edit.js.map +1 -1
  47. package/dist/base/item.js +1 -1
  48. package/dist/base/media-gallery.js +1 -1
  49. package/dist/base/metadata-list.js +1 -1
  50. package/dist/base/navigation.js +6 -6
  51. package/dist/base/popover-menu.js +1 -1
  52. package/dist/base/popover.js +1 -1
  53. package/dist/base/qr-code.js +1 -1
  54. package/dist/base/repeaters.js +171 -176
  55. package/dist/base/repeaters.js.map +1 -1
  56. package/dist/base/sheet.js +1 -1
  57. package/dist/base/sidebar.js +1 -1
  58. package/dist/base/signature-pad.js +6 -6
  59. package/dist/base/skeleton.js +1 -1
  60. package/dist/base/spinner.js +79 -2
  61. package/dist/base/spinner.js.map +1 -0
  62. package/dist/base/structure.js +1 -1
  63. package/dist/base/table.js +1 -1
  64. package/dist/base/text-inputs.js +2 -2
  65. package/dist/base/toaster.js +46 -45
  66. package/dist/base/toaster.js.map +1 -1
  67. package/dist/base/tree.js +1 -1
  68. package/dist/base/upload-queue.js +1 -1
  69. package/dist/base/upload.js +3 -3
  70. package/dist/base/value-inputs.js +1 -1
  71. package/dist/{batch-action-bar-BZGDG-Si.js → batch-action-bar-DnUJ21NQ.js} +6 -5
  72. package/dist/batch-action-bar-DnUJ21NQ.js.map +1 -0
  73. package/dist/blocks/admin.js +42 -42
  74. package/dist/blocks/admin.js.map +1 -1
  75. package/dist/blocks/ai.js +260 -240
  76. package/dist/blocks/ai.js.map +1 -1
  77. package/dist/blocks/analytics/usage-card.js +1 -1
  78. package/dist/blocks/analytics.js +620 -585
  79. package/dist/blocks/analytics.js.map +1 -1
  80. package/dist/blocks/collaboration.js +1 -1
  81. package/dist/blocks/commerce/receipt.js +1 -1
  82. package/dist/blocks/commerce.js +1152 -1109
  83. package/dist/blocks/commerce.js.map +1 -1
  84. package/dist/blocks/data-display.js +2 -2
  85. package/dist/blocks/onboarding.js +48 -39
  86. package/dist/blocks/onboarding.js.map +1 -1
  87. package/dist/blocks/planning.js +13 -12
  88. package/dist/blocks/planning.js.map +1 -1
  89. package/dist/blocks/timelines.js +1 -1
  90. package/dist/{breadcrumbs-D5t7I023.js → breadcrumbs-C-oqs1sQ.js} +5 -5
  91. package/dist/breadcrumbs-C-oqs1sQ.js.map +1 -0
  92. package/dist/{button-QYwiyhD2.js → button-DVzspB_G.js} +2 -2
  93. package/dist/{button-QYwiyhD2.js.map → button-DVzspB_G.js.map} +1 -1
  94. package/dist/{buttons-SbIcm1HJ.js → buttons-DPZekJFu.js} +20 -15
  95. package/dist/buttons-DPZekJFu.js.map +1 -0
  96. package/dist/cards-BaBZR-AU.js +68 -0
  97. package/dist/cards-BaBZR-AU.js.map +1 -0
  98. package/dist/{chart-QfrARkXl.js → chart-ZOYyK2xG.js} +58 -55
  99. package/dist/chart-ZOYyK2xG.js.map +1 -0
  100. package/dist/{checkbox-DhB6K0bK.js → checkbox-AWIhNhmo.js} +2 -2
  101. package/dist/{checkbox-DhB6K0bK.js.map → checkbox-AWIhNhmo.js.map} +1 -1
  102. package/dist/{choice-inputs-t6w3ATNz.js → choice-inputs-CNHvARCJ.js} +49 -45
  103. package/dist/choice-inputs-CNHvARCJ.js.map +1 -0
  104. package/dist/{code-block-Dgbu-CU3.js → code-block-DeneBJR_.js} +8 -8
  105. package/dist/code-block-DeneBJR_.js.map +1 -0
  106. package/dist/{collapsible-D8AEGU1-.js → collapsible-C-_l4hpy.js} +3 -3
  107. package/dist/{collapsible-D8AEGU1-.js.map → collapsible-C-_l4hpy.js.map} +1 -1
  108. package/dist/{collection-content-uK16Grv0.js → collection-content-By56pLog.js} +3 -3
  109. package/dist/{collection-content-uK16Grv0.js.map → collection-content-By56pLog.js.map} +1 -1
  110. package/dist/combobox-C0EQW6dr.js +875 -0
  111. package/dist/combobox-C0EQW6dr.js.map +1 -0
  112. package/dist/combobox-xCQ2RMNE.js +309 -0
  113. package/dist/combobox-xCQ2RMNE.js.map +1 -0
  114. package/dist/{command-kNR20o7x.js → command-C25VMRII.js} +7 -7
  115. package/dist/{command-kNR20o7x.js.map → command-C25VMRII.js.map} +1 -1
  116. package/dist/{comments-BpDuCUUu.js → comments-BYYlTA8E.js} +114 -105
  117. package/dist/comments-BYYlTA8E.js.map +1 -0
  118. package/dist/components/base/badge/badge.recipes.d.ts +1 -1
  119. package/dist/components/base/buttons/loader-button.d.ts +2 -1
  120. package/dist/components/base/cards/card.recipes.d.ts +2 -3
  121. package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +3 -13
  122. package/dist/components/base/cards/smart-card.types.d.ts +11 -4
  123. package/dist/components/base/chart/chart.d.ts +2 -5
  124. package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
  125. package/dist/components/base/combobox/index.d.ts +30 -4
  126. package/dist/components/base/forms/form-sizing.d.ts +11 -3
  127. package/dist/components/base/navigation/pagination.d.ts +5 -2
  128. package/dist/components/base/popover/popover.recipes.d.ts +15 -1
  129. package/dist/components/base/table/index.d.ts +9 -2
  130. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  131. package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
  132. package/dist/components/blocks/ai/ai-shimmer/types.d.ts +3 -0
  133. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +3 -1
  134. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +16 -8
  135. package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
  136. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +5 -0
  137. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
  138. package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
  139. package/dist/components/features/appointment-calendar/index.d.ts +3 -0
  140. package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
  141. package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
  142. package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
  143. package/dist/components/features/combobox/types.d.ts +4 -0
  144. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  145. package/dist/components/features/rich-text-editor/index.d.ts +1 -1
  146. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +6 -0
  147. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +9 -1
  148. package/dist/components/features/table/table-header.d.ts +1 -1
  149. package/dist/components/features/table/table.strings.d.ts +55 -1
  150. package/dist/components/features/table/table.types.d.ts +17 -4
  151. package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
  152. package/dist/components/primitives/number.d.ts +4 -2
  153. package/dist/components/primitives/value.d.ts +3 -1
  154. package/dist/components/typography/text-link.d.ts +4 -0
  155. package/dist/components/ui/combobox.d.ts +6 -2
  156. package/dist/components/ui/item.d.ts +8 -8
  157. package/dist/components/ui/tabs.d.ts +1 -1
  158. package/dist/{containers-DmWiJa2I.js → containers-Mu1LMGV1.js} +2 -2
  159. package/dist/{containers-DmWiJa2I.js.map → containers-Mu1LMGV1.js.map} +1 -1
  160. package/dist/{copyable-B3Gwgdqc.js → copyable-ClBuk_UK.js} +4 -4
  161. package/dist/{copyable-B3Gwgdqc.js.map → copyable-ClBuk_UK.js.map} +1 -1
  162. package/dist/{data-display-DafIvCl5.js → data-display-DT_khPl_.js} +98 -87
  163. package/dist/data-display-DT_khPl_.js.map +1 -0
  164. package/dist/{date-BgK3bTdo.js → date-DCrsDTZc.js} +5 -5
  165. package/dist/{date-BgK3bTdo.js.map → date-DCrsDTZc.js.map} +1 -1
  166. package/dist/{date-picker-CF-DtUpF.js → date-picker-ay0Pha_a.js} +594 -593
  167. package/dist/date-picker-ay0Pha_a.js.map +1 -0
  168. package/dist/date-pickers-Ccw8DL2b.js +175 -0
  169. package/dist/date-pickers-Ccw8DL2b.js.map +1 -0
  170. package/dist/{display-DsQTVzMz.js → display-hAc1HjpI.js} +49 -49
  171. package/dist/display-hAc1HjpI.js.map +1 -0
  172. package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
  173. package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
  174. package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
  175. package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
  176. package/dist/features/activities.js +398 -375
  177. package/dist/features/activities.js.map +1 -1
  178. package/dist/features/ai-chat.js +188 -179
  179. package/dist/features/ai-chat.js.map +1 -1
  180. package/dist/features/appointment-calendar.js +683 -0
  181. package/dist/features/appointment-calendar.js.map +1 -0
  182. package/dist/features/async-preview.js +109 -107
  183. package/dist/features/async-preview.js.map +1 -1
  184. package/dist/features/combobox.js +1 -1
  185. package/dist/features/comments.js +1 -1
  186. package/dist/features/data-view.js +137 -137
  187. package/dist/features/data-view.js.map +1 -1
  188. package/dist/features/email-composer.js +255 -255
  189. package/dist/features/email-composer.js.map +1 -1
  190. package/dist/features/event-calendar.js +254 -248
  191. package/dist/features/event-calendar.js.map +1 -1
  192. package/dist/features/filters.js +1 -1
  193. package/dist/features/global-search.js +35 -32
  194. package/dist/features/global-search.js.map +1 -1
  195. package/dist/features/kanban.js +118 -117
  196. package/dist/features/kanban.js.map +1 -1
  197. package/dist/features/map.js +233 -231
  198. package/dist/features/map.js.map +1 -1
  199. package/dist/features/media-library.js +789 -775
  200. package/dist/features/media-library.js.map +1 -1
  201. package/dist/features/mentions.js +1 -1
  202. package/dist/features/overlays.js +1 -1
  203. package/dist/features/products.js +922 -902
  204. package/dist/features/products.js.map +1 -1
  205. package/dist/features/questionnaire.js +28 -24
  206. package/dist/features/questionnaire.js.map +1 -1
  207. package/dist/features/resource-assignment.js +18 -15
  208. package/dist/features/resource-assignment.js.map +1 -1
  209. package/dist/features/resource.js +12 -12
  210. package/dist/features/resource.js.map +1 -1
  211. package/dist/features/rich-text-editor.js +2 -2
  212. package/dist/features/schema-form.js +15 -13
  213. package/dist/features/schema-form.js.map +1 -1
  214. package/dist/features/suggestions.js +3 -3
  215. package/dist/features/sync.js +11 -5
  216. package/dist/features/sync.js.map +1 -1
  217. package/dist/features/table.js +1 -1
  218. package/dist/features/theme-tweaker.js +493 -489
  219. package/dist/features/theme-tweaker.js.map +1 -1
  220. package/dist/feedback-BYIhtitP.js +239 -0
  221. package/dist/feedback-BYIhtitP.js.map +1 -0
  222. package/dist/{field-affordance-recipes-qQeIf4lG.js → field-affordance-recipes-DZhnIL_Y.js} +11 -18
  223. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +1 -0
  224. package/dist/{filters-BkHH53uv.js → filters-BGfvjP4d.js} +589 -580
  225. package/dist/filters-BGfvjP4d.js.map +1 -0
  226. package/dist/{form-field-DUt4UxSV.js → form-field-CwH9y77i.js} +6 -5
  227. package/dist/form-field-CwH9y77i.js.map +1 -0
  228. package/dist/{form-sizing-By94KzXE.js → form-sizing-BdP_Mf5p.js} +39 -44
  229. package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
  230. package/dist/{forms-Bzha-Y3B.js → forms-B9G_xwzi.js} +8 -8
  231. package/dist/{forms-Bzha-Y3B.js.map → forms-B9G_xwzi.js.map} +1 -1
  232. package/dist/{forms-numeric-C0bvjRPZ.js → forms-numeric-B_jraJaQ.js} +309 -309
  233. package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
  234. package/dist/{header-BOefOKd1.js → header-CGXuhcRm.js} +160 -153
  235. package/dist/header-CGXuhcRm.js.map +1 -0
  236. package/dist/{hooks-9k_TtmKh.js → hooks-Dkz0K2WT.js} +2 -2
  237. package/dist/{hooks-9k_TtmKh.js.map → hooks-Dkz0K2WT.js.map} +1 -1
  238. package/dist/{icon-badge-CAuKupo9.js → icon-badge-DYKIwvOV.js} +4 -4
  239. package/dist/{icon-badge-CAuKupo9.js.map → icon-badge-DYKIwvOV.js.map} +1 -1
  240. package/dist/index.js +3 -3
  241. package/dist/input-CZw8iU99.js +21 -0
  242. package/dist/input-CZw8iU99.js.map +1 -0
  243. package/dist/input-DQdEd0YD.js +263 -0
  244. package/dist/input-DQdEd0YD.js.map +1 -0
  245. package/dist/{interaction-recipes-CHr0dJUs.js → interaction-recipes-XR9ZpVYL.js} +2 -1
  246. package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
  247. package/dist/item-K5_ghvze.js +275 -0
  248. package/dist/item-K5_ghvze.js.map +1 -0
  249. package/dist/layout/app-shell.js +1 -1
  250. package/dist/layout/auth.js +1 -1
  251. package/dist/layout/containers.js +1 -1
  252. package/dist/layout/header.js +1 -1
  253. package/dist/layout/hooks.js +1 -1
  254. package/dist/layout/navigation.js +1 -1
  255. package/dist/layout/page.js +1 -1
  256. package/dist/layout/settings.js +1 -1
  257. package/dist/layout/sidebar.js +2 -2
  258. package/dist/layout/workspace.js +1 -1
  259. package/dist/layout.js +10 -10
  260. package/dist/lib/affordance-geometry.generated.d.ts +71 -0
  261. package/dist/lib/editable-text-recipe.d.ts +4 -4
  262. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  263. package/dist/lib/interaction-recipes.d.ts +5 -0
  264. package/dist/lib/theme-mode-css.d.ts +7 -0
  265. package/dist/lib/tone-recipes.d.ts +8 -0
  266. package/dist/lib/ui-provider/types.d.ts +2 -2
  267. package/dist/lib/utils.js +1 -1
  268. package/dist/{media-gallery-DcTtAaeC.js → media-gallery-3zIVLMWH.js} +8 -8
  269. package/dist/media-gallery-3zIVLMWH.js.map +1 -0
  270. package/dist/{mentions-D-uyCh01.js → mentions-utuUvH1K.js} +144 -142
  271. package/dist/mentions-utuUvH1K.js.map +1 -0
  272. package/dist/{message-CdHgIWKf.js → message-DZ_ruyUV.js} +6 -5
  273. package/dist/message-DZ_ruyUV.js.map +1 -0
  274. package/dist/{metadata-list-X5rYAKSB.js → metadata-list-8N16ZMW_.js} +130 -119
  275. package/dist/metadata-list-8N16ZMW_.js.map +1 -0
  276. package/dist/{navigation-D3KwXmaq.js → navigation-Bnotn4AQ.js} +19 -19
  277. package/dist/navigation-Bnotn4AQ.js.map +1 -0
  278. package/dist/{navigation-HJf5zxlH.js → navigation-BzhHI3lo.js} +36 -35
  279. package/dist/navigation-BzhHI3lo.js.map +1 -0
  280. package/dist/{navigation-row-recipes-BVowojQw.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
  281. package/dist/{navigation-row-recipes-BVowojQw.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
  282. package/dist/{number-DMhe-Vsk.js → number-DbV1Dija.js} +36 -34
  283. package/dist/{number-DMhe-Vsk.js.map → number-DbV1Dija.js.map} +1 -1
  284. package/dist/{overflow-tab-bar-sQHXLlwQ.js → overflow-tab-bar-CWY7Nogn.js} +105 -103
  285. package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
  286. package/dist/{overlays-I0axtYA6.js → overlays-DNWmZrJ4.js} +14 -12
  287. package/dist/overlays-DNWmZrJ4.js.map +1 -0
  288. package/dist/{page-B5dTH9gE.js → page-Bgl1F560.js} +8 -8
  289. package/dist/{page-B5dTH9gE.js.map → page-Bgl1F560.js.map} +1 -1
  290. package/dist/{page-header-commands-DjzFEq3E.js → page-header-commands-DOb6WsfD.js} +5 -5
  291. package/dist/{page-header-commands-DjzFEq3E.js.map → page-header-commands-DOb6WsfD.js.map} +1 -1
  292. package/dist/pagination-BL25hu2s.js +158 -0
  293. package/dist/pagination-BL25hu2s.js.map +1 -0
  294. package/dist/{popover-Di55PyAI.js → popover-7_m66eYW.js} +8 -7
  295. package/dist/{popover-Di55PyAI.js.map → popover-7_m66eYW.js.map} +1 -1
  296. package/dist/popover-menu-B9WWygpa.js +100 -0
  297. package/dist/popover-menu-B9WWygpa.js.map +1 -0
  298. package/dist/{popover.recipes-Bdyhj2db.js → popover.recipes-D3j8R8Yp.js} +17 -10
  299. package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
  300. package/dist/{primitives-B-CkiEMU.js → primitives-BFK08r9M.js} +45 -44
  301. package/dist/primitives-BFK08r9M.js.map +1 -0
  302. package/dist/primitives.js +4 -4
  303. package/dist/{progress-rnS8-uAW.js → progress-B1VnCT0K.js} +5 -5
  304. package/dist/{progress-rnS8-uAW.js.map → progress-B1VnCT0K.js.map} +1 -1
  305. package/dist/{receipt-D0oswZ0p.js → receipt-BVSOH3Xo.js} +9 -6
  306. package/dist/{receipt-D0oswZ0p.js.map → receipt-BVSOH3Xo.js.map} +1 -1
  307. package/dist/{rich-text-DvGulsNJ.js → rich-text-GOUyKQ-s.js} +3 -3
  308. package/dist/{rich-text-DvGulsNJ.js.map → rich-text-GOUyKQ-s.js.map} +1 -1
  309. package/dist/{rich-text-editor-sMU_Scqm.js → rich-text-editor-cRLC-eBK.js} +418 -426
  310. package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
  311. package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
  312. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +1 -0
  313. package/dist/{scroll-area-Bt_vXY2b.js → scroll-area-DcI-M1UT.js} +2 -2
  314. package/dist/{scroll-area-Bt_vXY2b.js.map → scroll-area-DcI-M1UT.js.map} +1 -1
  315. package/dist/{separator-C8DlRGwF.js → separator-BDV-Y648.js} +3 -3
  316. package/dist/{separator-C8DlRGwF.js.map → separator-BDV-Y648.js.map} +1 -1
  317. package/dist/{separator-CYHnjsAb.js → separator-Bom7NsGO.js} +2 -2
  318. package/dist/{separator-CYHnjsAb.js.map → separator-Bom7NsGO.js.map} +1 -1
  319. package/dist/services/actions.js +1 -1
  320. package/dist/{settings-CQW3b-Cu.js → settings-ybnjVwbd.js} +20 -19
  321. package/dist/settings-ybnjVwbd.js.map +1 -0
  322. package/dist/{sheet-4SEvVYzA.js → sheet-CGpB3omz.js} +8 -7
  323. package/dist/{sheet-4SEvVYzA.js.map → sheet-CGpB3omz.js.map} +1 -1
  324. package/dist/{sidebar-d7Dg80ln.js → sidebar-A0ElHINE.js} +14 -13
  325. package/dist/{sidebar-d7Dg80ln.js.map → sidebar-A0ElHINE.js.map} +1 -1
  326. package/dist/{sidebar-C7WWR29L.js → sidebar-CPx_7YBa.js} +183 -182
  327. package/dist/sidebar-CPx_7YBa.js.map +1 -0
  328. package/dist/{skeleton-Cz890JZF.js → skeleton-Byjnt7qr.js} +3 -3
  329. package/dist/{skeleton-Cz890JZF.js.map → skeleton-Byjnt7qr.js.map} +1 -1
  330. package/dist/smart-card-DiC5aac3.js +604 -0
  331. package/dist/smart-card-DiC5aac3.js.map +1 -0
  332. package/dist/{structure-DC2dygdA.js → structure-BmisBK-3.js} +2 -2
  333. package/dist/{structure-DC2dygdA.js.map → structure-BmisBK-3.js.map} +1 -1
  334. package/dist/style.css +1 -1
  335. package/dist/table-BweFy_P9.js +1530 -0
  336. package/dist/table-BweFy_P9.js.map +1 -0
  337. package/dist/{table-CIKyLUsy.js → table-DsfzoUia.js} +75 -63
  338. package/dist/table-DsfzoUia.js.map +1 -0
  339. package/dist/{tabs-DwBJfjxX.js → tabs-CDocW5D1.js} +14 -13
  340. package/dist/tabs-CDocW5D1.js.map +1 -0
  341. package/dist/text-inputs-f9Ia-aCi.js +353 -0
  342. package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
  343. package/dist/theme-mode-css-BB-_RYab.js +14 -0
  344. package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
  345. package/dist/theme-scope-BJ6eE2xt.js +50 -0
  346. package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
  347. package/dist/theme.css +285 -228
  348. package/dist/themes/green.css +16 -12
  349. package/dist/timelines-CwM_9IhD.js +457 -0
  350. package/dist/timelines-CwM_9IhD.js.map +1 -0
  351. package/dist/{tone-recipes-CPoExcTE.js → tone-recipes-BPsRAvhu.js} +5 -2
  352. package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
  353. package/dist/{tooltip-CsfgrfS7.js → tooltip-yiRJUFjp.js} +4 -4
  354. package/dist/{tooltip-CsfgrfS7.js.map → tooltip-yiRJUFjp.js.map} +1 -1
  355. package/dist/{tree-BiKhg8AY.js → tree-WnKQzwbq.js} +9 -9
  356. package/dist/{tree-BiKhg8AY.js.map → tree-WnKQzwbq.js.map} +1 -1
  357. package/dist/typography/rich-text.js +1 -1
  358. package/dist/{typography-DTRkE9zL.js → typography-UTnveOEy.js} +6 -6
  359. package/dist/typography-UTnveOEy.js.map +1 -0
  360. package/dist/typography.js +2 -2
  361. package/dist/{ui-provider-1D_NSYzO.js → ui-provider-C_U0Xma4.js} +3 -3
  362. package/dist/ui-provider-C_U0Xma4.js.map +1 -0
  363. package/dist/ui-provider.js +2 -2
  364. package/dist/{upload-BO8-CLN6.js → upload-CXyxmQBP.js} +13 -12
  365. package/dist/upload-CXyxmQBP.js.map +1 -0
  366. package/dist/{upload-queue-EOC8g1gf.js → upload-queue-Boscubn9.js} +11 -9
  367. package/dist/upload-queue-Boscubn9.js.map +1 -0
  368. package/dist/{usage-card-obRaBskq.js → usage-card-BhO5eqkX.js} +53 -37
  369. package/dist/usage-card-BhO5eqkX.js.map +1 -0
  370. package/dist/{utils-l5LpDw2z.js → utils-BRhFDwuU.js} +59 -44
  371. package/dist/utils-BRhFDwuU.js.map +1 -0
  372. package/dist/{value-inputs-TAYMX111.js → value-inputs-DXPDjvBU.js} +268 -252
  373. package/dist/value-inputs-DXPDjvBU.js.map +1 -0
  374. package/dist/{value-typography-b8wpz1eX.js → value-typography-BP8OG6h5.js} +2 -2
  375. package/dist/{value-typography-b8wpz1eX.js.map → value-typography-BP8OG6h5.js.map} +1 -1
  376. package/dist/{workspace-DH0v0KcB.js → workspace-Cdrg7k9f.js} +34 -33
  377. package/dist/workspace-Cdrg7k9f.js.map +1 -0
  378. package/docs/consumer-skill/SKILL.md +2 -2
  379. package/docs/consumer-skill/references/agents-md.md +1 -1
  380. package/docs/consumer-skill/references/composition.md +8 -6
  381. package/docs/consumer-skill/references/integration.md +4 -3
  382. package/docs/consumer-skill/references/public-api.json +105 -2
  383. package/docs/consumer-skill/references/review.md +7 -0
  384. package/docs/consumer-skill/references/theming.md +71 -6
  385. package/docs/consumer-skill/references/tokens.json +1 -1
  386. package/docs/consumer-skill/references/workflows.md +25 -0
  387. package/docs/consumer-skill/scripts/composition-policy.mjs +3 -2
  388. package/docs/consumer-skill/scripts/surface-policy.mjs +11 -0
  389. package/package.json +8 -4
  390. package/dist/accordion-B6a3vVgA.js.map +0 -1
  391. package/dist/action-menu-TzCoSlwL.js +0 -280
  392. package/dist/action-menu-TzCoSlwL.js.map +0 -1
  393. package/dist/affordance-geometry.generated-B5iu-Mkr.js +0 -69
  394. package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +0 -1
  395. package/dist/ai-artifact-BMJdv-6q.js +0 -1115
  396. package/dist/ai-artifact-BMJdv-6q.js.map +0 -1
  397. package/dist/attachment-BtfhGm8i.js +0 -245
  398. package/dist/attachment-BtfhGm8i.js.map +0 -1
  399. package/dist/auth-CYxKfo69.js.map +0 -1
  400. package/dist/avatar-BBnEJIx8.js.map +0 -1
  401. package/dist/badge-MrKVNzW9.js.map +0 -1
  402. package/dist/batch-action-bar-BZGDG-Si.js.map +0 -1
  403. package/dist/breadcrumbs-D5t7I023.js.map +0 -1
  404. package/dist/buttons-SbIcm1HJ.js.map +0 -1
  405. package/dist/cards-CiiHpKYd.js +0 -66
  406. package/dist/cards-CiiHpKYd.js.map +0 -1
  407. package/dist/chart-QfrARkXl.js.map +0 -1
  408. package/dist/choice-inputs-t6w3ATNz.js.map +0 -1
  409. package/dist/code-block-Dgbu-CU3.js.map +0 -1
  410. package/dist/combobox-2Ic8N9bL.js +0 -278
  411. package/dist/combobox-2Ic8N9bL.js.map +0 -1
  412. package/dist/combobox-DLl0bfiq.js +0 -867
  413. package/dist/combobox-DLl0bfiq.js.map +0 -1
  414. package/dist/comments-BpDuCUUu.js.map +0 -1
  415. package/dist/data-display-DafIvCl5.js.map +0 -1
  416. package/dist/date-picker-CF-DtUpF.js.map +0 -1
  417. package/dist/date-pickers-BmzxJl5l.js +0 -174
  418. package/dist/date-pickers-BmzxJl5l.js.map +0 -1
  419. package/dist/display-DsQTVzMz.js.map +0 -1
  420. package/dist/dropdown-menu-E2qmdC7o.js +0 -193
  421. package/dist/dropdown-menu-E2qmdC7o.js.map +0 -1
  422. package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
  423. package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
  424. package/dist/feedback-qNuMBtRH.js +0 -233
  425. package/dist/feedback-qNuMBtRH.js.map +0 -1
  426. package/dist/field-affordance-recipes-qQeIf4lG.js.map +0 -1
  427. package/dist/filters-BkHH53uv.js.map +0 -1
  428. package/dist/form-field-DUt4UxSV.js.map +0 -1
  429. package/dist/form-sizing-By94KzXE.js.map +0 -1
  430. package/dist/forms-numeric-C0bvjRPZ.js.map +0 -1
  431. package/dist/header-BOefOKd1.js.map +0 -1
  432. package/dist/input-DWhBBBww.js +0 -262
  433. package/dist/input-DWhBBBww.js.map +0 -1
  434. package/dist/input-Ddi_LSYv.js +0 -20
  435. package/dist/input-Ddi_LSYv.js.map +0 -1
  436. package/dist/interaction-recipes-CHr0dJUs.js.map +0 -1
  437. package/dist/item-DEmDiTlD.js +0 -265
  438. package/dist/item-DEmDiTlD.js.map +0 -1
  439. package/dist/media-gallery-DcTtAaeC.js.map +0 -1
  440. package/dist/mentions-D-uyCh01.js.map +0 -1
  441. package/dist/message-CdHgIWKf.js.map +0 -1
  442. package/dist/metadata-list-X5rYAKSB.js.map +0 -1
  443. package/dist/navigation-D3KwXmaq.js.map +0 -1
  444. package/dist/navigation-HJf5zxlH.js.map +0 -1
  445. package/dist/overflow-tab-bar-sQHXLlwQ.js.map +0 -1
  446. package/dist/overlays-I0axtYA6.js.map +0 -1
  447. package/dist/pagination-3bPA_a6K.js +0 -149
  448. package/dist/pagination-3bPA_a6K.js.map +0 -1
  449. package/dist/popover-menu-B71Tn2Qz.js +0 -99
  450. package/dist/popover-menu-B71Tn2Qz.js.map +0 -1
  451. package/dist/popover.recipes-Bdyhj2db.js.map +0 -1
  452. package/dist/primitives-B-CkiEMU.js.map +0 -1
  453. package/dist/rich-text-editor-sMU_Scqm.js.map +0 -1
  454. package/dist/rich-text-editor.recipes-CadiF_Uu.js +0 -88
  455. package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +0 -1
  456. package/dist/settings-CQW3b-Cu.js.map +0 -1
  457. package/dist/sidebar-C7WWR29L.js.map +0 -1
  458. package/dist/smart-card-lFKxn5Hu.js +0 -595
  459. package/dist/smart-card-lFKxn5Hu.js.map +0 -1
  460. package/dist/spinner-fa3h1Aif.js +0 -80
  461. package/dist/spinner-fa3h1Aif.js.map +0 -1
  462. package/dist/table-CIKyLUsy.js.map +0 -1
  463. package/dist/table-CrcLN9Io.js +0 -1458
  464. package/dist/table-CrcLN9Io.js.map +0 -1
  465. package/dist/tabs-DwBJfjxX.js.map +0 -1
  466. package/dist/text-inputs-aaK9wcDT.js +0 -326
  467. package/dist/text-inputs-aaK9wcDT.js.map +0 -1
  468. package/dist/theme-scope-kStaAer0.js +0 -39
  469. package/dist/theme-scope-kStaAer0.js.map +0 -1
  470. package/dist/timelines-C_SBwHNP.js +0 -442
  471. package/dist/timelines-C_SBwHNP.js.map +0 -1
  472. package/dist/tone-recipes-CPoExcTE.js.map +0 -1
  473. package/dist/typography-DTRkE9zL.js.map +0 -1
  474. package/dist/ui-provider-1D_NSYzO.js.map +0 -1
  475. package/dist/upload-BO8-CLN6.js.map +0 -1
  476. package/dist/upload-queue-EOC8g1gf.js.map +0 -1
  477. package/dist/usage-card-obRaBskq.js.map +0 -1
  478. package/dist/utils-l5LpDw2z.js.map +0 -1
  479. package/dist/value-inputs-TAYMX111.js.map +0 -1
  480. package/dist/workspace-DH0v0KcB.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,311 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.2 — 2026-10-21
4
+
5
+ Card dividers on by default, one rule per overlay region boundary, the
6
+ appointment calendar, and the fixes and shared recipes that followed 2.0.1. No
7
+ public export or prop is removed. Base UI is now the patched
8
+ `@base-ui/react@1.8.0-kpo.2` archive (see "Upgrading from 2.0.1"). Additions:
9
+ `align` on ConfirmDialog and ActionDialog with UIProvider overlay defaults;
10
+ `selecting`, `defaultSelecting`, `onSelectingChange`, `onItemOpen` and
11
+ `bulkActions` on MediaLibrary; `useRichTextImages` and `images` on RichTextEditor
12
+ and RichText; `bodyHeight` on RichTextEditor; the
13
+ `themelia-react-ui/base/metadata-list`, `themelia-react-ui/base/batch-action-bar`
14
+ and `themelia-react-ui/features/appointment-calendar` entrypoints; an optional
15
+ `fontFamily` on `signaturePadToSVG`; the order blocks, `SummaryPanel` and
16
+ `AmountRow` in `blocks/commerce`; `valueAlign` on MetadataList; `defaultValue`,
17
+ `name` and ARIA props on TagsInput; `density` on Table; `variant="chips"` on
18
+ TabsList; `valueWeight` on InlineStat and `size` on AiShimmer; screen-reader
19
+ label strings on Combobox, AsyncResourceCombobox, DataTable and MediaLibrary.
20
+ `features/sync`, the standalone product region cards, the `blocks/data-display`
21
+ MetadataList exports and `ActivityRow` `moreLabel` are deprecated.
22
+
23
+ ### Audit update — 2026-10-24
24
+
25
+ - Layouts, blocks and features pair painted surfaces with their foregrounds;
26
+ owned primary copy inherits those roles while secondary, status and custom
27
+ content keep their intended colors. Existing sizing, spacing and radius
28
+ defaults remain unchanged.
29
+ - Bordered auth/workspace, metric, media/chat and event frames preserve their
30
+ geometry without a consumer CSS reset. Rich editor controls dim once, and a
31
+ disabled AI prompt suspends staged and custom actions as well as its input.
32
+ - Narrow checklist titles stay beside their status markers. Media detail regions
33
+ retain their content height and scroll in order without overlap. Flat Card
34
+ sections inherit their containing surface; search previews pair canvas ink.
35
+ - Owned field labels follow their containing surface across forms, helper fields,
36
+ repeaters, filters and questionnaires; the public Label defaults are preserved.
37
+ - MetadataList labels and primary values follow their containing surface in all
38
+ layouts; explicit secondary, link, status and custom content retain their roles.
39
+ Product catalogue viewports preserve native keyboard focus clearance.
40
+ - Compact table pagination resolves one size across its anatomy. Muted values
41
+ use the shared secondary role without an extra opacity tier; source and
42
+ consumer composition checks reject faded typography and primitive copy.
43
+ - Generated brand palettes retain the centralized input and focus roles instead
44
+ of replacing their contrast with a weak brand wash.
45
+ - Base composition now consistently follows the foreground of its card or
46
+ popover surface, including owned titles, values, upload copy and chart
47
+ tooltips. Native hosts retain their geometry without a consumer CSS reset.
48
+ - Card keeps full-width pre-title context, omits empty body regions, and reveals
49
+ clipped actions when keyboard focus enters them. CardSkeleton follows the
50
+ provider surface and accepts an optional `surface` override.
51
+ - Pagination resolves one shared size for links, previous/next and ellipsis;
52
+ PaginationEllipsis also accepts an optional `size`. Attachment focus corners
53
+ match their Item shell, and Empty media follows the existing media roots.
54
+ - Nested disabled content dims once; compound field affordances respect pending
55
+ and read-only state, including PhoneInput blur normalization. Carousel
56
+ preserves descendant editing keys, uncontrolled SliderField values stay
57
+ synchronized, and overflow links retain native href and keyboard behavior.
58
+ - Resting control boundaries now meet the shared 3:1 contrast floor, including
59
+ filled fields on supported surfaces. Divider and focus roles remain separate.
60
+ - Nested light/dark state utilities follow the nearest explicit mode boundary.
61
+ ThemeScope rebinds default aliases for explicitly supplied source roots while
62
+ preserving deliberate CSS/inline role overrides. This behavior uses container
63
+ style queries: Chromium 111+, Safari 18.1+ and Firefox 151+.
64
+ - Chart series and scoped theme exports follow the same mode boundary. Scoped
65
+ selector helpers add optional `modeScope` metadata while retaining their
66
+ existing selector strings. Package defaults use the theme cascade layer so
67
+ explicit utility classes can override them on a mode boundary.
68
+ - Enlarged editable typography can grow its shared field frame and reduce spare
69
+ vertical padding. Default control sizes and radius roles remain unchanged.
70
+ - Fullscreen table menus and dialogs retain keyboard ownership; sorted headers
71
+ expose direction/precedence; nested cell controls no longer activate the row.
72
+ Row callbacks also support Enter and Space with visible keyboard focus.
73
+ - Maintainer and packaged consumer guidance now cover surface inheritance at
74
+ owned text/label/value leaves, semantic text roles without extra opacity,
75
+ once-only disabled treatment, and stable post-interaction visual evidence.
76
+ The MetadataList evaluation uses its current base entrypoint.
77
+
78
+ ### Upgrading from 2.0.1
79
+
80
+ - **Patched Base UI peer.** The `@base-ui/react` peer is pinned to
81
+ `1.8.0-kpo.2`, a patched build that adds `Combobox.Root.dismissLabel` and keeps
82
+ focus restored inside a parent popup when a nested popup closes. It is not on
83
+ the public registry: install the companion `base-ui-react-1.8.0-kpo.2.tgz`
84
+ beside this package, as the README describes.
85
+ - **MetadataList moved to base.** Import `MetadataList`, its item types and
86
+ default strings from `themelia-react-ui/base/metadata-list`. The
87
+ `themelia-react-ui/blocks/data-display` re-exports keep working and are
88
+ deprecated. Labels render semibold.
89
+ - **MediaLibrary opens before it selects.** Activating an asset (click, Enter,
90
+ Space) calls `onItemOpen` or shows the details panel. Selection is an explicit
91
+ mode: `selecting`, `defaultSelecting` and `onSelectingChange`. Picker dialogs
92
+ start selecting; pass `defaultSelecting` where a library relied on selecting
93
+ by default.
94
+ - **ConfirmDialog is centred.** ConfirmDialog and ActionDialog accept
95
+ `align: 'start' | 'center'`, resolved from the prop, then the UIProvider
96
+ `overlay.defaultConfirmAlign` / `overlay.defaultDialogAlign` defaults, then
97
+ center for ConfirmDialog and start for ActionDialog.
98
+ - **Deprecated: `themelia-react-ui/features/sync`.** `SyncRangeDialogForm` is
99
+ application-specific; use `SchemaForm` with `radio-cards` and
100
+ `checkbox-cards` fields. The entrypoint still ships.
101
+ - **Deprecated: standalone product region cards and row menus.** Render them
102
+ through `ProductOverview` slots and the `renderOptionActions` /
103
+ `renderVariantActions` options. They stay exported.
104
+ - **Deprecated: `ActivityRow` `moreLabel`.** The collapsed metadata preview it
105
+ labelled is gone; secondary detail opens with the details disclosure.
106
+ - **Selection bars are a `BatchActionBar`.** DataTable's default selection
107
+ toolbar now docks to the bottom of the viewport (`floating`); pass
108
+ `selectionToolbarPlacement="inline"` to keep it in the table. Its summary and
109
+ the new `totalRowCount` prop default to `pagination.total`, so server-paginated
110
+ tables count the whole result. Product variant tables show an inline bar only
111
+ while variants are selected; `renderBulkActions` now replaces the default
112
+ commands, as documented (return `null` to keep them), and Delete no longer
113
+ repeats the count.
114
+ - **MetadataList rows.** `layout="rows"` draws rules only with `itemSeparator`,
115
+ and values start their column on `2fr/3fr` tracks. Pass `valueAlign="end"` for
116
+ the previous right-aligned figures, such as money columns.
117
+ - **TagsInput.** Chips sit inside the field, before the text input in Tab order;
118
+ the count and clear-all move to a footer under the field, and the placeholder
119
+ shows only while the field is empty. The input stays enabled at `maxTags`.
120
+ - **Commerce DOM hooks.** RefundStatusCard, CartSummaryCard,
121
+ DiscountStackPreview, TaxBreakdownCard and ShipmentTracking render on `Card`
122
+ and lose the `content-block--*` classes and `data-component="content-block"`;
123
+ their own `--component` classes stay. ShipmentTracking and InvoiceHeader show
124
+ a visible title with the status chip in its suffix.
125
+ - **Shell width utilities.** `shell-sidebar-icon-current` and
126
+ `shell-sidebar-offcanvas-current` read their widths from `shell-sidebar-vars`;
127
+ apply them together on the same element, as the library's shells do.
128
+ - **Card dividers are on by default.** `card.defaultHeaderDivider` and
129
+ `card.defaultFooterDivider` now default to `true`, so framed cards rule their
130
+ header and footer apart. Flat, card-free structure (`surface="flat"`) and a
131
+ `headerPlacement="frame"` header still draw no rule unless asked, and
132
+ explicit per-card booleans still win. For the previous spacing-only look, set
133
+ both provider defaults to `false`, or pass `headerDivider={false}` /
134
+ `footerDivider={false}` on a card.
135
+
136
+ ### Changes
137
+
138
+ - **Accessibility strings.** Combobox, AsyncResourceCombobox, DataTable and
139
+ MediaLibrary take strings for their screen-reader-only labels, including both
140
+ Combobox dismissal controls. Closing a nested popup no longer moves focus that
141
+ was already restored inside its parent popup.
142
+ - **Overlays draw one rule per region boundary.** ActionDialog, ActionDrawer
143
+ and ConfirmDialog separate header, body and footer with a rule, and a dialog
144
+ without a body shows a single rule.
145
+ - **Rich text images.** RichTextEditor and RichText support images through
146
+ `useRichTextImages`: the consumer owns `upload(file, { signal })`; the library
147
+ owns toolbar, paste and drop insertion, the upload placeholder, cancel, retry
148
+ and remove, type and size limits, alt text and the http/https/blob/relative
149
+ source policy. `renderImage` draws read-only images with the consumer's
150
+ component.
151
+ - **RichTextEditor runs Tiptap.** Its runtime check required `EditorContent`
152
+ to be a function, but Tiptap 3 exports it as `React.memo`, so every editor
153
+ (rich text, comment, activity and email composers) silently rendered the
154
+ contenteditable fallback with formatting disabled. Picking a mention in Tiptap
155
+ now replaces its `@query` instead of appending after it, and the editor chip
156
+ keeps the `.rsc-mention` hook, so mention-chip.css draws it in both engines.
157
+ - **Mentions insert as atomic badge chips** removed by one Backspace. The
158
+ suggestion list and picker are more compact, and kind filters use the shared
159
+ toggle style.
160
+ - **Global search** builds its field on the public `InputGroup` and lays out
161
+ results, group headings and the footer with the compact Command recipe.
162
+ - **Activities open compact.** Rich rows show the headline and description;
163
+ metadata, changes, details, resource chips and inline actions appear together
164
+ behind "Show details".
165
+ - **Comments** no longer leave an empty band under each comment's action row.
166
+ - **Choice inputs centre on the label line.** Checkbox, radio, switch and
167
+ selected-card checks share one label-line track (questionnaire,
168
+ ApiTokenManager, card groups).
169
+ - **One plain X clears fields.** Input, Textarea, Cascader, Combobox and global
170
+ search clear actions, and TagsInput and Combobox chip removes, draw a plain X
171
+ instead of a circled X.
172
+ - **Cascader** draws Input's field frame and the shared Combobox affordance
173
+ track; its clear sits beside a chevron aligned with Select's.
174
+ - **Visual: Badge `sm` and `md` are 2px taller** (20px and 23px) at the same
175
+ type size; inline badges are unchanged, and TagsInput chips follow.
176
+ - **NavigationTabs** keeps the current tab lifted under hover and press;
177
+ inactive tabs change colour only.
178
+ - **SignaturePad** draws, exports and previews typed names in the pad's font
179
+ (theme sans by default) instead of `cursive`, and fits long names by font
180
+ size; `signaturePadToSVG` accepts an optional `fontFamily`.
181
+ - **Fixes:** Dropzone centres both copy lines; IconBadge sizes child glyphs with
182
+ its icon role (SmartAccordion medallions render at 16px); Alert's icon and
183
+ action columns use Toast's 8px gap; content typography fits images to the
184
+ column.
185
+ - **Catalogue:** the deprecated Sheet page, the products main-column, actions
186
+ and support-rail pages and the sync page are retired; their URLs redirect to
187
+ the overlays, product overview and SchemaForm pages.
188
+ - **BatchActionBar** (`themelia-react-ui/base/batch-action-bar`): one selection
189
+ bar with a count, bulk actions and Clear, `floating` (docked, lifted, opaque)
190
+ or `inline`. The count is a polite live region, Escape inside the bar clears,
191
+ and focus returns to the list (or `returnFocusRef`) when the bar goes away.
192
+ DataTable, product variants and MediaLibrary's new `bulkActions` use it; the
193
+ old sticky selection toolbar and its overlap with the sticky topbar are gone.
194
+ - **Order blocks** in `blocks/commerce`: `OrderHeader` (payment and fulfilment
195
+ status axes), `FulfillmentGroup`, `OrderLineItem`, `OrderSummary`,
196
+ `OrderTransactions` and `OrderCustomer`, with an Orders catalogue group and an
197
+ Order detail composition. The shared money ledger `SummaryPanel` and
198
+ `AmountRow` now draw CartSummaryCard, TaxBreakdownCard, DiscountStackPreview,
199
+ InvoiceHeader and OrderSummary: no tinted box, one rule above a grand total.
200
+ - **Commerce blocks follow the source kit.** ShipmentTracking has a copyable
201
+ tracking number (`onCopyTracking`) and a timestamped checkpoint rail whose
202
+ current step is `aria-current="step"`; RefundStatusCard is an ordered list of
203
+ stages; PaymentMethod gains `variant="row"` and speaks `strings.formatCard`
204
+ ("Visa ending 4242"); CartSummaryCard falls back to initials on a failed image
205
+ and adds `strings.formatQuantity`; DiscountStackPreview takes an optional
206
+ `kind` and `id`. Blocks pass native attributes to their root. `CartSummary`,
207
+ `DiscountStack`, `RefundStatus` and `PaymentMethodCard` are added as the source
208
+ kit's names for the same components. `Timeline` items expose `data-status` and
209
+ mark the current item `aria-current="step"`.
210
+ - **MetadataList** labels wrap in every layout and stay semibold; inline
211
+ `itemSeparator` is a middle dot hidden from screen readers; `render` output
212
+ takes the value style; the info trigger no longer grows its line; `icon` takes
213
+ any `ComponentType<{ className?: string }>`.
214
+ - **TagsInput fixes.** Multi-tag paste commits every tag, `sortTags` removes the
215
+ right tag, object tags are created from an empty value, a refused entry no
216
+ longer traps Tab, IME composition no longer commits, a typed delimiter splits,
217
+ single-token paste is native, and focus moves to the neighbouring chip after a
218
+ removal. Refused entries stay in the draft and are announced
219
+ (`strings.notAdded`). New `defaultValue`, `name` (hidden `name[]` inputs) and
220
+ ARIA pass-through; `TagsInputStrings` and `defaultTagsInputStrings` are
221
+ exported.
222
+ - **Order and commerce block fixes.** ShipmentTracking marks no checkpoint
223
+ current before the parcel reaches the first one. FulfillmentGroup keeps its
224
+ `items` rows when a conditional `children` renders nothing, takes Card's
225
+ default rules instead of forcing them, and accepts `headerDivider` /
226
+ `footerDivider`. OrderTransactions signs only money that moved (a failed
227
+ refund shows no minus), spells each kind out without a glyph tile or tinted
228
+ row, and draws no frame of its own inside a card. PaymentMethod's `row`
229
+ variant drops the credit-card tile, which misnamed wallets. Order status chips
230
+ match the rest of the library (no dot), and InvoiceHeader shows its dates as
231
+ facts rather than money rows.
232
+ - **Item as a button or link.** An `Item` given `render` renders its media,
233
+ content, title, description, actions, header and footer as spans, so a
234
+ button row holds valid phrasing content. Layout and `data-slot` hooks are
235
+ unchanged.
236
+ - **Theme fixes.** Light `--sidebar-primary` and its foreground follow
237
+ `--primary`, as dark already did, so a brand theme colours the sidebar
238
+ selection in both modes (the default theme is unchanged). `themes/green.css`
239
+ drops its `--chart-1` override, which restated the default. Theme Studio's
240
+ light warning accent matches the shipped token again.
241
+ - **Filter pill focus.** Active filter segments draw the inset focus recipe
242
+ instead of clearing the ring, so keyboard focus no longer looks like hover.
243
+ - **Icons follow `--icon`.** Sidebar, tabs, breadcrumb, item media, pagination,
244
+ avatar-group, toaster and chart-legend icons use the `size-icon*` roles
245
+ instead of fixed sizes; at the default `--icon` nothing moves.
246
+ - **Design checks.** Design lint judges every `*ClassName` slot prop like
247
+ `className`, adds an `icon-size` rule, and rejects a cleared focus ring with
248
+ no replacement edge. `check:contract` adds theme-mode checks: one value per
249
+ mode, mode-dependent aliases restated in `.dark`, no role that follows another
250
+ in one mode while copying its value in the other, and no brand-theme no-ops.
251
+ - **One owner for shared geometry.** The clear-target size, the action and
252
+ control size steps and the corner formulas that fields, the sidebar, toasts,
253
+ calendars, the key-value editor and MetadataList each wrote by hand now come
254
+ from the generated `affordanceGeometry` recipes, and `check:contract` keeps
255
+ the rich-content corners on the same formulas as the radius tokens. The
256
+ sidebar's collapsed and off-canvas widths are defined once by
257
+ `shell-sidebar-vars`; Workspace's sidebar column reads `--shell-sidebar-width`;
258
+ the mobile range-calendar cell follows density; the toaster's corner is the
259
+ shell radius role. BatchActionBar's dock offset and MetadataList's info target
260
+ no longer read `:root`-resolved aliases, so a scoped `ThemeScope` spacing or
261
+ density reaches them, and a new `root-alias` design-lint rule keeps such reads
262
+ out.
263
+ - **Shared components instead of hand-built copies.** AI, metric, giftcard and
264
+ checklist blocks frame with `Card` instead of hand-built shells; progress bars
265
+ across blocks and features are `Progress`; avatar, step and status discs are
266
+ `IconBadge`, `Avatar` or Badge `dot`; count pills and resource chips are
267
+ `Badge`; the media facts list is `MetadataList`; spacing chains are `Stack`
268
+ gaps; the map card uses the popover surface recipe and the AI prompt frame the
269
+ shared field-state recipes. MetricComparison drops its nested tiles.
270
+ - **Table density.** Base `Table` takes `density` (`compact`, `default`,
271
+ `comfortable`; also `data-density` on the table) and owns head and cell
272
+ insets; DataTable passes its `size` through it instead of overriding cells,
273
+ and headers lose the fixed `h-12`, so they follow density. Consumer
274
+ `cellClassName` padding now wins.
275
+ - **Typography through props.** `InlineStat` takes `valueWeight` and renders its
276
+ value in the provider text size; `AiShimmer` takes `size`; field labels share
277
+ one line box (`formLabelLineClass`); link-styled text shares the 0.2em
278
+ underline offset; library components set size, weight and leading through
279
+ `Text`/`Heading` props, and `no-restyle` now enforces that in library code.
280
+ - **Shared recipes for repeated choices.** Anchored surfaces (popovers, menus,
281
+ Select, Combobox, map and chart popups) take their viewport bound from the
282
+ shared surface recipe, and their widths from one `popoverWidthRecipes` scale;
283
+ the kanban card menu widens from 11rem to 12rem, the default filter popover
284
+ from 16rem to 18rem and ActionMenu's minimum from 9rem to 10rem. Status dots
285
+ use `dotRecipes` (6px beside text, 8px as a marker). The unread and stale
286
+ `theme` section of the token contract is removed.
287
+ - **Tabs chips.** `TabsList` takes `variant="chips"`: wrapping, trackless toggle
288
+ chips with the muted hover and accent pressed fill. Saved views and filter
289
+ presets use it instead of overriding the default track.
290
+ - **Smaller shared pieces.** AI source and citation numbers sit in `IconBadge`
291
+ (24px, up from a 20px hand-built disc). Native buttons that draw their own
292
+ shape start from `interactionRecipes.nativeButtonReset`.
293
+ - **Appointment calendar.** New `features/appointment-calendar` entrypoint:
294
+ `AppointmentCalendar` puts a month with category dots beside the day or week
295
+ agenda, with category and staff filters, booked and conflict counts and a
296
+ dismissible double-booking alert. Overlaps are found per staff member across
297
+ every category. `onAppointmentClick` opens a row, `appointmentActions` adds a
298
+ per-row commands menu, `onRangeChange` reports the days on screen for loading,
299
+ and `loading`, `error` and `onRetry` cover the agenda's states.
300
+ `renderAppointment` renders custom rows from a context with the category
301
+ colour, conflict, status, time, `open`, actions, a ready actions menu and
302
+ `defaultRender`; the calendar is generic over the app's appointment type.
303
+ `appointmentsOn`, `filterAppointments` and `findConflicts` are exported for
304
+ apps that pre-compute their own view.
305
+ - **Editor body height.** RichTextEditor takes `bodyHeight` (`control`, `field`
306
+ or `document`); `minHeight` still wins. The comment composer uses `field`, so
307
+ its empty editor is one textarea tall, 1rem taller than before.
308
+
3
309
  ## 2.0.1 — 2026-10-18
4
310
 
5
311
  One shared recipe and design-lint rule for each visual state, the fixes the new
@@ -11,17 +317,7 @@ SettingsShell, and `primaryAction` on WorkspaceRecordHeader;
11
317
  `toPageHeaderAction` in `services/actions`; an optional `toggle` flag on
12
318
  `ToolbarButtonConfig` and `RichTextEditorToolbarItem`; `context` on
13
319
  `ActionMenu` (`ActionMenuContext`); an optional `actions.menuLabel` in DataTable
14
- strings; `align` on ConfirmDialog and ActionDialog with UIProvider overlay
15
- defaults; `selecting`, `defaultSelecting`, `onSelectingChange` and `onItemOpen`
16
- on MediaLibrary; `useRichTextImages` and `images` on RichTextEditor and
17
- RichText; the `themelia-react-ui/base/metadata-list` entrypoint; an optional
18
- `fontFamily` on `signaturePadToSVG`; the `themelia-react-ui/base/batch-action-bar`
19
- entrypoint; the order blocks, `SummaryPanel` and `AmountRow` in `blocks/commerce`;
20
- `valueAlign` on MetadataList; `defaultValue`, `name` and ARIA props on TagsInput.
21
- `PageActions`, `PageAction`,
22
- `toPageAction`, `features/sync`, the standalone product region cards, the
23
- `blocks/data-display` MetadataList exports and `ActivityRow` `moreLabel` are
24
- deprecated.
320
+ strings. `PageActions`, `PageAction` and `toPageAction` are deprecated.
25
321
 
26
322
  ### Upgrading from 2.0.0
27
323
 
@@ -57,46 +353,6 @@ deprecated.
57
353
  instead of a status colour or a solid primary fill. `HighlightedText`'s
58
354
  default `highlightClassName` is the shared match mark: foreground text on the
59
355
  warning tint.
60
- - **MetadataList moved to base.** Import `MetadataList`, its item types and
61
- default strings from `themelia-react-ui/base/metadata-list`. The
62
- `themelia-react-ui/blocks/data-display` re-exports keep working and are
63
- deprecated. Labels render semibold.
64
- - **MediaLibrary opens before it selects.** Activating an asset (click, Enter,
65
- Space) calls `onItemOpen` or shows the details panel. Selection is an explicit
66
- mode: `selecting`, `defaultSelecting` and `onSelectingChange`. Picker dialogs
67
- start selecting; pass `defaultSelecting` where a library relied on selecting
68
- by default.
69
- - **ConfirmDialog is centred.** ConfirmDialog and ActionDialog accept
70
- `align: 'start' | 'center'`, resolved from the prop, then the UIProvider
71
- `overlay.defaultConfirmAlign` / `overlay.defaultDialogAlign` defaults, then
72
- center for ConfirmDialog and start for ActionDialog.
73
- - **Deprecated: `themelia-react-ui/features/sync`.** `SyncRangeDialogForm` is
74
- application-specific; use `SchemaForm` with `radio-cards` and
75
- `checkbox-cards` fields. The entrypoint still ships.
76
- - **Deprecated: standalone product region cards and row menus.** Render them
77
- through `ProductOverview` slots and the `renderOptionActions` /
78
- `renderVariantActions` options. They stay exported.
79
- - **Deprecated: `ActivityRow` `moreLabel`.** The collapsed metadata preview it
80
- labelled is gone; secondary detail opens with the details disclosure.
81
- - **Selection bars are a `BatchActionBar`.** DataTable's default selection
82
- toolbar now docks to the bottom of the viewport (`floating`); pass
83
- `selectionToolbarPlacement="inline"` to keep it in the table. Its summary and
84
- the new `totalRowCount` prop default to `pagination.total`, so server-paginated
85
- tables count the whole result. Product variant tables show an inline bar only
86
- while variants are selected; `renderBulkActions` now replaces the default
87
- commands, as documented (return `null` to keep them), and Delete no longer
88
- repeats the count.
89
- - **MetadataList rows.** `layout="rows"` draws rules only with `itemSeparator`,
90
- and values start their column on `2fr/3fr` tracks. Pass `valueAlign="end"` for
91
- the previous right-aligned figures, such as money columns.
92
- - **TagsInput.** Chips sit inside the field, before the text input in Tab order;
93
- the count and clear-all move to a footer under the field, and the placeholder
94
- shows only while the field is empty. The input stays enabled at `maxTags`.
95
- - **Commerce DOM hooks.** RefundStatusCard, CartSummaryCard,
96
- DiscountStackPreview, TaxBreakdownCard and ShipmentTracking render on `Card`
97
- and lose the `content-block--*` classes and `data-component="content-block"`;
98
- their own `--component` classes stay. ShipmentTracking and InvoiceHeader show
99
- a visible title with the status chip in its suffix.
100
356
 
101
357
  ### Changes
102
358
 
@@ -270,86 +526,6 @@ deprecated.
270
526
  clipped mid-glyph instead: an applied coupon `SPRING2026` read as `SPRING202`.
271
527
  Truncating titles in citations, vendor profiles, gift cards and attachments
272
528
  benefit too. The applied coupon also carries its full code as a `title`.
273
- - **Overlays draw one rule per region boundary.** ActionDialog, ActionDrawer
274
- and ConfirmDialog separate header, body and footer with a rule, and a dialog
275
- without a body shows a single rule.
276
- - **Rich text images.** RichTextEditor and RichText support images through
277
- `useRichTextImages`: the consumer owns `upload(file, { signal })`; the library
278
- owns toolbar, paste and drop insertion, the upload placeholder, cancel, retry
279
- and remove, type and size limits, alt text and the http/https/blob/relative
280
- source policy. `renderImage` draws read-only images with the consumer's
281
- component.
282
- - **RichTextEditor runs Tiptap.** Its runtime check required `EditorContent`
283
- to be a function, but Tiptap 3 exports it as `React.memo`, so every editor
284
- (rich text, comment, activity and email composers) silently rendered the
285
- contenteditable fallback with formatting disabled. Picking a mention in Tiptap
286
- now replaces its `@query` instead of appending after it, and the editor chip
287
- keeps the `.rsc-mention` hook, so mention-chip.css draws it in both engines.
288
- - **Mentions insert as atomic badge chips** removed by one Backspace. The
289
- suggestion list and picker are more compact, and kind filters use the shared
290
- toggle style.
291
- - **Global search** builds its field on the public `InputGroup` and lays out
292
- results, group headings and the footer with the compact Command recipe.
293
- - **Activities open compact.** Rich rows show the headline and description;
294
- metadata, changes, details, resource chips and inline actions appear together
295
- behind "Show details".
296
- - **Comments** no longer leave an empty band under each comment's action row.
297
- - **Choice inputs centre on the label line.** Checkbox, radio, switch and
298
- selected-card checks share one label-line track (questionnaire,
299
- ApiTokenManager, card groups).
300
- - **One plain X clears fields.** Input, Textarea, Cascader, Combobox and global
301
- search clear actions, and TagsInput and Combobox chip removes, draw a plain X
302
- instead of a circled X.
303
- - **Cascader** draws Input's field frame and the shared Combobox affordance
304
- track; its clear sits beside a chevron aligned with Select's.
305
- - **Visual: Badge `sm` and `md` are 2px taller** (20px and 23px) at the same
306
- type size; inline badges are unchanged, and TagsInput chips follow.
307
- - **NavigationTabs** keeps the current tab lifted under hover and press;
308
- inactive tabs change colour only.
309
- - **SignaturePad** draws, exports and previews typed names in the pad's font
310
- (theme sans by default) instead of `cursive`, and fits long names by font
311
- size; `signaturePadToSVG` accepts an optional `fontFamily`.
312
- - **Fixes:** Dropzone centres both copy lines; IconBadge sizes child glyphs with
313
- its icon role (SmartAccordion medallions render at 16px); Alert's icon and
314
- action columns use Toast's 8px gap; content typography fits images to the
315
- column.
316
- - **Catalogue:** the deprecated Sheet page, the products main-column, actions
317
- and support-rail pages and the sync page are retired; their URLs redirect to
318
- the overlays, product overview and SchemaForm pages.
319
- - **BatchActionBar** (`themelia-react-ui/base/batch-action-bar`): one selection
320
- bar with a count, bulk actions and Clear, `floating` (docked, lifted, opaque)
321
- or `inline`. The count is a polite live region, Escape inside the bar clears,
322
- and focus returns to the list (or `returnFocusRef`) when the bar goes away.
323
- DataTable, product variants and MediaLibrary's new `bulkActions` use it; the
324
- old sticky selection toolbar and its overlap with the sticky topbar are gone.
325
- - **Order blocks** in `blocks/commerce`: `OrderHeader` (payment and fulfilment
326
- status axes), `FulfillmentGroup`, `OrderLineItem`, `OrderSummary`,
327
- `OrderTransactions` and `OrderCustomer`, with an Orders catalogue group and an
328
- Order detail composition. The shared money ledger `SummaryPanel` and
329
- `AmountRow` now draw CartSummaryCard, TaxBreakdownCard, DiscountStackPreview,
330
- InvoiceHeader and OrderSummary: no tinted box, one rule above a grand total.
331
- - **Commerce blocks follow the source kit.** ShipmentTracking has a copyable
332
- tracking number (`onCopyTracking`) and a timestamped checkpoint rail whose
333
- current step is `aria-current="step"`; RefundStatusCard is an ordered list of
334
- stages; PaymentMethod gains `variant="row"` and speaks `strings.formatCard`
335
- ("Visa ending 4242"); CartSummaryCard falls back to initials on a failed image
336
- and adds `strings.formatQuantity`; DiscountStackPreview takes an optional
337
- `kind` and `id`. Blocks pass native attributes to their root. `CartSummary`,
338
- `DiscountStack`, `RefundStatus` and `PaymentMethodCard` are added as the source
339
- kit's names for the same components. `Timeline` items expose `data-status` and
340
- mark the current item `aria-current="step"`.
341
- - **MetadataList** labels wrap in every layout and stay semibold; inline
342
- `itemSeparator` is a middle dot hidden from screen readers; `render` output
343
- takes the value style; the info trigger no longer grows its line; `icon` takes
344
- any `ComponentType<{ className?: string }>`.
345
- - **TagsInput fixes.** Multi-tag paste commits every tag, `sortTags` removes the
346
- right tag, object tags are created from an empty value, a refused entry no
347
- longer traps Tab, IME composition no longer commits, a typed delimiter splits,
348
- single-token paste is native, and focus moves to the neighbouring chip after a
349
- removal. Refused entries stay in the draft and are announced
350
- (`strings.notAdded`). New `defaultValue`, `name` (hidden `name[]` inputs) and
351
- ARIA pass-through; `TagsInputStrings` and `defaultTagsInputStrings` are
352
- exported.
353
529
 
354
530
  ## 2.0.0 — 2026-10-16
355
531
 
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A publishable React UI package built on Base UI and Tailwind, with shadcn-compatible themes and Themelia's public APIs. Routing, persistence, permissions and translations remain consumer-owned.
4
4
 
5
- Package: **`themelia-react-ui`** · current version: **`2.0.1`** · MIT licensed.
5
+ Package: **`themelia-react-ui`** · current version: **`2.0.2`** · MIT licensed.
6
6
  The GitHub repository is `themelia-react-ui`; npm imports use `themelia-react-ui`.
7
7
 
8
8
  Consuming apps start with [consumer setup](#consumer-setup) and the packaged
@@ -41,7 +41,26 @@ Browser verification requires Playwright Chromium. An existing executable can be
41
41
 
42
42
  ## Consumer setup
43
43
 
44
- Install a built tarball; use a registry release when available. React 19, React DOM 19, Base UI 1.8+ and Lucide React 1 are required peers. Import exact family paths; there is no aggregate component barrel or public raw UI entrypoint.
44
+ Install a built tarball; use a registry release when available. React 19, React DOM 19, the declared Base UI peer and Lucide React 1 are required peers. Import exact family paths; there is no aggregate component barrel or public raw UI entrypoint.
45
+
46
+ Nested light/dark utilities use custom-property container style queries. Use
47
+ Chromium 111+, Safari 18.1+ or Firefox 151+ for this theme behavior. The nearest
48
+ mode class governs nested components and their scoped portals; see the
49
+ [theme guide](docs/consumer-skill/references/theming.md) for partial overrides.
50
+
51
+ Version 2.0.2 requires the companion `base-ui-react-1.8.0-kpo.2.tgz`
52
+ archive. It adds the public `Combobox.Root.dismissLabel` translation seam for both
53
+ screen-reader dismissal controls and preserves focus already restored inside a
54
+ parent popup when a nested popup closes. Install both versioned archives together; no
55
+ public registry release is required. The source checkout keeps the Base UI archive
56
+ beside `package.json` and pins it through the lockfile for reproducible `npm ci`.
57
+
58
+ ```sh
59
+ npm install ./themelia-react-ui-2.0.2.tgz ./base-ui-react-1.8.0-kpo.2.tgz
60
+ ```
61
+
62
+ The source checkout retains `base-ui-react-1.8.0-kpo.2.patch`; its upstream
63
+ provenance and license are recorded in `THIRD_PARTY_NOTICES.md`.
45
64
 
46
65
  After the initial registry release, install into a React 19 application with:
47
66
 
@@ -95,7 +114,7 @@ The shipped stylesheet follows `prefers-reduced-motion` automatically for these
95
114
  | Base | `base/<family>` — controls, forms, buttons, cards, structure, navigation, menus, feedback, display, tables, uploads and specialist controls |
96
115
  | Layout | `layout`, `layout/<family>` — application shell, authentication, containers, page, settings, header, navigation, sidebar, workspace and hooks |
97
116
  | Blocks | `blocks/admin`, `ai`, `analytics`, `commerce`, `data-display`, `onboarding`, `timelines` (each prefixed `blocks/`) |
98
- | Features | `features/activities`, `ai-chat`, `async-preview`, `combobox`, `comments`, `data-view`, `email-composer`, `event-calendar`, `filters`, `global-search`, `kanban`, `map`, `media-library`, `mentions`, `overlays`, `products`, `resource`, `resource-assignment`, `rich-text-editor`, `schema-form`, `suggestions`, `sync` (deprecated), `table`, `theme-tweaker` (each prefixed `features/`) |
117
+ | Features | `features/activities`, `ai-chat`, `appointment-calendar`, `async-preview`, `combobox`, `comments`, `data-view`, `email-composer`, `event-calendar`, `filters`, `global-search`, `kanban`, `map`, `media-library`, `mentions`, `overlays`, `products`, `resource`, `resource-assignment`, `rich-text-editor`, `schema-form`, `suggestions`, `sync` (deprecated), `table`, `theme-tweaker` (each prefixed `features/`) |
99
118
 
100
119
  The complete machine-readable entry inventory is `scripts/entries.json`. Dialogs and confirmations use `ActionDialog`, `ActionDrawer`, `ConfirmDialog` and visibility/action hooks from `features/overlays`.
101
120
 
@@ -201,7 +220,7 @@ The default development URL opens the full component catalogue. The focused foun
201
220
 
202
221
  `Button` separates `tone` from `buttonStyle` (`solid`, `outline`, `ghost`); the catalogue shows their matrix, sizes and loading/disabled states. Icon-only controls may omit children when an accessible label or tooltip is supplied. Badges use compact typography and insets rather than inheriting action geometry.
203
222
 
204
- Use `titleSuffix` for card status, count and version badges. `headerStart` is full-width pre-title context, and `headerAction`/`actions` own controls. Card owns token-spaced title/suffix wrapping for all surface modes. Give a card one quick control in `headerAction`, a command list in `actions` (its More actions menu) and the commit action in `footerSlot`; spacing, not a divider, separates the footer. Reserve body actions for a specific content step. Card owns aligned card insets, frames and expand/collapse behavior; Use `Card surface="flat" padding="none"` for card-free content hierarchy. ChartCard exposes `titleSuffix` too. Use `headerPlacement="frame"` for a header above an inset body. SmartCard and ContentBlock remain deprecated migration adapters; new code uses Card.
223
+ Use `titleSuffix` for card status, count and version badges. `headerStart` is full-width pre-title context, and `headerAction`/`actions` own controls. Card owns token-spaced title/suffix wrapping for all surface modes. Give a card one quick control in `headerAction`, a command list in `actions` (its More actions menu) and the commit action in `footerSlot`; a framed card rules the footer off by default. Reserve body actions for a specific content step. Card owns aligned card insets, frames and expand/collapse behavior; Use `Card surface="flat" padding="none"` for card-free content hierarchy. ChartCard exposes `titleSuffix` too. Use `headerPlacement="frame"` for a header above an inset body. SmartCard and ContentBlock remain deprecated migration adapters; new code uses Card.
205
224
 
206
225
  Application drawers use `ActionDrawer` and `useOverlayVisibility` from `themelia-react-ui/features/overlays`. Sheet is the structural foundation and remains available for lower-layer infrastructure and compatibility.
207
226
 
@@ -222,9 +241,10 @@ entries stay last.
222
241
  Page owns inline and block padding, defaulting to the large surface role;
223
242
  PageViewport owns scrolling and supplies no inset. Use `Page narrow` for a
224
243
  centered single resource; explicit `maxWidth` wins. Page headers use dense copy
225
- gaps. Ordinary cards retain default `md` padding and separate header, body and
226
- footer by spacing; `card.defaultHeaderDivider` and `card.defaultFooterDivider`
227
- remain for an app whose design calls for rules.
244
+ gaps. Ordinary framed cards retain default `md` padding and rule header, body and
245
+ footer apart by default; flat, card-free structure draws no rule unless asked. Set
246
+ `card.defaultHeaderDivider` and `card.defaultFooterDivider` to `false` for an app
247
+ that separates card regions by spacing alone.
228
248
  AppSidebar offers pinned `slots.headerStart`/`headerEnd` around its workspace
229
249
  region, compact navigation and a separated footer. The
230
250
  [complete shell recipe](docs/consumer-skill/examples/app-layout.tsx) demonstrates
@@ -289,7 +309,7 @@ purpose from its name or read every document before starting a screen.
289
309
 
290
310
  Maintainers run `npm run docs:sync-skill` after changes to exports, types, selection guidance, peers or tokens. `npm run check:skill` requires a fresh library build and rejects stale source-backed references, built declaration exports and broken reference links. `prepack` checks source-backed references without rebuilding; `prepublishOnly` builds fresh assets and verifies built guidance. `check:package` verifies the complete shipped skill, strictly compiles the basic recipes without optional peers and every recipe with its required peers, and executes installed shell/resource-page and workflow checks.
291
311
 
292
- Build portable consumer documentation with `npm run build` followed by `npm run build:docs`. The generated [static entry](dist-docs/index.html) links to `dist-docs/2.0.1/` for the current version. Each version preserves the complete skill and all declaration files, supports search with the same finder, and uses relative links under any hosting subdirectory. Serve the entire artifact over HTTP; it needs no external CDN. Run `npm run check:static-docs` to check generated asset paths. The future hosting destination remains pending.
312
+ Build portable consumer documentation with `npm run build` followed by `npm run build:docs`. The generated [static entry](dist-docs/index.html) links to `dist-docs/2.0.2/` for the current version. Each version preserves the complete skill and all declaration files, supports search with the same finder, and uses relative links under any hosting subdirectory. Serve the entire artifact over HTTP; it needs no external CDN. Run `npm run check:static-docs` to check generated asset paths. The future hosting destination remains pending.
293
313
 
294
314
  `npm run check:agent` runs focused agent-consumption fixtures and built skill alignment. `npm run check:release` performs the real serial local build/package/browser/agent/static-documentation gate; it does not publish or deploy. `npm run check:quick` runs the everyday core (contract, lint, design lint, typecheck, unit tests, build). See the [release guide](docs/releasing.md) and [draft changelog](CHANGELOG.md). There is no hosted CI; every check runs locally, when you choose. These commands verify locally; publication and deployment remain separate actions.
295
315
 
@@ -27,6 +27,19 @@ SOFTWARE.
27
27
 
28
28
  External dependencies retain their own licenses and notices in their packages.
29
29
 
30
+ ## Base UI private accessibility build
31
+
32
+ This private build requires `@base-ui/react@1.8.0-kpo.2`, supplied as the companion
33
+ `base-ui-react-1.8.0-kpo.2.tgz` archive. It derives from the official Base UI v1.8.0
34
+ source at commit `47b40521eab921c2756bf9bdb0b0f07fbfdb8c8c`
35
+ ([upstream source](https://github.com/mui/base-ui/tree/47b40521eab921c2756bf9bdb0b0f07fbfdb8c8c)).
36
+ The additive `Combobox.Root.dismissLabel` prop supplies both screen-reader
37
+ dismissal controls. The companion also guards delayed parent-popup focus
38
+ restoration so a nested popup can return focus to its original trigger.
39
+ The library source checkout retains the related patch as
40
+ `base-ui-react-1.8.0-kpo.2.patch`. Base UI's MIT license is retained inside the
41
+ companion archive; its copyright and permission notice remain unchanged.
42
+
30
43
  ## Email composer reference
31
44
 
32
45
  The email composer public types and HTTP adapter adapt the supplied MIT-licensed
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "./lib/strings.js";
3
- import { t } from "./utils-l5LpDw2z.js";
4
- import { s as n } from "./typography-DTRkE9zL.js";
3
+ import { t } from "./utils-BRhFDwuU.js";
4
+ import { c as n } from "./typography-UTnveOEy.js";
5
5
  import { t as r } from "./focus-recipes-B653VaLq.js";
6
6
  import { t as i } from "./motion-recipes-ChBg4HBq.js";
7
- import { t as a } from "./structure-DC2dygdA.js";
8
- import { t as o } from "./interaction-recipes-CHr0dJUs.js";
7
+ import { t as a } from "./structure-BmisBK-3.js";
8
+ import { t as o } from "./interaction-recipes-XR9ZpVYL.js";
9
9
  import { t as s } from "./disclosure-panel-B0HFNZ9x.js";
10
- import { t as c } from "./icon-badge-CAuKupo9.js";
10
+ import { t as c } from "./icon-badge-DYKIwvOV.js";
11
11
  import * as l from "react";
12
12
  import { forwardRef as u } from "react";
13
13
  import { jsx as d, jsxs as f } from "react/jsx-runtime";
@@ -45,7 +45,7 @@ function _({ className: e, children: n, ...r }) {
45
45
  function v({ className: e, children: n, render: r, ...a }) {
46
46
  return /* @__PURE__ */ d(m.Panel, {
47
47
  "data-slot": "accordion-content",
48
- className: t("accordion-content--component box-border text-foreground h-(--accordion-panel-height)", i.disclosure, e),
48
+ className: t("accordion-content--component box-border text-inherit h-(--accordion-panel-height)", i.disclosure, e),
49
49
  ...a,
50
50
  render: (e, t) => /* @__PURE__ */ d(s, {
51
51
  props: e,
@@ -61,7 +61,7 @@ function v({ className: e, children: n, render: r, ...a }) {
61
61
  var y = l.forwardRef(function({ className: e, ...n }, r) {
62
62
  return /* @__PURE__ */ d(h, {
63
63
  ref: r,
64
- className: t("accordion--component rounded-radius border-border bg-card", e),
64
+ className: t("accordion--component rounded-radius border-border bg-card text-card-foreground", e),
65
65
  ...n
66
66
  });
67
67
  });
@@ -78,7 +78,7 @@ var x = l.forwardRef(function({ className: e, children: i, ...a }, s) {
78
78
  let c = typeof i == "string" || typeof i == "number" || typeof i == "bigint";
79
79
  return /* @__PURE__ */ d(_, {
80
80
  ref: s,
81
- className: t("accordion-trigger--component min-h-action items-center gap-space-lg px-row-x py-row-y", `text-start text-sm font-medium transition-colors ${o.rowHover} hover:no-underline`, `focus-visible:z-10 ${r.inset}`, e),
81
+ className: t("accordion-trigger--component min-h-action items-center gap-space-lg px-row-x py-row-y", `text-start text-inherit text-sm font-medium transition-colors ${o.rowHover} hover:no-underline`, `focus-visible:z-10 ${r.inset}`, e),
82
82
  ...a,
83
83
  children: c ? /* @__PURE__ */ d(n, {
84
84
  tag: "span",
@@ -110,11 +110,11 @@ S.displayName = "AccordionContent";
110
110
  //#endregion
111
111
  //#region src/components/base/accordion/accordion-variants.ts
112
112
  var C = {
113
- card: "gap-space-md border-0 rounded-none bg-transparent overflow-visible",
114
- bordered: "rounded-radius border border-border bg-card overflow-hidden",
115
- flat: "border-0 rounded-none bg-transparent overflow-visible"
113
+ card: "gap-space-md border-0 rounded-none bg-transparent text-inherit overflow-visible",
114
+ bordered: "rounded-radius border border-border bg-card text-card-foreground overflow-hidden",
115
+ flat: "border-0 rounded-none bg-transparent text-inherit overflow-visible"
116
116
  }, w = {
117
- card: "border border-border bg-card rounded-radius overflow-hidden",
117
+ card: "border border-border bg-card text-card-foreground rounded-radius overflow-hidden",
118
118
  bordered: "bg-transparent not-last:border-b border-border",
119
119
  flat: "border-0 not-last:border-b-0 bg-transparent rounded-radius overflow-hidden"
120
120
  }, T = "items-center gap-space-lg px-row-x py-row-y text-start hover:no-underline", E = {
@@ -153,6 +153,7 @@ var C = {
153
153
  className: "flex min-w-0 flex-wrap items-center gap-x-space-md gap-y-space-xs",
154
154
  children: [k(e.title) ? /* @__PURE__ */ d(n, {
155
155
  tag: "span",
156
+ type: "inherit",
156
157
  weight: "semibold",
157
158
  className: "smart-accordion--title min-w-0",
158
159
  children: e.title
@@ -204,4 +205,4 @@ function A({ iconStyle: e, icon: n, reserveSpace: r }) {
204
205
  //#endregion
205
206
  export { C as a, S as c, w as i, b as l, D as n, T as o, E as r, y as s, O as t, x as u };
206
207
 
207
- //# sourceMappingURL=accordion-B6a3vVgA.js.map
208
+ //# sourceMappingURL=accordion-Cjb6sx0G.js.map