themelia-react-ui 2.0.1 → 2.0.3

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 (490) hide show
  1. package/CHANGELOG.md +317 -131
  2. package/README.md +25 -9
  3. package/THIRD_PARTY_NOTICES.md +7 -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-BGua8ouh.js} +58 -54
  17. package/dist/auth-BGua8ouh.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-DaHESuiL.js +355 -0
  111. package/dist/combobox-DaHESuiL.js.map +1 -0
  112. package/dist/{combobox-DLl0bfiq.js → combobox-Dxo2fAYQ.js} +289 -279
  113. package/dist/combobox-Dxo2fAYQ.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-DD0DUPwJ.js} +114 -105
  117. package/dist/comments-DD0DUPwJ.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-field.d.ts +16 -0
  125. package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
  126. package/dist/components/base/combobox/index.d.ts +30 -4
  127. package/dist/components/base/forms/form-sizing.d.ts +11 -3
  128. package/dist/components/base/navigation/pagination.d.ts +5 -2
  129. package/dist/components/base/popover/popover.recipes.d.ts +15 -1
  130. package/dist/components/base/table/index.d.ts +9 -2
  131. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  132. package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
  133. package/dist/components/blocks/ai/ai-shimmer/types.d.ts +3 -0
  134. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +3 -1
  135. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +16 -8
  136. package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
  137. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +5 -0
  138. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
  139. package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
  140. package/dist/components/features/appointment-calendar/index.d.ts +3 -0
  141. package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
  142. package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
  143. package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
  144. package/dist/components/features/combobox/types.d.ts +4 -0
  145. package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
  146. package/dist/components/features/rich-text-editor/index.d.ts +1 -1
  147. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +6 -0
  148. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +9 -1
  149. package/dist/components/features/table/table-header.d.ts +1 -1
  150. package/dist/components/features/table/table.strings.d.ts +55 -1
  151. package/dist/components/features/table/table.types.d.ts +17 -4
  152. package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
  153. package/dist/components/primitives/number.d.ts +4 -2
  154. package/dist/components/primitives/value.d.ts +3 -1
  155. package/dist/components/typography/text-link.d.ts +4 -0
  156. package/dist/components/ui/combobox-dismiss.d.ts +16 -0
  157. package/dist/components/ui/combobox.d.ts +16 -7
  158. package/dist/components/ui/dialog.d.ts +1 -1
  159. package/dist/components/ui/item.d.ts +8 -8
  160. package/dist/components/ui/popover.d.ts +1 -1
  161. package/dist/components/ui/sheet.d.ts +1 -1
  162. package/dist/components/ui/tabs.d.ts +1 -1
  163. package/dist/{containers-DmWiJa2I.js → containers-Mu1LMGV1.js} +2 -2
  164. package/dist/{containers-DmWiJa2I.js.map → containers-Mu1LMGV1.js.map} +1 -1
  165. package/dist/{copyable-B3Gwgdqc.js → copyable-ClBuk_UK.js} +4 -4
  166. package/dist/{copyable-B3Gwgdqc.js.map → copyable-ClBuk_UK.js.map} +1 -1
  167. package/dist/{data-display-DafIvCl5.js → data-display-DT_khPl_.js} +98 -87
  168. package/dist/data-display-DT_khPl_.js.map +1 -0
  169. package/dist/{date-BgK3bTdo.js → date-DCrsDTZc.js} +5 -5
  170. package/dist/{date-BgK3bTdo.js.map → date-DCrsDTZc.js.map} +1 -1
  171. package/dist/{date-picker-CF-DtUpF.js → date-picker-B2K3ucWn.js} +594 -593
  172. package/dist/date-picker-B2K3ucWn.js.map +1 -0
  173. package/dist/date-pickers-Ds8gLaoP.js +175 -0
  174. package/dist/date-pickers-Ds8gLaoP.js.map +1 -0
  175. package/dist/{display-DsQTVzMz.js → display-hAc1HjpI.js} +49 -49
  176. package/dist/display-hAc1HjpI.js.map +1 -0
  177. package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
  178. package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
  179. package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
  180. package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
  181. package/dist/features/activities.js +398 -375
  182. package/dist/features/activities.js.map +1 -1
  183. package/dist/features/ai-chat.js +188 -179
  184. package/dist/features/ai-chat.js.map +1 -1
  185. package/dist/features/appointment-calendar.js +683 -0
  186. package/dist/features/appointment-calendar.js.map +1 -0
  187. package/dist/features/async-preview.js +109 -107
  188. package/dist/features/async-preview.js.map +1 -1
  189. package/dist/features/combobox.js +1 -1
  190. package/dist/features/comments.js +1 -1
  191. package/dist/features/data-view.js +137 -137
  192. package/dist/features/data-view.js.map +1 -1
  193. package/dist/features/email-composer.js +255 -255
  194. package/dist/features/email-composer.js.map +1 -1
  195. package/dist/features/event-calendar.js +254 -248
  196. package/dist/features/event-calendar.js.map +1 -1
  197. package/dist/features/filters.js +1 -1
  198. package/dist/features/global-search.js +35 -32
  199. package/dist/features/global-search.js.map +1 -1
  200. package/dist/features/kanban.js +118 -117
  201. package/dist/features/kanban.js.map +1 -1
  202. package/dist/features/map.js +233 -231
  203. package/dist/features/map.js.map +1 -1
  204. package/dist/features/media-library.js +789 -775
  205. package/dist/features/media-library.js.map +1 -1
  206. package/dist/features/mentions.js +1 -1
  207. package/dist/features/overlays.js +1 -1
  208. package/dist/features/products.js +922 -902
  209. package/dist/features/products.js.map +1 -1
  210. package/dist/features/questionnaire.js +28 -24
  211. package/dist/features/questionnaire.js.map +1 -1
  212. package/dist/features/resource-assignment.js +18 -15
  213. package/dist/features/resource-assignment.js.map +1 -1
  214. package/dist/features/resource.js +12 -12
  215. package/dist/features/resource.js.map +1 -1
  216. package/dist/features/rich-text-editor.js +2 -2
  217. package/dist/features/schema-form.js +15 -13
  218. package/dist/features/schema-form.js.map +1 -1
  219. package/dist/features/suggestions.js +3 -3
  220. package/dist/features/sync.js +11 -5
  221. package/dist/features/sync.js.map +1 -1
  222. package/dist/features/table.js +1 -1
  223. package/dist/features/theme-tweaker.js +493 -489
  224. package/dist/features/theme-tweaker.js.map +1 -1
  225. package/dist/feedback-BYIhtitP.js +239 -0
  226. package/dist/feedback-BYIhtitP.js.map +1 -0
  227. package/dist/{field-affordance-recipes-qQeIf4lG.js → field-affordance-recipes-DZhnIL_Y.js} +11 -18
  228. package/dist/field-affordance-recipes-DZhnIL_Y.js.map +1 -0
  229. package/dist/{filters-BkHH53uv.js → filters-DJVAveHA.js} +589 -580
  230. package/dist/filters-DJVAveHA.js.map +1 -0
  231. package/dist/{form-field-DUt4UxSV.js → form-field-CwH9y77i.js} +6 -5
  232. package/dist/form-field-CwH9y77i.js.map +1 -0
  233. package/dist/{form-sizing-By94KzXE.js → form-sizing-BdP_Mf5p.js} +39 -44
  234. package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
  235. package/dist/{forms-Bzha-Y3B.js → forms-B9G_xwzi.js} +8 -8
  236. package/dist/{forms-Bzha-Y3B.js.map → forms-B9G_xwzi.js.map} +1 -1
  237. package/dist/{forms-numeric-C0bvjRPZ.js → forms-numeric-B_jraJaQ.js} +309 -309
  238. package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
  239. package/dist/{header-BOefOKd1.js → header-BSfIEWbI.js} +160 -153
  240. package/dist/header-BSfIEWbI.js.map +1 -0
  241. package/dist/{hooks-9k_TtmKh.js → hooks-ClH9thn4.js} +2 -2
  242. package/dist/{hooks-9k_TtmKh.js.map → hooks-ClH9thn4.js.map} +1 -1
  243. package/dist/{icon-badge-CAuKupo9.js → icon-badge-DYKIwvOV.js} +4 -4
  244. package/dist/{icon-badge-CAuKupo9.js.map → icon-badge-DYKIwvOV.js.map} +1 -1
  245. package/dist/index.js +3 -3
  246. package/dist/input-CZw8iU99.js +21 -0
  247. package/dist/input-CZw8iU99.js.map +1 -0
  248. package/dist/input-DQdEd0YD.js +263 -0
  249. package/dist/input-DQdEd0YD.js.map +1 -0
  250. package/dist/{interaction-recipes-CHr0dJUs.js → interaction-recipes-XR9ZpVYL.js} +2 -1
  251. package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
  252. package/dist/item-K5_ghvze.js +275 -0
  253. package/dist/item-K5_ghvze.js.map +1 -0
  254. package/dist/layout/app-shell.js +1 -1
  255. package/dist/layout/auth.js +1 -1
  256. package/dist/layout/containers.js +1 -1
  257. package/dist/layout/header.js +1 -1
  258. package/dist/layout/hooks.js +1 -1
  259. package/dist/layout/navigation.js +1 -1
  260. package/dist/layout/page.js +1 -1
  261. package/dist/layout/settings.js +1 -1
  262. package/dist/layout/sidebar.js +2 -2
  263. package/dist/layout/workspace.js +1 -1
  264. package/dist/layout.js +10 -10
  265. package/dist/lib/affordance-geometry.generated.d.ts +71 -0
  266. package/dist/lib/editable-text-recipe.d.ts +4 -4
  267. package/dist/lib/field-affordance-recipes.d.ts +2 -2
  268. package/dist/lib/interaction-recipes.d.ts +5 -0
  269. package/dist/lib/theme-mode-css.d.ts +7 -0
  270. package/dist/lib/tone-recipes.d.ts +8 -0
  271. package/dist/lib/ui-provider/types.d.ts +2 -2
  272. package/dist/lib/use-popup-focus-recovery.d.ts +8 -0
  273. package/dist/lib/utils.js +1 -1
  274. package/dist/{media-gallery-DcTtAaeC.js → media-gallery-3zIVLMWH.js} +8 -8
  275. package/dist/media-gallery-3zIVLMWH.js.map +1 -0
  276. package/dist/{mentions-D-uyCh01.js → mentions-CGlEJ15c.js} +144 -142
  277. package/dist/mentions-CGlEJ15c.js.map +1 -0
  278. package/dist/{message-CdHgIWKf.js → message-DZ_ruyUV.js} +6 -5
  279. package/dist/message-DZ_ruyUV.js.map +1 -0
  280. package/dist/{metadata-list-X5rYAKSB.js → metadata-list-8N16ZMW_.js} +130 -119
  281. package/dist/metadata-list-8N16ZMW_.js.map +1 -0
  282. package/dist/{navigation-D3KwXmaq.js → navigation-Bnotn4AQ.js} +19 -19
  283. package/dist/navigation-Bnotn4AQ.js.map +1 -0
  284. package/dist/{navigation-HJf5zxlH.js → navigation-BzhHI3lo.js} +36 -35
  285. package/dist/navigation-BzhHI3lo.js.map +1 -0
  286. package/dist/{navigation-row-recipes-BVowojQw.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
  287. package/dist/{navigation-row-recipes-BVowojQw.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
  288. package/dist/{number-DMhe-Vsk.js → number-DbV1Dija.js} +36 -34
  289. package/dist/{number-DMhe-Vsk.js.map → number-DbV1Dija.js.map} +1 -1
  290. package/dist/{overflow-tab-bar-sQHXLlwQ.js → overflow-tab-bar-CWY7Nogn.js} +105 -103
  291. package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
  292. package/dist/{overlays-I0axtYA6.js → overlays-tMkF-VAN.js} +282 -278
  293. package/dist/overlays-tMkF-VAN.js.map +1 -0
  294. package/dist/{page-B5dTH9gE.js → page-CL9YeH_V.js} +8 -8
  295. package/dist/{page-B5dTH9gE.js.map → page-CL9YeH_V.js.map} +1 -1
  296. package/dist/{page-header-commands-DjzFEq3E.js → page-header-commands-DOb6WsfD.js} +5 -5
  297. package/dist/{page-header-commands-DjzFEq3E.js.map → page-header-commands-DOb6WsfD.js.map} +1 -1
  298. package/dist/pagination-BL25hu2s.js +158 -0
  299. package/dist/pagination-BL25hu2s.js.map +1 -0
  300. package/dist/{popover-Di55PyAI.js → popover-gnTOhbFM.js} +69 -66
  301. package/dist/popover-gnTOhbFM.js.map +1 -0
  302. package/dist/popover-menu-Cn9rUkdc.js +100 -0
  303. package/dist/popover-menu-Cn9rUkdc.js.map +1 -0
  304. package/dist/{popover.recipes-Bdyhj2db.js → popover.recipes-D3j8R8Yp.js} +17 -10
  305. package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
  306. package/dist/{primitives-B-CkiEMU.js → primitives-BFK08r9M.js} +45 -44
  307. package/dist/primitives-BFK08r9M.js.map +1 -0
  308. package/dist/primitives.js +4 -4
  309. package/dist/{progress-rnS8-uAW.js → progress-B1VnCT0K.js} +5 -5
  310. package/dist/{progress-rnS8-uAW.js.map → progress-B1VnCT0K.js.map} +1 -1
  311. package/dist/{receipt-D0oswZ0p.js → receipt-BVSOH3Xo.js} +9 -6
  312. package/dist/{receipt-D0oswZ0p.js.map → receipt-BVSOH3Xo.js.map} +1 -1
  313. package/dist/{rich-text-DvGulsNJ.js → rich-text-GOUyKQ-s.js} +3 -3
  314. package/dist/{rich-text-DvGulsNJ.js.map → rich-text-GOUyKQ-s.js.map} +1 -1
  315. package/dist/{rich-text-editor-sMU_Scqm.js → rich-text-editor-cRLC-eBK.js} +418 -426
  316. package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
  317. package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
  318. package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +1 -0
  319. package/dist/{scroll-area-Bt_vXY2b.js → scroll-area-DcI-M1UT.js} +2 -2
  320. package/dist/{scroll-area-Bt_vXY2b.js.map → scroll-area-DcI-M1UT.js.map} +1 -1
  321. package/dist/{separator-C8DlRGwF.js → separator-BDV-Y648.js} +3 -3
  322. package/dist/{separator-C8DlRGwF.js.map → separator-BDV-Y648.js.map} +1 -1
  323. package/dist/{separator-CYHnjsAb.js → separator-Bom7NsGO.js} +2 -2
  324. package/dist/{separator-CYHnjsAb.js.map → separator-Bom7NsGO.js.map} +1 -1
  325. package/dist/services/actions.js +1 -1
  326. package/dist/{settings-CQW3b-Cu.js → settings-ybnjVwbd.js} +20 -19
  327. package/dist/settings-ybnjVwbd.js.map +1 -0
  328. package/dist/{sheet-4SEvVYzA.js → sheet-ijlsjq-n.js} +76 -73
  329. package/dist/sheet-ijlsjq-n.js.map +1 -0
  330. package/dist/{sidebar-C7WWR29L.js → sidebar-Db6gkh3U.js} +183 -182
  331. package/dist/sidebar-Db6gkh3U.js.map +1 -0
  332. package/dist/{sidebar-d7Dg80ln.js → sidebar-DkTO4VTO.js} +14 -13
  333. package/dist/{sidebar-d7Dg80ln.js.map → sidebar-DkTO4VTO.js.map} +1 -1
  334. package/dist/{skeleton-Cz890JZF.js → skeleton-Byjnt7qr.js} +3 -3
  335. package/dist/{skeleton-Cz890JZF.js.map → skeleton-Byjnt7qr.js.map} +1 -1
  336. package/dist/smart-card-DiC5aac3.js +604 -0
  337. package/dist/smart-card-DiC5aac3.js.map +1 -0
  338. package/dist/{structure-DC2dygdA.js → structure-BmisBK-3.js} +2 -2
  339. package/dist/{structure-DC2dygdA.js.map → structure-BmisBK-3.js.map} +1 -1
  340. package/dist/style.css +1 -1
  341. package/dist/table-BweFy_P9.js +1530 -0
  342. package/dist/table-BweFy_P9.js.map +1 -0
  343. package/dist/{table-CIKyLUsy.js → table-DsfzoUia.js} +75 -63
  344. package/dist/table-DsfzoUia.js.map +1 -0
  345. package/dist/{tabs-DwBJfjxX.js → tabs-CDocW5D1.js} +14 -13
  346. package/dist/tabs-CDocW5D1.js.map +1 -0
  347. package/dist/text-inputs-f9Ia-aCi.js +353 -0
  348. package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
  349. package/dist/theme-mode-css-BB-_RYab.js +14 -0
  350. package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
  351. package/dist/theme-scope-BJ6eE2xt.js +50 -0
  352. package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
  353. package/dist/theme.css +285 -228
  354. package/dist/themes/green.css +16 -12
  355. package/dist/timelines-CwM_9IhD.js +457 -0
  356. package/dist/timelines-CwM_9IhD.js.map +1 -0
  357. package/dist/{tone-recipes-CPoExcTE.js → tone-recipes-BPsRAvhu.js} +5 -2
  358. package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
  359. package/dist/{tooltip-CsfgrfS7.js → tooltip-yiRJUFjp.js} +4 -4
  360. package/dist/{tooltip-CsfgrfS7.js.map → tooltip-yiRJUFjp.js.map} +1 -1
  361. package/dist/{tree-BiKhg8AY.js → tree-WnKQzwbq.js} +9 -9
  362. package/dist/{tree-BiKhg8AY.js.map → tree-WnKQzwbq.js.map} +1 -1
  363. package/dist/typography/rich-text.js +1 -1
  364. package/dist/{typography-DTRkE9zL.js → typography-UTnveOEy.js} +6 -6
  365. package/dist/typography-UTnveOEy.js.map +1 -0
  366. package/dist/typography.js +2 -2
  367. package/dist/{ui-provider-1D_NSYzO.js → ui-provider-C_U0Xma4.js} +3 -3
  368. package/dist/ui-provider-C_U0Xma4.js.map +1 -0
  369. package/dist/ui-provider.js +2 -2
  370. package/dist/{upload-BO8-CLN6.js → upload-CXyxmQBP.js} +13 -12
  371. package/dist/upload-CXyxmQBP.js.map +1 -0
  372. package/dist/{upload-queue-EOC8g1gf.js → upload-queue-Boscubn9.js} +11 -9
  373. package/dist/upload-queue-Boscubn9.js.map +1 -0
  374. package/dist/{usage-card-obRaBskq.js → usage-card-BhO5eqkX.js} +53 -37
  375. package/dist/usage-card-BhO5eqkX.js.map +1 -0
  376. package/dist/use-popup-focus-recovery-C0QPvgOR.js +36 -0
  377. package/dist/use-popup-focus-recovery-C0QPvgOR.js.map +1 -0
  378. package/dist/{utils-l5LpDw2z.js → utils-BRhFDwuU.js} +59 -44
  379. package/dist/utils-BRhFDwuU.js.map +1 -0
  380. package/dist/{value-inputs-TAYMX111.js → value-inputs-TaX4OjNk.js} +268 -252
  381. package/dist/value-inputs-TaX4OjNk.js.map +1 -0
  382. package/dist/{value-typography-b8wpz1eX.js → value-typography-BP8OG6h5.js} +2 -2
  383. package/dist/{value-typography-b8wpz1eX.js.map → value-typography-BP8OG6h5.js.map} +1 -1
  384. package/dist/{workspace-DH0v0KcB.js → workspace-B-OEm3Kf.js} +34 -33
  385. package/dist/workspace-B-OEm3Kf.js.map +1 -0
  386. package/docs/consumer-skill/SKILL.md +3 -3
  387. package/docs/consumer-skill/references/agents-md.md +1 -1
  388. package/docs/consumer-skill/references/composition.md +8 -6
  389. package/docs/consumer-skill/references/installation.md +6 -0
  390. package/docs/consumer-skill/references/integration.md +4 -3
  391. package/docs/consumer-skill/references/public-api.json +105 -2
  392. package/docs/consumer-skill/references/review.md +7 -0
  393. package/docs/consumer-skill/references/theming.md +71 -6
  394. package/docs/consumer-skill/references/tokens.json +1 -1
  395. package/docs/consumer-skill/references/workflows.md +26 -0
  396. package/docs/consumer-skill/scripts/composition-policy.mjs +3 -2
  397. package/docs/consumer-skill/scripts/surface-policy.mjs +11 -0
  398. package/package.json +8 -4
  399. package/dist/accordion-B6a3vVgA.js.map +0 -1
  400. package/dist/action-menu-TzCoSlwL.js +0 -280
  401. package/dist/action-menu-TzCoSlwL.js.map +0 -1
  402. package/dist/affordance-geometry.generated-B5iu-Mkr.js +0 -69
  403. package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +0 -1
  404. package/dist/ai-artifact-BMJdv-6q.js +0 -1115
  405. package/dist/ai-artifact-BMJdv-6q.js.map +0 -1
  406. package/dist/attachment-BtfhGm8i.js +0 -245
  407. package/dist/attachment-BtfhGm8i.js.map +0 -1
  408. package/dist/auth-CYxKfo69.js.map +0 -1
  409. package/dist/avatar-BBnEJIx8.js.map +0 -1
  410. package/dist/badge-MrKVNzW9.js.map +0 -1
  411. package/dist/batch-action-bar-BZGDG-Si.js.map +0 -1
  412. package/dist/breadcrumbs-D5t7I023.js.map +0 -1
  413. package/dist/buttons-SbIcm1HJ.js.map +0 -1
  414. package/dist/cards-CiiHpKYd.js +0 -66
  415. package/dist/cards-CiiHpKYd.js.map +0 -1
  416. package/dist/chart-QfrARkXl.js.map +0 -1
  417. package/dist/choice-inputs-t6w3ATNz.js.map +0 -1
  418. package/dist/code-block-Dgbu-CU3.js.map +0 -1
  419. package/dist/combobox-2Ic8N9bL.js +0 -278
  420. package/dist/combobox-2Ic8N9bL.js.map +0 -1
  421. package/dist/combobox-DLl0bfiq.js.map +0 -1
  422. package/dist/comments-BpDuCUUu.js.map +0 -1
  423. package/dist/data-display-DafIvCl5.js.map +0 -1
  424. package/dist/date-picker-CF-DtUpF.js.map +0 -1
  425. package/dist/date-pickers-BmzxJl5l.js +0 -174
  426. package/dist/date-pickers-BmzxJl5l.js.map +0 -1
  427. package/dist/display-DsQTVzMz.js.map +0 -1
  428. package/dist/dropdown-menu-E2qmdC7o.js +0 -193
  429. package/dist/dropdown-menu-E2qmdC7o.js.map +0 -1
  430. package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
  431. package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
  432. package/dist/feedback-qNuMBtRH.js +0 -233
  433. package/dist/feedback-qNuMBtRH.js.map +0 -1
  434. package/dist/field-affordance-recipes-qQeIf4lG.js.map +0 -1
  435. package/dist/filters-BkHH53uv.js.map +0 -1
  436. package/dist/form-field-DUt4UxSV.js.map +0 -1
  437. package/dist/form-sizing-By94KzXE.js.map +0 -1
  438. package/dist/forms-numeric-C0bvjRPZ.js.map +0 -1
  439. package/dist/header-BOefOKd1.js.map +0 -1
  440. package/dist/input-DWhBBBww.js +0 -262
  441. package/dist/input-DWhBBBww.js.map +0 -1
  442. package/dist/input-Ddi_LSYv.js +0 -20
  443. package/dist/input-Ddi_LSYv.js.map +0 -1
  444. package/dist/interaction-recipes-CHr0dJUs.js.map +0 -1
  445. package/dist/item-DEmDiTlD.js +0 -265
  446. package/dist/item-DEmDiTlD.js.map +0 -1
  447. package/dist/media-gallery-DcTtAaeC.js.map +0 -1
  448. package/dist/mentions-D-uyCh01.js.map +0 -1
  449. package/dist/message-CdHgIWKf.js.map +0 -1
  450. package/dist/metadata-list-X5rYAKSB.js.map +0 -1
  451. package/dist/navigation-D3KwXmaq.js.map +0 -1
  452. package/dist/navigation-HJf5zxlH.js.map +0 -1
  453. package/dist/overflow-tab-bar-sQHXLlwQ.js.map +0 -1
  454. package/dist/overlays-I0axtYA6.js.map +0 -1
  455. package/dist/pagination-3bPA_a6K.js +0 -149
  456. package/dist/pagination-3bPA_a6K.js.map +0 -1
  457. package/dist/popover-Di55PyAI.js.map +0 -1
  458. package/dist/popover-menu-B71Tn2Qz.js +0 -99
  459. package/dist/popover-menu-B71Tn2Qz.js.map +0 -1
  460. package/dist/popover.recipes-Bdyhj2db.js.map +0 -1
  461. package/dist/primitives-B-CkiEMU.js.map +0 -1
  462. package/dist/rich-text-editor-sMU_Scqm.js.map +0 -1
  463. package/dist/rich-text-editor.recipes-CadiF_Uu.js +0 -88
  464. package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +0 -1
  465. package/dist/settings-CQW3b-Cu.js.map +0 -1
  466. package/dist/sheet-4SEvVYzA.js.map +0 -1
  467. package/dist/sidebar-C7WWR29L.js.map +0 -1
  468. package/dist/smart-card-lFKxn5Hu.js +0 -595
  469. package/dist/smart-card-lFKxn5Hu.js.map +0 -1
  470. package/dist/spinner-fa3h1Aif.js +0 -80
  471. package/dist/spinner-fa3h1Aif.js.map +0 -1
  472. package/dist/table-CIKyLUsy.js.map +0 -1
  473. package/dist/table-CrcLN9Io.js +0 -1458
  474. package/dist/table-CrcLN9Io.js.map +0 -1
  475. package/dist/tabs-DwBJfjxX.js.map +0 -1
  476. package/dist/text-inputs-aaK9wcDT.js +0 -326
  477. package/dist/text-inputs-aaK9wcDT.js.map +0 -1
  478. package/dist/theme-scope-kStaAer0.js +0 -39
  479. package/dist/theme-scope-kStaAer0.js.map +0 -1
  480. package/dist/timelines-C_SBwHNP.js +0 -442
  481. package/dist/timelines-C_SBwHNP.js.map +0 -1
  482. package/dist/tone-recipes-CPoExcTE.js.map +0 -1
  483. package/dist/typography-DTRkE9zL.js.map +0 -1
  484. package/dist/ui-provider-1D_NSYzO.js.map +0 -1
  485. package/dist/upload-BO8-CLN6.js.map +0 -1
  486. package/dist/upload-queue-EOC8g1gf.js.map +0 -1
  487. package/dist/usage-card-obRaBskq.js.map +0 -1
  488. package/dist/utils-l5LpDw2z.js.map +0 -1
  489. package/dist/value-inputs-TAYMX111.js.map +0 -1
  490. package/dist/workspace-DH0v0KcB.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttons-DPZekJFu.js","names":["ButtonGroup","ButtonGroupText","ButtonGroupSeparator","ButtonGroupPrimitive","styles","ButtonGroupTextPrimitive","ButtonGroupSeparatorPrimitive","_Fragment","PrimitiveButton","_Fragment","styles","React","React","React","React","useButtonConfig","useDensityConfig","resolveComponentScale","cn","affordanceGeometry","Separator","Text","focusRecipes","TooltipTrigger","TooltipContent","Tooltip","Button$1","React$1","Fragment$1","buttonGroupVariants","orientation","ButtonGroup$1","props","className","ButtonGroupText$1","useRender","mergeProps","ButtonGroupSeparator$1","buttonGroupRecipes","ButtonGroup","isScalarContent","content","ButtonGroupText","children","ButtonGroupSeparator","buttonRecipes","buttonVariants","cva","usePendingButtonFocus","element","useRef","lastFocused","wasPending","restore","ref","useCallback","node","focus","blur","cleanup","forwardedRef","useLayoutEffect","previous","pending","doc","eligible","removeListeners","pointer","keyboard","cancel","event","usePresentation","defaults","resolved","tone","buttonStyle","size","defaultScale","iconOnly","fullWidth","truncate","Content","Icon","glyph","iconPosition","BaseButton","forwardRef","presentation","focusRef","state","BaseButtonLink","relTokens","rel","target","disabled","tabIndex","defaultButtonLoadingStrings","useLoaderButtonState","stringsProp","strings","useStrings","isLoading","setIsLoading","useState","loading","setShowCompletedState","useEffect","handlesLoading","timeoutId","LoaderButtonContent","_size","loadingText","isSimpleText","Loader2","LoaderButton","TooltipButton","mergedProps","triggerProps","withTooltip","usesLoaderPath","LoadingButtonLink","loader","ButtonLink","_withTooltip","_loading","_handlesLoading","_strings","linkProps","toLinkProps","_type","_form","_formAction","_formEncType","_formMethod","_formNoValidate","_formTarget","_name","_value","_nativeButton","_focusableWhenDisabled","_render","Button","href","link","_download","_hrefLang","_media","_ping","_referrerPolicy","_rel","_target","baseProps","actionProps","sizeClasses","TextButton","resolvedSize"],"sources":["../src/components/ui/button-group.tsx","../src/components/base/buttons/button-group.recipes.ts","../src/components/base/buttons/button-group.tsx","../src/components/base/buttons/button.recipes.ts","../src/components/base/buttons/button.variants.ts","../src/components/base/buttons/use-pending-button-focus.ts","../src/components/base/buttons/base-button.tsx","../src/components/base/buttons/loader-button.tsx","../src/components/base/buttons/tooltip-button.tsx","../src/components/base/buttons/button.tsx","../src/components/base/buttons/text-button.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Separator } from \"./separator\"\n\nconst buttonGroupVariants = ({ orientation = \"horizontal\" }: { orientation?: \"horizontal\" | \"vertical\" } = {}) =>\n orientation === \"vertical\" ? \"button-group-vertical\" : \"button-group-horizontal\"\n\nfunction ButtonGroup({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<\"div\"> & { orientation?: \"horizontal\" | \"vertical\" }) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(\"button-group--primitive\", className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\"button-group-text--primitive\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"button-group-text\",\n },\n })\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\"button-group-separator--primitive\", className)}\n {...props}\n />\n )\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n}\n","/** Private Tailwind recipes; public props and DOM hooks remain owned by the component. */\nexport const buttonGroupRecipes = {\n\t// Joined edges drop the following segment's leading border instead of overlapping\n\t// by a pixel: translucent hairlines would otherwise double up into a darker seam.\n\troot: \"inline-flex items-stretch rounded-inner box-border data-[orientation=vertical]:flex-col [&[data-orientation=horizontal]>:not(:last-child)]:rounded-e-none [&[data-orientation=horizontal]>:not(:first-child)]:rounded-s-none [&[data-orientation=horizontal]>:not(:first-child)]:border-s-0 [&[data-orientation=vertical]>:not(:last-child)]:rounded-b-none [&[data-orientation=vertical]>:not(:first-child)]:rounded-t-none [&[data-orientation=vertical]>:not(:first-child)]:border-t-0\",\n\t// A text segment shares the default outline button's corner and hairline.\n\ttext: \"inline-flex items-center rounded-inner px-control-sm py-0 bg-muted border border-input text-sm text-muted-foreground\",\n\tseparator: \"bg-border w-px self-stretch\",\n} as const satisfies Record<string, string>;\n","/**\n * ButtonGroup — base wrapper around the shadcn `ui/button-group` primitive.\n *\n * What this layer adds on top of the primitive:\n * - Stable BEM hooks (`button-group--component`, `button-group-text--component`,\n * `button-group-separator--component`) on each wrapped part's outermost node.\n * - Design-system typography for the scalar copy inside `ButtonGroupText`,\n * while arbitrary `ReactNode` content (icons, `kbd`, nested controls) passes\n * through untouched so the compound pattern stays composable.\n * - Keeps the primitive's `orientation` variant, segmented-radius handling, and\n * every native `div` prop by spread.\n *\n * Compose it as `<ButtonGroup><Button/><ButtonGroupSeparator/><Button/></ButtonGroup>`.\n * Reach for it when adjacent buttons must read as one segmented control; use\n * `Stack` when the buttons are merely peers with a gap between them.\n */\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport {\n\tButtonGroup as ButtonGroupPrimitive,\n\tButtonGroupSeparator as ButtonGroupSeparatorPrimitive,\n\tButtonGroupText as ButtonGroupTextPrimitive,\n\tbuttonGroupVariants,\n} from '../../ui/button-group';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { buttonGroupRecipes as styles } from './button-group.recipes';\n\nexport type ButtonGroupProps = ComponentProps<typeof ButtonGroupPrimitive>;\nexport type ButtonGroupTextProps = ComponentProps<typeof ButtonGroupTextPrimitive>;\nexport type ButtonGroupSeparatorProps = ComponentProps<typeof ButtonGroupSeparatorPrimitive>;\n\n/** Segmented shell that joins adjacent buttons into a single control. */\nfunction ButtonGroup({ className, ...props }: ButtonGroupProps) {\n\treturn (\n\t\t<ButtonGroupPrimitive className={cn('button-group--component', styles.root, className)} {...props} />\n\t);\n}\n\nfunction isScalarContent(content: ReactNode): content is string | number | bigint {\n\treturn typeof content === 'string' || typeof content === 'number' || typeof content === 'bigint';\n}\n\n/** Non-interactive label segment — scalar copy renders through Typography. */\nfunction ButtonGroupText({ children, className, ...props }: ButtonGroupTextProps) {\n\treturn (\n\t\t<ButtonGroupTextPrimitive className={cn('button-group-text--component', styles.text, className)} {...props}>\n\t\t\t{isScalarContent(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t)}\n\t\t</ButtonGroupTextPrimitive>\n\t);\n}\n\n/** Hairline divider between two segments of the group. */\nfunction ButtonGroupSeparator({ className, ...props }: ButtonGroupSeparatorProps) {\n\treturn (\n\t\t<ButtonGroupSeparatorPrimitive\n\t\t\tclassName={cn('button-group-separator--component', styles.separator, className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants };\n","/** Shared interaction states and loader anatomy; public variants own geometry. */\nexport const buttonRecipes = {\n\tsolidInteractive: '[&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:brightness-95 [&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:brightness-90',\n\t// Outline and ghost buttons hover with the same accent fill as rows and menus, paired\n\t// with its foreground. The text pairing is a plain hover so a component's own hover\n\t// colour (a destructive remove icon, a segment label) still merges over it.\n\tneutralInteractive: 'hover:text-accent-foreground [&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-accent [&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-muted',\n\tsecondaryInteractive: 'hover:text-accent-foreground [&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-accent [&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-muted',\n\tprimaryInteractive: '[&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-primary/10 [&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-primary/20',\n\tdestructiveInteractive: '[&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-destructive/10 [&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-destructive/20',\n\tsuccessInteractive: '[&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-success/10 [&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-success/20',\n\twarningInteractive: '[&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-warning/10 [&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-warning/20',\n\tinfoInteractive: '[&:hover:not(:active):not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-info/10 [&:active:not(:disabled):not([data-disabled]):not([aria-disabled=true])]:bg-info/20',\n\tisLoading: 'cursor-wait',\n\ticon: 'base-button-icon pointer-events-none shrink-0',\n\tspinner: 'animate-spin',\n} as const;\n","import { cva } from 'class-variance-authority';\nimport { affordanceGeometry } from '../../../lib/affordance-geometry.generated';\nimport { buttonRecipes } from './button.recipes';\nimport { focusRecipes } from '../../../lib/focus-recipes';\n\n/** Shared geometry and semantic tone/treatment pairs; no extra component tokens. */\n// Labels wrap within the container (capped at max-w-full); truncate keeps one line with an ellipsis.\nexport const buttonVariants = cva(`box-border inline-flex max-w-full shrink-0 items-center justify-center gap-space-sm [&_svg:not([class*=size-])]:size-icon [&_svg]:shrink-0 text-center [overflow-wrap:break-word] rounded-inner border font-sans font-medium no-underline outline-none transition-[background-color,border-color,color,filter,box-shadow] ${focusRecipes.frame} disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:cursor-not-allowed aria-disabled:opacity-50`, {\n variants: {\n tone: {primary: '', neutral: '', secondary: '', destructive: '', success: '', warning: '', info: ''},\n buttonStyle: {\n solid: `border-transparent ${buttonRecipes.solidInteractive}`,\n outline: 'border-input bg-transparent',\n ghost: 'border-transparent bg-transparent',\n },\n // Keep leading after text size: class merging treats a later font size as\n // owning its default line height and would remove an earlier leading-none.\n // The block inset is capped so a one-line label always fits the action height.\n size: {\n sm: `px-control-sm ${affordanceGeometry.buttonBlockPadding.sm} text-sm leading-tight`,\n md: `px-control ${affordanceGeometry.buttonBlockPadding.md} text-sm leading-tight`,\n lg: `px-control ${affordanceGeometry.buttonBlockPadding.lg} text-sm leading-tight`,\n },\n iconOnly: {true: 'px-0 py-0', false: ''},\n truncate: {true: 'min-w-0 shrink whitespace-nowrap', false: ''},\n fullWidth: {true: 'w-full', false: ''},\n },\n compoundVariants: [\n {tone: 'info', buttonStyle: ['outline', 'ghost'], class: buttonRecipes.infoInteractive},\n {tone: 'warning', buttonStyle: ['outline', 'ghost'], class: buttonRecipes.warningInteractive},\n {tone: 'success', buttonStyle: ['outline', 'ghost'], class: buttonRecipes.successInteractive},\n {tone: 'destructive', buttonStyle: ['outline', 'ghost'], class: buttonRecipes.destructiveInteractive},\n {tone: 'secondary', buttonStyle: ['outline', 'ghost'], class: buttonRecipes.secondaryInteractive},\n {tone: 'neutral', buttonStyle: ['outline', 'ghost'], class: buttonRecipes.neutralInteractive},\n {tone: 'primary', buttonStyle: ['outline', 'ghost'], class: buttonRecipes.primaryInteractive},\n {tone: 'primary', buttonStyle: 'solid', class: 'bg-primary text-primary-foreground'},\n {tone: 'primary', buttonStyle: 'outline', class: 'border-primary/60 text-primary-accent'},\n {tone: 'primary', buttonStyle: 'ghost', class: 'text-primary-accent'},\n {tone: 'neutral', buttonStyle: 'solid', class: 'bg-foreground text-background'},\n {tone: 'neutral', buttonStyle: 'outline', class: 'border-input text-foreground'},\n {tone: 'neutral', buttonStyle: 'ghost', class: 'text-foreground'},\n {tone: 'secondary', buttonStyle: 'solid', class: 'bg-secondary text-secondary-foreground'},\n // Neutral and default outlines draw the shared control boundary, like every field.\n {tone: 'secondary', buttonStyle: 'outline', class: 'border-input text-secondary-foreground'},\n {tone: 'secondary', buttonStyle: 'ghost', class: 'text-secondary-foreground'},\n {tone: 'destructive', buttonStyle: 'solid', class: 'bg-destructive text-destructive-foreground'},\n {tone: 'destructive', buttonStyle: 'outline', class: 'border-destructive/60 text-destructive'},\n {tone: 'destructive', buttonStyle: 'ghost', class: 'text-destructive'},\n {tone: 'success', buttonStyle: 'solid', class: 'bg-success text-success-foreground'},\n {tone: 'success', buttonStyle: 'outline', class: 'border-success/60 text-success'},\n {tone: 'success', buttonStyle: 'ghost', class: 'text-success'},\n {tone: 'warning', buttonStyle: 'solid', class: 'bg-warning text-warning-foreground'},\n {tone: 'warning', buttonStyle: 'outline', class: 'border-warning/60 text-warning-accent'},\n {tone: 'warning', buttonStyle: 'ghost', class: 'text-warning-accent'},\n {tone: 'info', buttonStyle: 'solid', class: 'bg-info text-info-foreground'},\n {tone: 'info', buttonStyle: 'outline', class: 'border-info/60 text-info'},\n {tone: 'info', buttonStyle: 'ghost', class: 'text-info'},\n // Text buttons treat the action height as a minimum, so a wrapped label grows the\n // button instead of overflowing it; icon-only buttons stay fixed squares.\n {size: 'sm', iconOnly: false, class: 'min-h-action-sm'},\n {size: 'md', iconOnly: false, class: 'min-h-action'},\n {size: 'lg', iconOnly: false, class: 'min-h-action-lg'},\n {size: 'sm', iconOnly: true, class: 'size-action-sm'},\n {size: 'md', iconOnly: true, class: 'size-action'},\n {size: 'lg', iconOnly: true, class: 'size-action-lg'},\n ],\n defaultVariants: {tone: 'secondary', buttonStyle: 'outline', size: 'md', iconOnly: false, fullWidth: false, truncate: false},\n});\n","import { useCallback, useLayoutEffect, useRef, type ForwardedRef, type RefCallback } from 'react';\n\n/** Native disabling can drop focused busy actions to body; restore only an unclaimed focus. */\nexport function usePendingButtonFocus(pending: boolean, forwardedRef: ForwardedRef<HTMLElement>) {\n const element = useRef<HTMLElement | null>(null);\n const lastFocused = useRef(false);\n const wasPending = useRef(false);\n const restore = useRef(false);\n const ref = useCallback<RefCallback<HTMLElement>>(node => {\n element.current = node;\n const focus = () => {lastFocused.current = true;};\n const blur = () => {\n // Disabling can blur before the pending layout effect runs.\n if (!wasPending.current && !node?.matches(':disabled')) lastFocused.current = false;\n };\n node?.addEventListener('focus', focus);\n node?.addEventListener('blur', blur);\n const cleanup = typeof forwardedRef === 'function' ? (forwardedRef as RefCallback<HTMLElement>)(node) : undefined;\n if (forwardedRef && typeof forwardedRef !== 'function') forwardedRef.current = node;\n return () => {\n node?.removeEventListener('focus', focus);\n node?.removeEventListener('blur', blur);\n if (element.current === node) element.current = null;\n if (typeof cleanup === 'function') cleanup();\n else if (typeof forwardedRef === 'function') forwardedRef(null);\n else if (forwardedRef) forwardedRef.current = null;\n };\n }, [forwardedRef]);\n\n useLayoutEffect(() => {\n const node = element.current;\n const previous = wasPending.current;\n wasPending.current = pending;\n if (!node) return;\n const doc = node.ownerDocument;\n if (!pending && !previous) lastFocused.current = doc.activeElement === node;\n if (pending && !previous) restore.current = lastFocused.current || doc.activeElement === node;\n if (!pending && previous) {\n const eligible = restore.current;\n restore.current = false;\n if (eligible && node.isConnected && !node.matches(':disabled,[aria-disabled=true]') && (doc.activeElement === doc.body || doc.activeElement === doc.documentElement)) node.focus({preventScroll:true});\n }\n if (!pending || !restore.current) return;\n const removeListeners = () => {\n doc.removeEventListener('focusin', focus, true);\n doc.removeEventListener('pointerdown', pointer, true);\n doc.removeEventListener('keydown', keyboard, true);\n };\n const cancel = () => {\n lastFocused.current = false;\n restore.current = false;\n removeListeners();\n };\n const focus = (event: FocusEvent) => {\n // Body is the browser's fallback when a native button becomes disabled.\n if (event.target !== node && event.target !== doc.body && event.target !== doc.documentElement) cancel();\n };\n const pointer = (event: PointerEvent) => {\n if (!node.contains(event.target as Node)) cancel();\n };\n const keyboard = (event: KeyboardEvent) => {\n if (event.key === 'Tab') cancel();\n };\n doc.addEventListener('focusin', focus, true);\n doc.addEventListener('pointerdown', pointer, true);\n doc.addEventListener('keydown', keyboard, true);\n return removeListeners;\n });\n return ref;\n}\n","import { forwardRef, type AnchorHTMLAttributes, type ElementType, type ReactNode } from 'react';\nimport { Button as PrimitiveButton } from '../../ui/button';\nimport { useButtonConfig, useDensityConfig, type ButtonSize, type ButtonStyle, type ButtonTone } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { cn } from '../../../lib/utils';\nimport { buttonVariants } from './button.variants';\nimport { usePendingButtonFocus } from './use-pending-button-focus';\n\nexport type { ButtonSize, ButtonStyle, ButtonTone } from '../../../lib/ui-provider';\nexport type IconPosition = 'left' | 'right';\ninterface PresentationProps {\n /** Semantic color. Omit for the neutral button (`UIProvider.button.defaultTone`, `secondary`); use `primary` for the one main command. */\n tone?: ButtonTone;\n /** Emphasis. Defaults to `solid` when `tone` is set, otherwise to `UIProvider.button.defaultButtonStyle` (`outline`). */\n buttonStyle?: ButtonStyle;\n /**\n * Keep the label on one line and end it with an ellipsis instead of wrapping.\n * Use where the button cannot grow, such as a joined group or a dense toolbar.\n */\n truncate?: boolean;\n size?: ButtonSize;\n iconOnly?: boolean;\n fullWidth?: boolean;\n icon?: ElementType;\n iconPosition?: IconPosition;\n children?: ReactNode;\n}\nexport interface BaseButtonProps extends Omit<PrimitiveButton.Props, 'children' | 'size' | 'variant'>, PresentationProps {}\nexport interface BaseButtonLinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'children' | 'href'>, PresentationProps {href: string; disabled?: boolean}\n\nfunction usePresentation({tone, buttonStyle, size, iconOnly = false, fullWidth = false, truncate = false}: PresentationProps) {\n const defaults = useButtonConfig();\n const {defaultScale} = useDensityConfig();\n // Choosing a tone asks for that tone's solid treatment; untoned buttons use the default pair.\n const resolved = {tone: tone ?? defaults.defaultTone, buttonStyle: buttonStyle ?? (tone === undefined ? defaults.defaultButtonStyle : 'solid'), size: resolveComponentScale(size, defaultScale), iconOnly, fullWidth, truncate};\n return {\n ...resolved,\n classes: buttonVariants(resolved),\n attributes: {'data-slot': 'button', 'data-tone': resolved.tone, 'data-style': resolved.buttonStyle, 'data-size': resolved.size, 'data-icon-only': iconOnly || undefined, 'data-full-width': fullWidth || undefined, 'data-truncate': truncate || undefined},\n };\n}\n\nfunction Content({icon: Icon, iconPosition = 'left', truncate = false, children}: Pick<PresentationProps, 'icon' | 'iconPosition' | 'truncate' | 'children'>) {\n const glyph = Icon && <Icon className=\"size-icon shrink-0\" aria-hidden=\"true\" />;\n // An ellipsis needs a block box: bare text inside the flex button cannot truncate.\n const label = truncate && (typeof children === 'string' || typeof children === 'number') ? <span className=\"min-w-0 truncate\">{children}</span> : children;\n return <>{iconPosition === 'left' && glyph}{label}{iconPosition === 'right' && glyph}</>;\n}\n\nexport const BaseButton = forwardRef<HTMLElement, BaseButtonProps>(function BaseButton({tone, buttonStyle, size, iconOnly, fullWidth, truncate, icon, iconPosition, className, children, ...props}, ref) {\n const presentation = usePresentation({tone, buttonStyle, size, iconOnly, fullWidth, truncate, children});\n const focusRef = usePendingButtonFocus(props['aria-busy'] === true || props['aria-busy'] === 'true', ref);\n return <PrimitiveButton {...props} {...presentation.attributes} ref={focusRef} className={(state) => cn('base-button--component', presentation.classes, typeof className === 'function' ? className(state) : className)}><Content icon={icon} iconPosition={iconPosition} truncate={truncate}>{children}</Content></PrimitiveButton>;\n});\n\n/** Navigation remains an anchor: Base UI's Button render API deliberately enforces button semantics. */\nexport const BaseButtonLink = forwardRef<HTMLAnchorElement, BaseButtonLinkProps>(function BaseButtonLink({tone, buttonStyle, size, iconOnly, fullWidth, truncate, icon, iconPosition, className, children, disabled = false, tabIndex, onClick, rel, target, ...props}, ref) {\n const presentation = usePresentation({tone, buttonStyle, size, iconOnly, fullWidth, truncate, children});\n const relTokens = new Set(rel?.split(/\\s+/).filter(Boolean));\n if (target?.toLowerCase() === '_blank') {if (!relTokens.size) relTokens.add('noreferrer'); relTokens.add('noopener');}\n return <a {...props} {...presentation.attributes} ref={ref} target={target} rel={relTokens.size ? [...relTokens].join(' ') : undefined} aria-disabled={disabled || props['aria-disabled'] || undefined} tabIndex={disabled ? -1 : tabIndex} className={cn('base-button--component', presentation.classes, className)} onClick={(event) => {\n if (disabled) {event.preventDefault(); event.stopPropagation(); return;}\n onClick?.(event);\n }}><Content icon={icon} iconPosition={iconPosition} truncate={truncate}>{children}</Content></a>;\n});\n","import { Loader2 } from 'lucide-react';\nimport * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { Text } from '../../typography';\nimport { BaseButton, type BaseButtonProps, type ButtonSize } from './base-button';\nimport { buttonRecipes as styles } from './button.recipes';\n\nexport interface ButtonLoadingStrings {\n\t/** Shows the spinner and blocks activation. */\n\tloading: string;\n\tcompleted: string;\n}\n\nexport const defaultButtonLoadingStrings: ButtonLoadingStrings = {\n\tloading: 'Loading...',\n\tcompleted: 'Completed',\n};\n\nexport interface LoaderButtonProps extends BaseButtonProps {\n\t/** Shows the spinner and blocks activation. */\n\tloading?: boolean;\n\t/** Opts into the loading-capable button even before `loading` is true, so the first press does not swap component identity. */\n\thandlesLoading?: boolean;\n\t/** Overrides the loading announcement copy. */\n\tstrings?: StringsProp<ButtonLoadingStrings>;\n}\n\ninterface UseLoaderButtonStateOptions {\n\t/** Shows the spinner and blocks activation. */\n\tloading?: boolean;\n\t/** Opts into the loading-capable button even before `loading` is true, so the first press does not swap component identity. */\n\thandlesLoading?: boolean;\n\t/** Overrides the loading announcement copy. */\n\tstrings?: StringsProp<ButtonLoadingStrings>;\n}\n\nexport function useLoaderButtonState({\n\tloading = false,\n\thandlesLoading,\n\tstrings: stringsProp,\n}: UseLoaderButtonStateOptions) {\n\tconst strings = useStrings(defaultButtonLoadingStrings, stringsProp);\n\tconst [isLoading, setIsLoading] = useState(loading);\n\tconst [, setShowCompletedState] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (loading) {\n\t\t\tsetIsLoading(true);\n\t\t}\n\t}, [loading]);\n\n\tuseEffect(() => {\n\t\tif (handlesLoading && loading) {\n\t\t\tsetIsLoading(true);\n\t\t}\n\t}, [loading, handlesLoading]);\n\n\tuseEffect(() => {\n\t\tlet timeoutId: ReturnType<typeof setTimeout>;\n\t\tif (!loading && isLoading) {\n\t\t\tsetShowCompletedState(true);\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tsetIsLoading(false);\n\t\t\t\tsetShowCompletedState(false);\n\t\t\t}, 300);\n\t\t}\n\t\treturn () => {\n\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t};\n\t}, [loading, isLoading]);\n\n\treturn { isLoading, strings };\n}\n\ninterface LoaderButtonContentProps {\n\tisLoading: boolean;\n\tloadingText: string;\n\ticon?: BaseButtonProps['icon'];\n\ticonPosition?: BaseButtonProps['iconPosition'];\n\ticonOnly?: boolean;\n\tsize?: ButtonSize;\n\t/** Ends the label with an ellipsis instead of wrapping it. */\n\ttruncate?: boolean;\n\tchildren: React.ReactNode;\n}\n\nexport function LoaderButtonContent({\n\tisLoading,\n\tloadingText,\n\ticon: Icon,\n\ticonPosition = 'left',\n\ticonOnly = false,\n\tsize: _size,\n\ttruncate = false,\n\tchildren,\n}: LoaderButtonContentProps) {\n\tconst content = isLoading ? loadingText : children;\n\tconst isSimpleText = typeof content === 'string' || typeof content === 'number' || typeof content === 'bigint';\n\n\treturn (\n\t\t<>\n\t\t\t{!!isLoading && (\n\t\t\t\t<Loader2\n\t\t\t\t\tclassName={cn(styles.icon, styles.spinner)}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{!!Icon && iconPosition === 'left' && !isLoading && (\n\t\t\t\t<Icon\n\t\t\t\t\tclassName={styles.icon}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{isLoading && iconOnly ? (\n\t\t\t\t<span className=\"sr-only\">{loadingText}</span>\n\t\t\t) : isSimpleText ? (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className={cn('text-inherit', truncate && 'min-w-0 truncate')}>\n\t\t\t\t\t{content}\n\t\t\t\t</Text>\n\t\t\t) : content}\n\t\t\t{!!Icon && iconPosition === 'right' && !isLoading && (\n\t\t\t\t<Icon\n\t\t\t\t\tclassName={styles.icon}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nconst LoaderButton = React.forwardRef<HTMLButtonElement, LoaderButtonProps>(\n\t(\n\t\t{\n\t\t\tloading = false,\n\t\t\thandlesLoading,\n\t\t\tstrings: stringsProp,\n\t\t\ticon: Icon,\n\t\t\ticonPosition = 'left',\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tclassName,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst { isLoading, strings } = useLoaderButtonState({\n\t\t\tloading,\n\t\t\thandlesLoading,\n\t\t\tstrings: stringsProp,\n\t\t});\n\n\t\treturn (\n\t\t\t<BaseButton\n\t\t\t\t{...props}\n\t\t\t\tref={ref}\n\t\t\t\tdisabled={disabled || isLoading}\n\t\t\t\taria-busy={isLoading || undefined}\n\t\t\t\tclassName={cn('loader-button--component', isLoading && styles.isLoading, className)}\n\t\t\t>\n\t\t\t\t<LoaderButtonContent\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tloadingText={strings.loading}\n\t\t\t\t\ticon={Icon}\n\t\t\t\t\ticonPosition={iconPosition}\n\t\t\t\t\ticonOnly={props.iconOnly}\n\t\t\t\t\tsize={props.size}\n\t\t\t\t\ttruncate={props.truncate}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</LoaderButtonContent>\n\t\t\t</BaseButton>\n\t\t);\n\t},\n);\n\nLoaderButton.displayName = 'LoaderButton';\n\nexport { LoaderButton };\n","import * as React from 'react';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from '../display/tooltip';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { BaseButton, type BaseButtonProps } from './base-button';\n\nexport interface TooltipButtonProps extends BaseButtonProps {\n\twithTooltip: string;\n}\n\nconst TooltipButton = React.forwardRef<HTMLButtonElement, TooltipButtonProps>(\n\t({ withTooltip, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<Tooltip>\n\t\t\t\t<TooltipTrigger\n\t\t\t\t\trender={(triggerProps) => {\n\t\t\t\t\t\tconst mergedProps = mergeProps<'button'>(\n\t\t\t\t\t\t\tprops as unknown as React.ButtonHTMLAttributes<HTMLButtonElement>,\n\t\t\t\t\t\t\ttriggerProps as React.ButtonHTMLAttributes<HTMLButtonElement>,\n\t\t\t\t\t\t) as unknown as BaseButtonProps;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<BaseButton\n\t\t\t\t\t\t\t{...mergedProps}\n\t\t\t\t\t\t\taria-label={props['aria-label'] ?? withTooltip}\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tclassName={cn('tooltip-button--component', mergedProps.className)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</BaseButton>\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TooltipContent>\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"text-inherit\">{withTooltip}</Text>\n\t\t\t\t</TooltipContent>\n\t\t\t</Tooltip>\n\t\t);\n\t},\n);\n\nTooltipButton.displayName = 'TooltipButton';\n\nexport { TooltipButton };\n","/**\n * Button — everyday action/link wrapper around the base button presentation.\n *\n * Action mode renders one native `<button>`. Supplying `href` switches to one\n * native `<a>` with the same provider-driven variants, sizes, loading state,\n * and optional tooltip. The link path deliberately does not use Base UI\n * Button's non-native `render` mode because that mode adds button semantics to\n * the replacement element; navigation keeps native link semantics instead.\n */\nimport * as React from 'react';\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from '../display/tooltip';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport {\n\tBaseButton,\n\tBaseButtonLink,\n\ttype BaseButtonLinkProps,\n\ttype BaseButtonProps,\n} from './base-button';\nimport {\n\tLoaderButton,\n\tLoaderButtonContent,\n\ttype LoaderButtonProps,\n\tuseLoaderButtonState,\n} from './loader-button';\nimport { TooltipButton } from './tooltip-button';\n\ntype ButtonEnhancementProps = Pick<\n\tLoaderButtonProps,\n\t'loading' | 'handlesLoading' | 'strings'\n> & {\n\t/** Tooltip copy shown on hover and focus. Supply it for icon-only buttons. */\n\twithTooltip?: string;\n};\n\ntype ButtonAnchorAttributes = Pick<\n\tReact.AnchorHTMLAttributes<HTMLAnchorElement>,\n\t| 'download'\n\t| 'hrefLang'\n\t| 'media'\n\t| 'ping'\n\t| 'referrerPolicy'\n\t| 'rel'\n\t| 'target'\n>;\n\n/** Shared all-mode props for generic wrappers that accept either action mode or link mode. */\nexport type ButtonProps = BaseButtonProps &\n\tButtonEnhancementProps &\n\tButtonAnchorAttributes & {\n\t\t/** Destination for the entry, when it navigates. */\n\t\thref?: string;\n\t};\n\n/** Precise props for consumers that explicitly model a navigation button. */\nexport type ButtonLinkProps = Omit<BaseButtonLinkProps, 'href' | 'type'> &\n\tButtonEnhancementProps & {\n\t\t/** Destination for the entry, when it navigates. */\n\t\thref: string;\n\t};\n\n/** Precise props for consumers that explicitly model an action button. */\nexport type ButtonActionProps = BaseButtonProps &\n\tButtonEnhancementProps & {\n\t\t/** Destination for the entry, when it navigates. */\n\t\thref?: undefined;\n\t\tdownload?: never;\n\t\threfLang?: never;\n\t\tmedia?: never;\n\t\tping?: never;\n\t\treferrerPolicy?: never;\n\t\trel?: never;\n\t\ttarget?: never;\n\t};\n\nfunction usesLoaderPath({\n\tloading,\n\thandlesLoading,\n\tstrings,\n}: ButtonEnhancementProps) {\n\treturn (\n\t\tloading === true ||\n\t\tBoolean(handlesLoading) ||\n\t\tstrings !== undefined\n\t);\n}\n\nconst LoadingButtonLink = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>(\n\t(\n\t\t{\n\t\t\tloading,\n\t\t\thandlesLoading,\n\t\t\tstrings,\n\t\t\ticon,\n\t\t\ticonPosition = 'left',\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tsize,\n\t\t\tclassName,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst loader = useLoaderButtonState({\n\t\t\tloading,\n\t\t\thandlesLoading,\n\t\t\tstrings,\n\t\t});\n\n\t\treturn (\n\t\t\t<BaseButtonLink\n\t\t\t\t{...props}\n\t\t\t\tref={ref}\n\t\t\t\tsize={size}\n\t\t\t\tdisabled={disabled || loader.isLoading}\n\t\t\t\taria-busy={loader.isLoading || undefined}\n\t\t\t\tclassName={cn('loader-button--component', className)}\n\t\t\t>\n\t\t\t\t<LoaderButtonContent\n\t\t\t\t\tisLoading={loader.isLoading}\n\t\t\t\t\tloadingText={loader.strings.loading}\n\t\t\t\t\ticon={icon}\n\t\t\t\t\ticonPosition={iconPosition}\n\t\t\t\t\ticonOnly={props.iconOnly}\n\t\t\t\t\tsize={size}\n\t\t\t\t\ttruncate={props.truncate}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</LoaderButtonContent>\n\t\t\t</BaseButtonLink>\n\t\t);\n\t},\n);\n\nLoadingButtonLink.displayName = 'LoadingButtonLink';\n\nconst ButtonLink = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>(\n\t({ withTooltip: _withTooltip, ...props }, ref) => {\n\t\tif (usesLoaderPath(props)) {\n\t\t\treturn <LoadingButtonLink ref={ref} {...props} />;\n\t\t}\n\n\t\tconst {\n\t\t\tloading: _loading,\n\t\t\thandlesLoading: _handlesLoading,\n\t\t\tstrings: _strings,\n\t\t\t...linkProps\n\t\t} = props;\n\t\treturn <BaseButtonLink ref={ref} {...linkProps} />;\n\t},\n);\n\nButtonLink.displayName = 'ButtonLink';\n\nfunction toLinkProps(\n\tprops: Omit<\n\t\tButtonProps,\n\t\t'href' | 'withTooltip' | 'loading' | 'handlesLoading' | 'strings'\n\t>,\n): Omit<ButtonLinkProps, 'href' | keyof ButtonEnhancementProps> {\n\tconst {\n\t\ttype: _type,\n\t\tform: _form,\n\t\tformAction: _formAction,\n\t\tformEncType: _formEncType,\n\t\tformMethod: _formMethod,\n\t\tformNoValidate: _formNoValidate,\n\t\tformTarget: _formTarget,\n\t\tname: _name,\n\t\tvalue: _value,\n\t\tnativeButton: _nativeButton,\n\t\tfocusableWhenDisabled: _focusableWhenDisabled,\n\t\trender: _render,\n\t\t...linkProps\n\t} = props;\n\n\treturn linkProps as unknown as Omit<\n\t\tButtonLinkProps,\n\t\t'href' | keyof ButtonEnhancementProps\n\t>;\n}\n\nconst ButtonImplementation = React.forwardRef<\n\tHTMLButtonElement | HTMLAnchorElement,\n\tButtonProps\n>(\n\t(\n\t\t{\n\t\t\thref,\n\t\t\twithTooltip,\n\t\t\tloading,\n\t\t\thandlesLoading,\n\t\t\tstrings,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tif (href !== undefined) {\n\t\t\tconst linkProps = toLinkProps(props);\n\t\t\tconst link = (\n\t\t\t\t<ButtonLink\n\t\t\t\t\t{...linkProps}\n\t\t\t\t\tref={ref as React.ForwardedRef<HTMLAnchorElement>}\n\t\t\t\t\thref={href}\n\t\t\t\t\tloading={loading}\n\t\t\t\t\thandlesLoading={handlesLoading}\n\t\t\t\t\tstrings={strings}\n\t\t\t\t\taria-label={props['aria-label'] ?? withTooltip}\n\t\t\t\t\tclassName={cn('button--component', linkProps.className)}\n\t\t\t\t/>\n\t\t\t);\n\n\t\t\tif (withTooltip) {\n\t\t\t\treturn (\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger render={link} />\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"text-inherit\">{withTooltip}</Text>\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn link;\n\t\t}\n\n\t\tconst {\n\t\t\tdownload: _download,\n\t\t\threfLang: _hrefLang,\n\t\t\tmedia: _media,\n\t\t\tping: _ping,\n\t\t\treferrerPolicy: _referrerPolicy,\n\t\t\trel: _rel,\n\t\t\ttarget: _target,\n\t\t\t...baseProps\n\t\t} = props;\n\t\tconst actionProps = {\n\t\t\t...baseProps,\n\t\t\tclassName: cn('button--component', baseProps.className),\n\t\t};\n\n\t\tif (usesLoaderPath({ loading, handlesLoading, strings })) {\n\t\t\tif (withTooltip) {\n\t\t\t\treturn (\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger\n\t\t\t\t\t\t\trender={(triggerProps) => (\n\t\t\t\t\t\t\t\t<LoaderButton\n\t\t\t\t\t\t\t\t\t{...actionProps}\n\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\tref={ref as React.ForwardedRef<HTMLButtonElement>}\n\t\t\t\t\t\t\t\t\tloading={loading}\n\t\t\t\t\t\t\t\t\thandlesLoading={handlesLoading}\n\t\t\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t\t\t\taria-label={baseProps['aria-label'] ?? withTooltip}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t(triggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t\t\t\tactionProps.className,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{baseProps.children}\n\t\t\t\t\t\t\t\t</LoaderButton>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" className=\"text-inherit\">{withTooltip}</Text>\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<LoaderButton\n\t\t\t\t\t{...actionProps}\n\t\t\t\t\tref={ref as React.ForwardedRef<HTMLButtonElement>}\n\t\t\t\t\tloading={loading}\n\t\t\t\t\thandlesLoading={handlesLoading}\n\t\t\t\t\tstrings={strings}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif (withTooltip) {\n\t\t\treturn (\n\t\t\t\t<TooltipButton\n\t\t\t\t\t{...actionProps}\n\t\t\t\t\tref={ref as React.ForwardedRef<HTMLButtonElement>}\n\t\t\t\t\twithTooltip={withTooltip}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseButton\n\t\t\t\t{...actionProps}\n\t\t\t\tref={ref as React.ForwardedRef<HTMLButtonElement>}\n\t\t\t/>\n\t\t);\n\t},\n);\n\ntype ButtonComponent = {\n\t(props: ButtonLinkProps & React.RefAttributes<HTMLAnchorElement>): React.ReactElement | null;\n\t(props: ButtonActionProps & React.RefAttributes<HTMLButtonElement>): React.ReactElement | null;\n\t(\n\t\tprops: ButtonProps &\n\t\t\tReact.RefAttributes<HTMLButtonElement | HTMLAnchorElement>,\n\t): React.ReactElement | null;\n\tdisplayName?: string;\n};\n\nconst Button = ButtonImplementation as ButtonComponent;\nButton.displayName = 'Button';\n\nexport { Button };\n","/**\n * TextButton — link-styled button (underline, primary tint, no padding).\n *\n * Wraps `BaseButton` with `tone=\"primary\" buttonStyle=\"ghost\"`. Routine\n * usage omits `size`; the shared component scale controls typography.\n */\nimport * as React from 'react';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { cn } from '../../../lib/utils';\nimport { useDensityConfig, type ComponentScale } from '../../../lib/ui-provider';\nimport { resolveComponentScale } from '../../../lib/ui-provider/scale';\nimport { BaseButton } from './base-button';\n\nexport type TextButtonSize = ComponentScale;\n\n// The default size matches default body copy (text-sm), so a text action set beside\n// a sentence or a row value reads at the same size; `sm` is the compact 13px role.\nconst sizeClasses: Record<TextButtonSize, string> = {\n\tsm: 'text-pxs leading-none h-auto min-h-0 px-0 py-0',\n\tmd: 'text-sm leading-none h-auto min-h-0 px-0 py-0',\n\tlg: 'text-sm leading-none h-auto min-h-0 px-0 py-0',\n};\n\nexport type TextButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'> & {\n\t/** Size preset. `md` (default) matches body text; `sm` is the compact 13px role. Defaults to `UIProvider.density.defaultScale`. */\n\tsize?: TextButtonSize;\n\tchildren: React.ReactNode;\n};\n\nexport const TextButton = React.forwardRef<HTMLButtonElement, TextButtonProps>(\n\t({ className, type = 'button', size, disabled, ...props }, ref) => {\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst resolvedSize = resolveComponentScale(size, defaultScale);\n\t\treturn (\n\t\t\t<BaseButton\n\t\t\t\tref={ref}\n\t\t\t\ttype={type}\n\t\t\t\ttone=\"primary\"\n\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\tsize={resolvedSize}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn('text-button--component',\n\t\t\t\t\t// `ghost` supplies the transparent resting state and the accent\n\t\t\t\t\t// colour, but its hover tint assumes a padded hit area. At\n\t\t\t\t\t// `px-0 h-auto` that tint paints a bare rectangle around the\n\t\t\t\t\t// glyphs, so the underline carries hover on its own. Both\n\t\t\t\t\t// variants are cleared: the light and dark tints are separate\n\t\t\t\t\t// declarations, so overriding one leaves the other painting.\n\t\t\t\t\t'hover:bg-transparent dark:hover:bg-transparent',\n\t\t\t\t\t'inline-flex items-center justify-center underline decoration-border underline-offset-[0.2em] transition-colors hover:decoration-current',\n\t\t\t\t\t// Inline text has no padding: the focus edge sits outside it, not on the border.\n\t\t\t\t\t`text-primary-accent focus-visible:border-transparent ${focusRecipes.text}`,\n\t\t\t\t\t'disabled:pointer-events-none disabled:opacity-50',\n\t\t\t\t\tsizeClasses[resolvedSize],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nTextButton.displayName = 'TextButton';\n"],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ "use client";
2
+ import { i as e } from "./ui-provider-C_U0Xma4.js";
3
+ import { t } from "./utils-BRhFDwuU.js";
4
+ import { n } from "./buttons-DPZekJFu.js";
5
+ import { t as r } from "./structure-BmisBK-3.js";
6
+ import { a as i, c as a, d as o, f as s, l as c, u as l } from "./smart-card-DiC5aac3.js";
7
+ import { t as u } from "./action-menu-CllU52Mm.js";
8
+ import { t as d } from "./separator-BDV-Y648.js";
9
+ import { forwardRef as f } from "react";
10
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
11
+ //#region src/components/base/cards/partials/smart-card-skeleton.tsx
12
+ function h({ title: n, lines: u = 2, surface: d, className: f }) {
13
+ let { defaultSurface: h } = e(), g = d ?? h ?? "framed", _ = ({ barClassName: e }) => /* @__PURE__ */ p("div", { className: t("animate-pulse rounded-radius-xs bg-muted", e) });
14
+ return /* @__PURE__ */ m(c, {
15
+ "data-surface": g,
16
+ className: t("smart-card-skeleton--component", s[g], "gap-space-xl py-surface", f),
17
+ children: [/* @__PURE__ */ p(a, {
18
+ className: "flex-col gap-normal px-surface pb-0",
19
+ children: o(n) ? /* @__PURE__ */ p(l, { children: n }) : /* @__PURE__ */ p(_, { barClassName: "h-4 w-32" })
20
+ }), /* @__PURE__ */ p(i, {
21
+ className: "px-surface py-0",
22
+ children: /* @__PURE__ */ p(r, {
23
+ gap: "lg",
24
+ children: Array.from({ length: u }, (e, n) => /* @__PURE__ */ p(_, { barClassName: t("h-4", n === 0 ? "w-full" : "w-3/4") }, `skel-${String(n)}`))
25
+ })
26
+ })]
27
+ });
28
+ }
29
+ h.displayName = "SmartCardSkeleton";
30
+ //#endregion
31
+ //#region src/components/base/cards/card-actions.tsx
32
+ var g = f(function({ children: e, icon: r, hidden: i = !1, fullWidth: a = !0, className: o, ...s }, c) {
33
+ return i ? null : /* @__PURE__ */ p(n, {
34
+ ref: c,
35
+ type: "button",
36
+ tone: "primary",
37
+ fullWidth: a,
38
+ icon: r,
39
+ className: t("card-primary-action--component", o),
40
+ ...s,
41
+ children: e
42
+ });
43
+ });
44
+ function _({ actions: e, separator: n = !1, align: r = "start", compact: i = !1, fullWidthPrimary: a = !1, className: o, buttonClassName: s, renderLink: c }) {
45
+ let l = e.filter((e) => e.visible !== !1);
46
+ if (l.length === 0) return null;
47
+ let f = {
48
+ start: "justify-start",
49
+ end: "justify-end",
50
+ between: "justify-between",
51
+ stretch: "justify-stretch"
52
+ }[r];
53
+ return /* @__PURE__ */ m("div", {
54
+ className: t("card-action-strip--component", o),
55
+ children: [!!n && /* @__PURE__ */ p(d, { className: t(i ? "mb-space-sm" : "mb-space-md") }), /* @__PURE__ */ p(u, {
56
+ actions: l,
57
+ size: i ? "sm" : "md",
58
+ className: t("flex-wrap", f, r === "stretch" && "[&>.base-button--component]:flex-1", a && "[&>.base-button--component:first-child]:flex-1"),
59
+ buttonClassName: t(i ? "min-w-0" : "min-w-24", s),
60
+ renderLink: c
61
+ })]
62
+ });
63
+ }
64
+ g.displayName = "CardPrimaryAction", _.displayName = "CardActionStrip";
65
+ //#endregion
66
+ export { g as n, h as r, _ as t };
67
+
68
+ //# sourceMappingURL=cards-BaBZR-AU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards-BaBZR-AU.js","names":["useCardConfig","Stack","CardContent","CardHeader","hasRenderableContent","SURFACE_CLASSES","CardShell","CardTitle","ActionButtons","Separator","SmartCardSkeleton","resolvedSurface","surface","defaultSurface","SkeletonBar","cn","barClassName","className","title","lines","i","CardPrimaryAction","forwardRef","props","hidden","Button","CardActionStrip","visible","actions","action","alignClassName","align","separator","compact","fullWidthPrimary","buttonClassName"],"sources":["../src/components/base/cards/partials/smart-card-skeleton.tsx","../src/components/base/cards/card-actions.tsx"],"sourcesContent":["/**\n * SmartCardSkeleton — placeholder shell rendered while a SmartCard's\n * data is loading. Picks up the canonical card surface so the loading\n * state visually matches the eventual `SmartCard` it'll replace.\n */\nimport { Stack } from '../../structure';\nimport { cn } from '../../../../lib/utils';\nimport { useCardConfig } from '../../../../lib/ui-provider';\n\nimport { SURFACE_CLASSES } from '../smart-card.tokens';\n\nimport { CardContent, CardHeader, CardShell, CardTitle } from './card-primitives';\nimport { hasRenderableContent } from './has-renderable-content';\nimport type { SmartCardSkeletonProps } from '../smart-card.types';\nexport type { SmartCardSkeletonProps } from '../smart-card.types';\n\nexport function SmartCardSkeleton({ title, lines = 2, surface, className }: SmartCardSkeletonProps) {\n\tconst { defaultSurface } = useCardConfig();\n\tconst resolvedSurface = surface ?? defaultSurface ?? 'framed';\n\tconst SkeletonBar = ({ barClassName }: { barClassName?: string }) => (\n\t\t<div className={cn('animate-pulse rounded-radius-xs bg-muted', barClassName)} />\n\t);\n\n\treturn (\n\t\t<CardShell\n\t\t\tdata-surface={resolvedSurface}\n\t\t\tclassName={cn('smart-card-skeleton--component', SURFACE_CLASSES[resolvedSurface], 'gap-space-xl py-surface', className)}\n\t\t>\n\t\t\t<CardHeader className=\"flex-col gap-normal px-surface pb-0\">\n\t\t\t\t{hasRenderableContent(title) ? <CardTitle>{title}</CardTitle> : <SkeletonBar barClassName=\"h-4 w-32\" />}\n\t\t\t</CardHeader>\n\t\t\t<CardContent className=\"px-surface py-0\">\n\t\t\t\t<Stack gap=\"lg\">\n\t\t\t\t\t{Array.from({ length: lines }, (_, i) => (\n\t\t\t\t\t\t<SkeletonBar key={`skel-${String(i)}`} barClassName={cn('h-4', i === 0 ? 'w-full' : 'w-3/4')} />\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t</CardContent>\n\t\t</CardShell>\n\t);\n}\n\nSmartCardSkeleton.displayName = 'SmartCardSkeleton';\n","/**\n * Card action recipes — package-owned chrome for body/footer card actions.\n *\n * Use these instead of hand-rolled footer button rows in resource cards.\n */\nimport { forwardRef, type ComponentProps, type ReactElement, type ReactNode } from 'react';\nimport type { LucideIcon } from 'lucide-react';\n\nimport { Button } from '../buttons';\nimport {\n\tActionButtons,\n\ttype ActionMenuAction,\n\ttype ActionMenuLinkRenderProps,\n} from '../action-menu';\nimport { Separator } from '../display/separator';\nimport { cn } from '../../../lib/utils';\n\nexport interface CardPrimaryActionProps\n\textends Omit<ComponentProps<typeof Button>, 'variant' | 'fullWidth' | 'children'> {\n\tchildren: ReactNode;\n\ticon?: LucideIcon;\n\t/** Renders the action as an anchor to this destination. */\n\thref?: string;\n\t/** Omits the action without changing the others' order. */\n\thidden?: boolean;\n\t/** Stretches the action to the row's width. */\n\tfullWidth?: boolean;\n}\n\nexport const CardPrimaryAction = forwardRef<HTMLButtonElement, CardPrimaryActionProps>(function CardPrimaryAction({\n\tchildren,\n\ticon,\n\thidden = false,\n\tfullWidth = true,\n\tclassName,\n\t...props\n}: CardPrimaryActionProps, ref) {\n\tif (hidden) return null;\n\n\treturn (\n\t\t<Button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\ttone=\"primary\"\n\t\t\tfullWidth={fullWidth}\n\t\t\ticon={icon}\n\t\t\tclassName={cn('card-primary-action--component', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n});\n\nexport interface CardActionStripProps {\n\t/** Actions to render, in order. */\n\tactions: readonly ActionMenuAction[];\n\t/** Draws a rule above the action row. */\n\tseparator?: boolean;\n\t/** Horizontal alignment of the action row. */\n\talign?: 'start' | 'end' | 'between' | 'stretch';\n\t/** Tightens the row for dense cards. */\n\tcompact?: boolean;\n\t/** Stretches only the primary action. */\n\tfullWidthPrimary?: boolean;\n\tclassName?: string;\n\t/** Merged onto every button in the row. */\n\tbuttonClassName?: string;\n\t/** Renders actions carrying an `href` through the consumer's router. */\n\trenderLink?: (props: ActionMenuLinkRenderProps) => ReactElement;\n}\n\nexport function CardActionStrip({\n\tactions,\n\tseparator = false,\n\talign = 'start',\n\tcompact = false,\n\tfullWidthPrimary = false,\n\tclassName,\n\tbuttonClassName,\n\trenderLink,\n}: CardActionStripProps) {\n\tconst visible = actions.filter((action) => action.visible !== false);\n\tif (visible.length === 0) return null;\n\n\tconst alignClassName = {\n\t\tstart: 'justify-start',\n\t\tend: 'justify-end',\n\t\tbetween: 'justify-between',\n\t\tstretch: 'justify-stretch',\n\t}[align];\n\n\treturn (\n\t\t<div className={cn('card-action-strip--component', className)}>\n\t\t\t{!!separator && <Separator className={cn(compact ? 'mb-space-sm' : 'mb-space-md')} />}\n\t\t\t<ActionButtons\n\t\t\t\tactions={visible}\n\t\t\t\tsize={compact ? 'sm' : 'md'}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex-wrap',\n\t\t\t\t\talignClassName,\n\t\t\t\t\talign === 'stretch' && '[&>.base-button--component]:flex-1',\n\t\t\t\t\tfullWidthPrimary && '[&>.base-button--component:first-child]:flex-1',\n\t\t\t\t)}\n\t\t\t\tbuttonClassName={cn(\n\t\t\t\t\tcompact ? 'min-w-0' : 'min-w-24',\n\t\t\t\t\tbuttonClassName,\n\t\t\t\t)}\n\t\t\t\trenderLink={renderLink}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nCardPrimaryAction.displayName = 'CardPrimaryAction';\nCardActionStrip.displayName = 'CardActionStrip';\n"],"mappings":";;;;;;;;;;;AAgBA,SAAgBU,EAAkB,EAAE,UAAO,WAAQ,GAAG,YAAS,gBAAqC;CACnG,IAAM,EAAE,sBAAmBV,EAAc,GACnCW,IAAkBC,KAAWC,KAAkB,UAC/CC,KAAe,EAAE,sBACtB,kBAAC,OAAD,EAAK,WAAWC,EAAG,4CAA4CC,CAAY,EAAI,CAAA;CAGhF,OACC,kBAACV,GAAD;EACC,gBAAcK;EACd,WAAWI,EAAG,kCAAkCV,EAAgBM,IAAkB,2BAA2BM,CAAS;EAFvH,UAAA,CAIC,kBAACd,GAAD;GAAY,WAAU;GACpB,UAAAC,EAAqBc,CAAK,IAAI,kBAACX,GAAD,EAAA,UAAYW,EAAiB,CAAA,IAAI,kBAACJ,GAAD,EAAa,cAAa,WAAY,CAAA;EAC3F,CAAA,GACZ,kBAACZ,GAAD;GAAa,WAAU;GACtB,UAAA,kBAACD,GAAD;IAAO,KAAI;IACT,UAAA,MAAM,KAAK,EAAE,QAAQkB,EAAM,IAAI,GAAG,MAClC,kBAACL,GAAD,EAAuC,cAAcC,EAAG,OAAOK,MAAM,IAAI,WAAW,OAAO,EAAI,GAA7E,QAAQ,OAAOA,CAAC,GAA6D,CAC/F;GACK,CAAA;EACK,CAAA,CACH;;AAEb;AAEA,EAAkB,cAAc;;;ACbhC,IAAaC,IAAoBC,EAAsD,SAA2B,EACjH,aACA,SACA,YAAS,IACT,eAAY,IACZ,cACA,GAAGC,KACuB,GAAK;CAG/B,OAFIC,IAAe,OAGlB,kBAACC,GAAD;EACM;EACL,MAAK;EACL,MAAK;EACM;EACL;EACN,WAAWV,EAAG,kCAAkCE,CAAS;EACzD,GAAIM;EAEH;CACM,CAAA;AAEV,CAAC;AAoBD,SAAgBG,EAAgB,EAC/B,YACA,eAAY,IACZ,WAAQ,SACR,aAAU,IACV,sBAAmB,IACnB,cACA,oBACA,iBACwB;CACxB,IAAMC,IAAUC,EAAQ,QAAQ,MAAWC,EAAO,YAAY,EAAK;CACnE,IAAIF,EAAQ,WAAW,GAAG,OAAO;CAEjC,IAAMG,IAAiB;EACtB,OAAO;EACP,KAAK;EACL,SAAS;EACT,SAAS;CACV,EAAEC;CAEF,OACC,kBAAC,OAAD;EAAK,WAAWhB,EAAG,gCAAgCE,CAAS;EAA5D,UAAA,CACE,CAAC,CAACe,KAAa,kBAACvB,GAAD,EAAW,WAAWM,EAAGkB,IAAU,gBAAgB,aAAa,EAAI,CAAA,GACpF,kBAACzB,GAAD;GACC,SAASmB;GACT,MAAMM,IAAU,OAAO;GACvB,WAAWlB,EACV,aACAe,GACAC,MAAU,aAAa,sCACvBG,KAAoB,gDACrB;GACA,iBAAiBnB,EAChBkB,IAAU,YAAY,YACtBE,CACD;GACY;EACZ,CAAA,CACG;;AAEP;AAEA,EAAkB,cAAc,qBAChC,EAAgB,cAAc"}
@@ -1,38 +1,36 @@
1
1
  "use client";
2
- import { t as e } from "./utils-l5LpDw2z.js";
3
- import { s as t } from "./typography-DTRkE9zL.js";
4
- import { i as n, r } from "./popover.recipes-Bdyhj2db.js";
5
- import { t as i } from "./number-DMhe-Vsk.js";
6
- import * as a from "react";
7
- import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
8
- import * as l from "recharts";
2
+ import { t as e } from "./utils-BRhFDwuU.js";
3
+ import { c as t } from "./typography-UTnveOEy.js";
4
+ import { a as n, r } from "./popover.recipes-D3j8R8Yp.js";
5
+ import { t as i } from "./number-DbV1Dija.js";
6
+ import { t as a } from "./theme-mode-css-BB-_RYab.js";
7
+ import * as o from "react";
8
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
9
+ import * as u from "recharts";
9
10
  //#region src/components/base/chart/chart.tsx
10
- var u = {
11
- light: "",
12
- dark: ".dark"
13
- }, d = {
11
+ var d = {
14
12
  width: 320,
15
13
  height: 200
16
- }, f = a.createContext(null);
14
+ }, f = o.createContext(null);
17
15
  function p() {
18
- let e = a.useContext(f);
16
+ let e = o.useContext(f);
19
17
  if (!e) throw Error("useChart must be used within a <ChartContainer />");
20
18
  return e;
21
19
  }
22
- function m({ id: t, className: n, children: r, config: i, initialDimension: o = d, ...u }) {
23
- let p = a.useId(), m = `chart-${t ?? p.replace(/:/g, "")}`;
24
- return /* @__PURE__ */ s(f.Provider, {
20
+ function m({ id: t, className: n, children: r, config: i, initialDimension: a = d, ...s }) {
21
+ let p = o.useId(), m = `chart-${t ?? p.replace(/:/g, "")}`;
22
+ return /* @__PURE__ */ c(f.Provider, {
25
23
  value: { config: i },
26
- children: /* @__PURE__ */ c("div", {
24
+ children: /* @__PURE__ */ l("div", {
27
25
  "data-slot": "chart",
28
26
  "data-chart": m,
29
27
  className: e("chart--component flex aspect-video w-full min-w-0 justify-center text-xs", "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-axis-tick-label]:fill-muted-foreground [&_.recharts-cartesian-axis-tick-value]:fill-muted-foreground", "[&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50", "[&_.recharts-curve.recharts-tooltip-cursor]:stroke-border", "[&_.recharts-dot[stroke=\"#fff\"]]:stroke-transparent", "[&_.recharts-layer]:outline-hidden", "[&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border", "[&_.recharts-radial-bar-background-sector]:fill-muted", "[&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted", "[&_.recharts-reference-line_[stroke='#ccc']]:stroke-border", "[&_.recharts-sector]:outline-hidden", "[&_.recharts-sector[stroke=\"#fff\"]]:stroke-transparent", "[&_.recharts-surface]:outline-hidden", n),
30
- ...u,
31
- children: [/* @__PURE__ */ s(h, {
28
+ ...s,
29
+ children: [/* @__PURE__ */ c(h, {
32
30
  id: m,
33
31
  config: i
34
- }), /* @__PURE__ */ s(l.ResponsiveContainer, {
35
- initialDimension: o,
32
+ }), /* @__PURE__ */ c(u.ResponsiveContainer, {
33
+ initialDimension: a,
36
34
  children: r
37
35
  })]
38
36
  })
@@ -40,29 +38,32 @@ function m({ id: t, className: n, children: r, config: i, initialDimension: o =
40
38
  }
41
39
  function h({ id: e, config: t }) {
42
40
  let n = Object.entries(t).filter(([, e]) => e.theme ?? e.color);
43
- return n.length ? /* @__PURE__ */ s("style", { dangerouslySetInnerHTML: { __html: Object.entries(u).map(([t, r]) => `
44
- ${r} [data-chart=${e}] {
45
- ${n.map(([e, n]) => {
46
- let r = n.theme?.[t] ?? n.color;
47
- return r ? ` --color-${e}: ${r};` : null;
48
- }).join("\n")}
49
- }
50
- `).join("\n") } }) : null;
41
+ if (!n.length) return null;
42
+ let r = (e) => n.flatMap(([t, n]) => {
43
+ let r = n.theme?.[e] ?? n.color;
44
+ return r ? [`--color-${t}: ${r};`] : [];
45
+ });
46
+ return /* @__PURE__ */ c("style", { dangerouslySetInnerHTML: { __html: a(`[data-chart=${e}]`, {
47
+ light: r("light"),
48
+ dark: r("dark")
49
+ }) } });
51
50
  }
52
- var g = l.Tooltip;
53
- function _({ active: l, payload: u, className: d, indicator: f = "dot", hideLabel: m = !1, hideIndicator: h = !1, label: g, labelFormatter: _, labelClassName: v, formatter: y, color: x, nameKey: S, labelKey: C }) {
54
- let { config: w } = p(), T = a.useMemo(() => {
51
+ var g = u.Tooltip;
52
+ function _({ active: a, payload: u, className: d, indicator: f = "dot", hideLabel: m = !1, hideIndicator: h = !1, label: g, labelFormatter: _, labelClassName: v, formatter: y, color: x, nameKey: S, labelKey: C }) {
53
+ let { config: w } = p(), T = o.useMemo(() => {
55
54
  if (m || !u?.length) return null;
56
55
  let [n] = u, r = `${C ?? n?.dataKey ?? n?.name ?? "value"}`, i = b(w, n, r), a = !C && typeof g == "string" ? w[g]?.label ?? g : i?.label;
57
- return _ ? /* @__PURE__ */ s(t, {
56
+ return _ ? /* @__PURE__ */ c(t, {
58
57
  tag: "div",
59
58
  size: "xs",
59
+ type: "inherit",
60
60
  weight: "medium",
61
61
  className: e("chart--tooltip-label", v),
62
62
  children: _(a, u)
63
- }) : a ? /* @__PURE__ */ s(t, {
63
+ }) : a ? /* @__PURE__ */ c(t, {
64
64
  tag: "div",
65
65
  size: "xs",
66
+ type: "inherit",
66
67
  weight: "medium",
67
68
  className: e("chart--tooltip-label", v),
68
69
  children: a
@@ -76,40 +77,42 @@ function _({ active: l, payload: u, className: d, indicator: f = "dot", hideLabe
76
77
  w,
77
78
  C
78
79
  ]);
79
- if (!l || !u?.length) return null;
80
+ if (!a || !u?.length) return null;
80
81
  let E = u.length === 1 && f !== "dot";
81
- return /* @__PURE__ */ c("div", {
82
+ return /* @__PURE__ */ l("div", {
82
83
  className: e("chart--tooltip grid min-w-32 items-start gap-space-sm text-xs", r.surface, n.compact, d),
83
- children: [!E && T, /* @__PURE__ */ s("div", {
84
+ children: [!E && T, /* @__PURE__ */ c("div", {
84
85
  className: "grid gap-space-sm",
85
86
  children: u.filter((e) => e.type !== "none").map((n, r) => {
86
- let a = `${S ?? n.name ?? n.dataKey ?? "value"}`, l = b(w, n, a), u = typeof n.payload?.fill == "string" ? n.payload.fill : void 0, d = x ?? u ?? n.color ?? n.fill;
87
- return /* @__PURE__ */ s("div", {
87
+ let a = `${S ?? n.name ?? n.dataKey ?? "value"}`, o = b(w, n, a), u = typeof n.payload?.fill == "string" ? n.payload.fill : void 0, d = x ?? u ?? n.color ?? n.fill;
88
+ return /* @__PURE__ */ c("div", {
88
89
  className: e("chart--tooltip-item flex w-full flex-wrap items-stretch gap-space-md [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground", f === "dot" && "items-center"),
89
- children: y && n.value !== void 0 && n.name !== void 0 ? y(n.value, n.name, n, r, n.payload) : /* @__PURE__ */ c(o, { children: [l?.icon ? /* @__PURE__ */ s(l.icon, {}) : !h && /* @__PURE__ */ s("div", {
90
+ children: y && n.value !== void 0 && n.name !== void 0 ? y(n.value, n.name, n, r, n.payload) : /* @__PURE__ */ l(s, { children: [o?.icon ? /* @__PURE__ */ c(o.icon, {}) : !h && /* @__PURE__ */ c("div", {
90
91
  className: e("shrink-0 rounded-[2px] border-[var(--color-border)] bg-[var(--color-bg)]", f === "dot" && "size-2.5", f === "line" && "h-3 w-1", f === "dashed" && "h-0 w-0 border-[1.5px] border-dashed bg-transparent", E && f === "dashed" && "my-0.5"),
91
92
  style: {
92
93
  "--color-bg": d,
93
94
  "--color-border": d
94
95
  }
95
- }), /* @__PURE__ */ c("div", {
96
+ }), /* @__PURE__ */ l("div", {
96
97
  className: e("flex flex-1 justify-between gap-space-lg leading-none", E ? "items-end" : "items-center"),
97
- children: [/* @__PURE__ */ c("div", {
98
+ children: [/* @__PURE__ */ l("div", {
98
99
  className: "grid gap-space-sm",
99
- children: [E && T, /* @__PURE__ */ s(t, {
100
+ children: [E && T, /* @__PURE__ */ c(t, {
100
101
  tag: "span",
101
102
  size: "xs",
102
103
  type: "secondary",
103
- children: l?.label ?? n.name
104
+ children: o?.label ?? n.name
104
105
  })]
105
- }), n.value !== void 0 && (typeof n.value == "number" ? /* @__PURE__ */ s(i, {
106
+ }), n.value !== void 0 && (typeof n.value == "number" ? /* @__PURE__ */ c(i, {
106
107
  value: n.value,
107
108
  size: "xs",
109
+ type: "inherit",
108
110
  weight: "medium",
109
111
  align: "right"
110
- }) : /* @__PURE__ */ s(t, {
112
+ }) : /* @__PURE__ */ c(t, {
111
113
  tag: "span",
112
114
  size: "xs",
115
+ type: "inherit",
113
116
  weight: "medium",
114
117
  className: "tabular-nums",
115
118
  children: Array.isArray(n.value) ? n.value.join(" - ") : String(n.value)
@@ -120,19 +123,19 @@ function _({ active: l, payload: u, className: d, indicator: f = "dot", hideLabe
120
123
  })]
121
124
  });
122
125
  }
123
- var v = l.Legend;
126
+ var v = u.Legend;
124
127
  function y({ className: n, hideIcon: r = !1, payload: i, verticalAlign: a = "bottom", nameKey: o }) {
125
- let { config: l } = p();
126
- return i?.length ? /* @__PURE__ */ s("div", {
128
+ let { config: s } = p();
129
+ return i?.length ? /* @__PURE__ */ c("div", {
127
130
  className: e("chart--legend flex flex-wrap items-center justify-center gap-x-space-xl gap-y-space-md text-xs", a === "top" ? "pb-space-lg" : "pt-space-lg", n),
128
131
  children: i.filter((e) => e.type !== "none").map((e, n) => {
129
- let i = `${o ?? e.dataKey ?? "value"}`, a = b(l, e, i), u = e.value ?? e.name ?? e.dataKey ?? i;
130
- return /* @__PURE__ */ c("div", {
131
- className: "chart--legend-item flex items-center gap-space-sm [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground",
132
- children: [a?.icon && !r ? /* @__PURE__ */ s(a.icon, {}) : /* @__PURE__ */ s("div", {
132
+ let i = `${o ?? e.dataKey ?? "value"}`, a = b(s, e, i), u = e.value ?? e.name ?? e.dataKey ?? i;
133
+ return /* @__PURE__ */ l("div", {
134
+ className: "chart--legend-item flex items-center gap-space-sm [&>svg]:size-icon-sm [&>svg]:text-muted-foreground",
135
+ children: [a?.icon && !r ? /* @__PURE__ */ c(a.icon, {}) : /* @__PURE__ */ c("div", {
133
136
  className: "h-2 w-2 shrink-0 rounded-[2px]",
134
137
  style: { backgroundColor: e.color }
135
- }), /* @__PURE__ */ s(t, {
138
+ }), /* @__PURE__ */ c(t, {
136
139
  tag: "span",
137
140
  size: "xs",
138
141
  children: a?.label ?? u
@@ -149,4 +152,4 @@ function b(e, t, n) {
149
152
  //#endregion
150
153
  export { g as a, h as i, v as n, _ as o, y as r, m as t };
151
154
 
152
- //# sourceMappingURL=chart-QfrARkXl.js.map
155
+ //# sourceMappingURL=chart-ZOYyK2xG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-ZOYyK2xG.js","names":["React","_Fragment","NumberValue","cn","Text","surfaceInsetClasses","Number","serializeScopedThemeModes","React$1","Fragment$1","RechartsPrimitive","INITIAL_DIMENSION","ChartContext","useChart","context","ChartContainer","props","uniqueId","chartId","id","className","ChartStyle","colorConfig","config","item","declarations","key","itemConfig","color","mode","ChartTooltip","ChartTooltipContent","tooltipLabel","hideLabel","payload","labelKey","getPayloadConfigFromPayload","value","label","labelFormatter","labelClassName","active","nestLabel","indicator","popoverRecipes","nameKey","payloadFill","indicatorColor","formatter","index","hideIndicator","ChartLegend","ChartLegendContent","verticalAlign","fallbackLabel","hideIcon","payloadPayload","configLabelKey"],"sources":["../src/components/base/chart/chart.tsx"],"sourcesContent":["/**\n * Chart — Recharts helpers with shadcn-compatible configuration.\n *\n * Localized from the shadcn/ReUI chart helper into the base layer so chart\n * chrome uses this library's tokens, tooltip density, and BEM DOM hooks.\n * The Recharts peer stays isolated to the exact `base/chart` entrypoint.\n */\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport { Number as NumberValue } from '../../primitives';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { serializeScopedThemeModes } from '../../../lib/theme-mode-css';\nimport { popoverRecipes, surfaceInsetClasses } from '../popover/popover.recipes';\n\ntype ChartTheme = 'light' | 'dark';\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const;\n\nexport type ChartConfig = Record<\n\tstring,\n\t{\n\t\t/** Axis label for the hovered position. Supplied by Recharts. */\n\t\tlabel?: React.ReactNode;\n\t\t/** Leading glyph. */\n\t\ticon?: React.ComponentType;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record<ChartTheme, string> }\n\t)\n>;\n\nexport type ChartPayloadItem = {\n\tdataKey?: string | number;\n\t/** Series name. */\n\tname?: string | number;\n\t/** The series value at the hovered point. */\n\tvalue?: string | number | Array<string | number>;\n\ttype?: string;\n\t/** Overrides the colour of the tooltip indicator. */\n\tcolor?: string;\n\tfill?: string;\n\t/** The raw data row for the hovered point. Supplied by Recharts. */\n\tpayload?: Record<string, unknown>;\n};\n\nexport interface ChartInitialDimension {\n\twidth: number;\n\theight: number;\n}\n\ninterface ChartContextProps {\n\t/** Maps each data key to its label, colour, and icon. */\n\tconfig: ChartConfig;\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart(): ChartContextProps {\n\tconst context = React.useContext(ChartContext);\n\n\tif (!context) {\n\t\tthrow new Error('useChart must be used within a <ChartContainer />');\n\t}\n\n\treturn context;\n}\n\nexport interface ChartContainerProps extends React.ComponentPropsWithoutRef<'div'> {\n\t/** Maps each data key to its label, colour, and icon. */\n\tconfig: ChartConfig;\n\tchildren: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n\t/** Starting width and height, so the chart renders before its container is measured. */\n\tinitialDimension?: ChartInitialDimension;\n}\n\nfunction ChartContainer({\n\tid,\n\tclassName,\n\tchildren,\n\tconfig,\n\tinitialDimension = INITIAL_DIMENSION,\n\t...props\n}: ChartContainerProps) {\n\tconst uniqueId = React.useId();\n\tconst chartId = `chart-${id ?? uniqueId.replace(/:/g, '')}`;\n\n\treturn (\n\t\t<ChartContext.Provider value={{ config }}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"chart\"\n\t\t\t\tdata-chart={chartId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'chart--component flex aspect-video w-full min-w-0 justify-center text-xs',\n\t\t\t\t\t'[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-axis-tick-label]:fill-muted-foreground [&_.recharts-cartesian-axis-tick-value]:fill-muted-foreground',\n\t\t\t\t\t\"[&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50\",\n\t\t\t\t\t'[&_.recharts-curve.recharts-tooltip-cursor]:stroke-border',\n\t\t\t\t\t'[&_.recharts-dot[stroke=\"#fff\"]]:stroke-transparent',\n\t\t\t\t\t'[&_.recharts-layer]:outline-hidden',\n\t\t\t\t\t\"[&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border\",\n\t\t\t\t\t'[&_.recharts-radial-bar-background-sector]:fill-muted',\n\t\t\t\t\t'[&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted',\n\t\t\t\t\t\"[&_.recharts-reference-line_[stroke='#ccc']]:stroke-border\",\n\t\t\t\t\t'[&_.recharts-sector]:outline-hidden',\n\t\t\t\t\t'[&_.recharts-sector[stroke=\"#fff\"]]:stroke-transparent',\n\t\t\t\t\t'[&_.recharts-surface]:outline-hidden',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ChartStyle id={chartId} config={config} />\n\t\t\t\t<RechartsPrimitive.ResponsiveContainer initialDimension={initialDimension}>\n\t\t\t\t\t{children}\n\t\t\t\t</RechartsPrimitive.ResponsiveContainer>\n\t\t\t</div>\n\t\t</ChartContext.Provider>\n\t);\n}\n\nfunction ChartStyle({ id, config }: { id: string; config: ChartConfig }) {\n\tconst colorConfig = Object.entries(config).filter(([, item]) => item.theme ?? item.color);\n\n\tif (!colorConfig.length) {\n\t\treturn null;\n\t}\n\tconst declarations = (mode: ChartTheme) => colorConfig.flatMap(([key, itemConfig]) => {\n\t\tconst color = itemConfig.theme?.[mode] ?? itemConfig.color;\n\t\treturn color ? [`--color-${key}: ${color};`] : [];\n\t});\n\n\treturn (\n\t\t<style\n\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t__html: serializeScopedThemeModes(`[data-chart=${id}]`, { light: declarations('light'), dark: declarations('dark') }),\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nexport interface ChartTooltipContentProps extends React.ComponentPropsWithoutRef<'div'> {\n\t/** Whether the tooltip is showing. Supplied by Recharts. */\n\tactive?: boolean;\n\t/** Data points under the cursor. Supplied by Recharts. */\n\tpayload?: ChartPayloadItem[];\n\t/** Axis label for the hovered position. Supplied by Recharts. */\n\tlabel?: React.ReactNode;\n\t/** Merged onto the tooltip label. */\n\tlabelClassName?: string;\n\t/** Formats the tooltip label. */\n\tlabelFormatter?: (label: React.ReactNode, payload: ChartPayloadItem[]) => React.ReactNode;\n\t/** Formats each tooltip value. */\n\tformatter?: (\n\t\t/** The series value at the hovered point. */\n\t\tvalue: NonNullable<ChartPayloadItem['value']>,\n\t\t/** Series name. */\n\t\tname: NonNullable<ChartPayloadItem['name']>,\n\t\titem: ChartPayloadItem,\n\t\tindex: number,\n\t\t/** The raw data row for the hovered point. Supplied by Recharts. */\n\t\tpayload?: Record<string, unknown>,\n\t) => React.ReactNode;\n\t/** Overrides the colour of the tooltip indicator. */\n\tcolor?: string;\n\t/** Hides the tooltip label row. */\n\thideLabel?: boolean;\n\t/** Hides the colour indicator beside each value. */\n\thideIndicator?: boolean;\n\t/** Shape of the colour indicator. */\n\tindicator?: 'line' | 'dot' | 'dashed';\n\t/** Key in the payload holding each series name. */\n\tnameKey?: string;\n\t/** Key in the payload holding the tooltip label. */\n\tlabelKey?: string;\n}\n\nfunction ChartTooltipContent({\n\tactive,\n\tpayload,\n\tclassName,\n\tindicator = 'dot',\n\thideLabel = false,\n\thideIndicator = false,\n\tlabel,\n\tlabelFormatter,\n\tlabelClassName,\n\tformatter,\n\tcolor,\n\tnameKey,\n\tlabelKey,\n}: ChartTooltipContentProps) {\n\tconst { config } = useChart();\n\n\tconst tooltipLabel = React.useMemo(() => {\n\t\tif (hideLabel || !payload?.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst [item] = payload;\n\t\tconst key = `${labelKey ?? item?.dataKey ?? item?.name ?? 'value'}`;\n\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\tconst value =\n\t\t\t!labelKey && typeof label === 'string'\n\t\t\t\t? (config[label]?.label ?? label)\n\t\t\t\t: itemConfig?.label;\n\n\t\tif (labelFormatter) {\n\t\t\treturn (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"div\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\tclassName={cn('chart--tooltip-label', labelClassName)}\n\t\t\t\t>\n\t\t\t\t\t{labelFormatter(value, payload)}\n\t\t\t\t</Text>\n\t\t\t);\n\t\t}\n\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<Text\n\t\t\t\ttag=\"div\"\n\t\t\t\tsize=\"xs\"\n\t\t\t\ttype=\"inherit\"\n\t\t\t\tweight=\"medium\"\n\t\t\t\tclassName={cn('chart--tooltip-label', labelClassName)}\n\t\t\t>\n\t\t\t\t{value}\n\t\t\t</Text>\n\t\t);\n\t}, [\n\t\tlabel,\n\t\tlabelFormatter,\n\t\tpayload,\n\t\thideLabel,\n\t\tlabelClassName,\n\t\tconfig,\n\t\tlabelKey,\n\t]);\n\n\tif (!active || !payload?.length) {\n\t\treturn null;\n\t}\n\n\tconst nestLabel = payload.length === 1 && indicator !== 'dot';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t// The shared anchored-surface chrome (border, fill, elevation) of popovers and menus.\n\t\t\t\t'chart--tooltip grid min-w-32 items-start gap-space-sm text-xs',\n\t\t\t\tpopoverRecipes.surface,\n\t\t\t\tsurfaceInsetClasses.compact,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!nestLabel && tooltipLabel}\n\t\t\t<div className=\"grid gap-space-sm\">\n\t\t\t\t{payload\n\t\t\t\t\t.filter((item) => item.type !== 'none')\n\t\t\t\t\t.map((item, index) => {\n\t\t\t\t\t\tconst key = `${nameKey ?? item.name ?? item.dataKey ?? 'value'}`;\n\t\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\t\t\t\t\tconst payloadFill =\n\t\t\t\t\t\t\ttypeof item.payload?.fill === 'string'\n\t\t\t\t\t\t\t\t? item.payload.fill\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst indicatorColor = color ?? payloadFill ?? item.color ?? item.fill;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={`${item.dataKey ?? item.name ?? 'value'}-${index}`}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'chart--tooltip-item flex w-full flex-wrap items-stretch gap-space-md [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground',\n\t\t\t\t\t\t\t\t\tindicator === 'dot' && 'items-center',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!!formatter && item.value !== undefined && item.name !== undefined ? (\n\t\t\t\t\t\t\t\t\tformatter(item.value, item.name, item, index, item.payload)\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{itemConfig?.icon ? (\n\t\t\t\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t!hideIndicator && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'shrink-0 rounded-[2px] border-[var(--color-border)] bg-[var(--color-bg)]',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === 'dot' && 'size-2.5',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === 'line' && 'h-3 w-1',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === 'dashed' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'h-0 w-0 border-[1.5px] border-dashed bg-transparent',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnestLabel && indicator === 'dashed' && 'my-0.5',\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'--color-bg': indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'--color-border': indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'flex flex-1 justify-between gap-space-lg leading-none',\n\t\t\t\t\t\t\t\t\t\t\t\tnestLabel ? 'items-end' : 'items-center',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"grid gap-space-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t{nestLabel && tooltipLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{itemConfig?.label ?? item.name}\n\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t{item.value !== undefined && (\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof item.value === 'number' ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<NumberValue value={item.value} size=\"xs\" type=\"inherit\" weight=\"medium\" align=\"right\" />\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Ranges and formatted values stay in the sans UI font with tabular figures.\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"inherit\" weight=\"medium\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{Array.isArray(item.value) ? item.value.join(' - ') : String(item.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nexport interface ChartLegendContentProps extends React.ComponentPropsWithoutRef<'div'> {\n\thideIcon?: boolean;\n\t/** Legend entries, one per series. Supplied by Recharts. */\n\tpayload?: ChartPayloadItem[];\n\tverticalAlign?: 'top' | 'bottom' | 'middle';\n\t/** Key in the payload holding each series name. */\n\tnameKey?: string;\n}\n\nfunction ChartLegendContent({\n\tclassName,\n\thideIcon = false,\n\tpayload,\n\tverticalAlign = 'bottom',\n\tnameKey,\n}: ChartLegendContentProps) {\n\tconst { config } = useChart();\n\n\tif (!payload?.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'chart--legend flex flex-wrap items-center justify-center gap-x-space-xl gap-y-space-md text-xs',\n\t\t\t\tverticalAlign === 'top' ? 'pb-space-lg' : 'pt-space-lg',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{payload\n\t\t\t\t.filter((item) => item.type !== 'none')\n\t\t\t\t.map((item, index) => {\n\t\t\t\t\tconst key = `${nameKey ?? item.dataKey ?? 'value'}`;\n\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\t\t\t\tconst fallbackLabel = item.value ?? item.name ?? item.dataKey ?? key;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={`${item.value ?? key}-${index}`}\n\t\t\t\t\t\t\tclassName=\"chart--legend-item flex items-center gap-space-sm [&>svg]:size-icon-sm [&>svg]:text-muted-foreground\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{itemConfig?.icon && !hideIcon ? (\n\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"h-2 w-2 shrink-0 rounded-[2px]\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: item.color,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\">\n\t\t\t\t\t\t\t\t{itemConfig?.label ?? fallbackLabel}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t</div>\n\t);\n}\n\nfunction getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: unknown,\n\tkey: string,\n) {\n\tif (typeof payload !== 'object' || payload === null) {\n\t\treturn undefined;\n\t}\n\n\tconst payloadPayload =\n\t\t'payload' in payload &&\n\t\ttypeof payload.payload === 'object' &&\n\t\tpayload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined;\n\n\tlet configLabelKey = key;\n\n\tif (\n\t\tkey in payload &&\n\t\ttypeof payload[key as keyof typeof payload] === 'string'\n\t) {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadPayload &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n\t) {\n\t\tconfigLabelKey = payloadPayload[\n\t\t\tkey as keyof typeof payloadPayload\n\t\t] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key];\n}\n\nexport {\n\tChartContainer,\n\tChartTooltip,\n\tChartTooltipContent,\n\tChartLegend,\n\tChartLegendContent,\n\tChartStyle,\n};\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as e } from "./utils-l5LpDw2z.js";
2
+ import { t as e } from "./utils-BRhFDwuU.js";
3
3
  import { t } from "./focus-recipes-B653VaLq.js";
4
4
  import { t as n } from "./field-state-recipes-BVA2CWHo.js";
5
5
  import { forwardRef as r } from "react";
@@ -33,4 +33,4 @@ u.displayName = "Checkbox";
33
33
  //#endregion
34
34
  export { u as t };
35
35
 
36
- //# sourceMappingURL=checkbox-DhB6K0bK.js.map
36
+ //# sourceMappingURL=checkbox-AWIhNhmo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-DhB6K0bK.js","names":["Checkbox","CheckboxPrimitive","Checkbox","CheckboxPrimitive","cn","fieldStateRecipes","Checkbox$2","props","Checkbox","focusRecipes","className","CheckIcon","MinusIcon","Checkbox$1","forwardRef"],"sources":["../src/components/ui/checkbox.tsx","../src/components/base/choice-inputs/checkbox.tsx"],"sourcesContent":["\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\nimport { CheckIcon, MinusIcon } from \"lucide-react\"\n\nimport { fieldStateRecipes } from \"../../lib/field-state-recipes\"\nimport { cn } from \"../../lib/utils\"\nimport { focusRecipes } from \"../../lib/focus-recipes\"\n\nexport interface CheckboxProps extends Omit<CheckboxPrimitive.Root.Props, 'onChange'> {\n\tonCheckedChange?: (checked: boolean | 'indeterminate') => void\n}\n\n/**\n * Raw checkbox recipe. The boundary is the shared `--input` control border, the\n * same one every field and outline button draws; focus is the shared focus frame,\n * and invalid follows the field-state contract (destructive border, destructive\n * halo on focus). Checked and invalid borders win over the focus border.\n */\nfunction Checkbox({\n\tclassName,\n\tonCheckedChange,\n\t...props\n}: CheckboxProps) {\n\treturn (\n\t\t<CheckboxPrimitive.Root\n\t\t\tdata-slot=\"checkbox\"\n\t\t\tclassName={cn(\n\t\t\t\t\"peer box-border inline-flex size-4 shrink-0 items-center justify-center rounded-radius-xs border border-input bg-transparent shadow-none transition-[color,background-color,border-color,box-shadow] outline-none\",\n\t\t\t\tfocusRecipes.frame,\n\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t\"data-[checked]:bg-primary data-[checked]:border-primary data-[checked]:text-primary-foreground\",\n\t\t\t\t\"data-[indeterminate]:bg-primary data-[indeterminate]:border-primary data-[indeterminate]:text-primary-foreground\",\n\t\t\t\t\"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t{...props}\n\t\t>\n\t\t\t<CheckboxPrimitive.Indicator\n\t\t\t\tdata-slot=\"checkbox-indicator\"\n\t\t\t\tclassName=\"group/indicator flex items-center justify-center text-current\"\n\t\t\t>\n\t\t\t\t{/* The indeterminate state draws its own dash instead of a misleading check. */}\n\t\t\t\t<CheckIcon className=\"size-icon-md group-data-[indeterminate]/indicator:hidden\" />\n\t\t\t\t<MinusIcon className=\"hidden size-icon-md group-data-[indeterminate]/indicator:block\" />\n\t\t\t</CheckboxPrimitive.Indicator>\n\t\t</CheckboxPrimitive.Root>\n\t)\n}\n\nexport { Checkbox }\n","import { forwardRef } from 'react';\n\nimport { Checkbox as CheckboxPrimitive, type CheckboxProps } from '../../ui/checkbox';\nimport { cn } from '../../../lib/utils';\n\n/**\n * Checkbox — base wrapper around the shadcn/Base UI checkbox primitive.\n *\n * The primitive renders an inline-flex square, so token size utilities render\n * as a box instead of collapsing to the two border lines. Its boundary is the\n * shared `--input` control border, the same one every field, choice control and\n * outline button draws.\n *\n * The root ref accepts the actual HTMLElement, including custom button renders.\n * The compact corner recipe derives from the shared theme radius, so scoped\n * consumer radius overrides still apply. The indeterminate state draws a dash.\n */\nconst Checkbox = forwardRef<HTMLElement, CheckboxProps>(function Checkbox({ className, ...props }, ref) {\n\treturn (\n\t\t<CheckboxPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('checkbox--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\nexport type { CheckboxProps };\n"],"mappings":";;;;;;;;;AAmBA,SAASA,EAAS,EACjB,cACA,oBACA,GAAGO,KACc;CACjB,OACC,kBAACN,EAAkB,MAAnB;EACC,aAAU;EACV,WAAWG,EACV,qNACAK,EAAa,OACbJ,EAAkB,SAClB,kGACA,oHACA,iEACAK,CACD;EACiB;EACjB,GAAIH;EAEJ,UAAA,kBAACN,EAAkB,WAAnB;GACC,aAAU;GACV,WAAU;GAFX,UAAA,CAKC,kBAACU,GAAD,EAAW,WAAU,2DAA4D,CAAA,GACjF,kBAACC,GAAD,EAAW,WAAU,iEAAkE,CAAA,CAC3D;;CACN,CAAA;AAE1B;;;AChCA,IAAMV,IAAWY,EAAuC,SAAkB,EAAE,cAAW,GAAGP,KAAS,GAAK;CACvG,OACC,kBAACJ,GAAD;EACM;EACL,WAAWC,EAAG,uBAAuBM,CAAS;EAC9C,GAAIH;CACJ,CAAA;AAEH,CAAC;AAED,EAAS,cAAc"}
1
+ {"version":3,"file":"checkbox-AWIhNhmo.js","names":["Checkbox","CheckboxPrimitive","Checkbox","CheckboxPrimitive","cn","fieldStateRecipes","Checkbox$2","props","Checkbox","focusRecipes","className","CheckIcon","MinusIcon","Checkbox$1","forwardRef"],"sources":["../src/components/ui/checkbox.tsx","../src/components/base/choice-inputs/checkbox.tsx"],"sourcesContent":["\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\nimport { CheckIcon, MinusIcon } from \"lucide-react\"\n\nimport { fieldStateRecipes } from \"../../lib/field-state-recipes\"\nimport { cn } from \"../../lib/utils\"\nimport { focusRecipes } from \"../../lib/focus-recipes\"\n\nexport interface CheckboxProps extends Omit<CheckboxPrimitive.Root.Props, 'onChange'> {\n\tonCheckedChange?: (checked: boolean | 'indeterminate') => void\n}\n\n/**\n * Raw checkbox recipe. The boundary is the shared `--input` control border, the\n * same one every field and outline button draws; focus is the shared focus frame,\n * and invalid follows the field-state contract (destructive border, destructive\n * halo on focus). Checked and invalid borders win over the focus border.\n */\nfunction Checkbox({\n\tclassName,\n\tonCheckedChange,\n\t...props\n}: CheckboxProps) {\n\treturn (\n\t\t<CheckboxPrimitive.Root\n\t\t\tdata-slot=\"checkbox\"\n\t\t\tclassName={cn(\n\t\t\t\t\"peer box-border inline-flex size-4 shrink-0 items-center justify-center rounded-radius-xs border border-input bg-transparent shadow-none transition-[color,background-color,border-color,box-shadow] outline-none\",\n\t\t\t\tfocusRecipes.frame,\n\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t\"data-[checked]:bg-primary data-[checked]:border-primary data-[checked]:text-primary-foreground\",\n\t\t\t\t\"data-[indeterminate]:bg-primary data-[indeterminate]:border-primary data-[indeterminate]:text-primary-foreground\",\n\t\t\t\t\"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t{...props}\n\t\t>\n\t\t\t<CheckboxPrimitive.Indicator\n\t\t\t\tdata-slot=\"checkbox-indicator\"\n\t\t\t\tclassName=\"group/indicator flex items-center justify-center text-current\"\n\t\t\t>\n\t\t\t\t{/* The indeterminate state draws its own dash instead of a misleading check. */}\n\t\t\t\t<CheckIcon className=\"size-icon-md group-data-[indeterminate]/indicator:hidden\" />\n\t\t\t\t<MinusIcon className=\"hidden size-icon-md group-data-[indeterminate]/indicator:block\" />\n\t\t\t</CheckboxPrimitive.Indicator>\n\t\t</CheckboxPrimitive.Root>\n\t)\n}\n\nexport { Checkbox }\n","import { forwardRef } from 'react';\n\nimport { Checkbox as CheckboxPrimitive, type CheckboxProps } from '../../ui/checkbox';\nimport { cn } from '../../../lib/utils';\n\n/**\n * Checkbox — base wrapper around the shadcn/Base UI checkbox primitive.\n *\n * The primitive renders an inline-flex square, so token size utilities render\n * as a box instead of collapsing to the two border lines. Its boundary is the\n * shared `--input` control border, the same one every field, choice control and\n * outline button draws.\n *\n * The root ref accepts the actual HTMLElement, including custom button renders.\n * The compact corner recipe derives from the shared theme radius, so scoped\n * consumer radius overrides still apply. The indeterminate state draws a dash.\n */\nconst Checkbox = forwardRef<HTMLElement, CheckboxProps>(function Checkbox({ className, ...props }, ref) {\n\treturn (\n\t\t<CheckboxPrimitive\n\t\t\tref={ref}\n\t\t\tclassName={cn('checkbox--component', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\nexport type { CheckboxProps };\n"],"mappings":";;;;;;;;;AAmBA,SAASA,EAAS,EACjB,cACA,oBACA,GAAGO,KACc;CACjB,OACC,kBAACN,EAAkB,MAAnB;EACC,aAAU;EACV,WAAWG,EACV,qNACAK,EAAa,OACbJ,EAAkB,SAClB,kGACA,oHACA,iEACAK,CACD;EACiB;EACjB,GAAIH;EAEJ,UAAA,kBAACN,EAAkB,WAAnB;GACC,aAAU;GACV,WAAU;GAFX,UAAA,CAKC,kBAACU,GAAD,EAAW,WAAU,2DAA4D,CAAA,GACjF,kBAACC,GAAD,EAAW,WAAU,iEAAkE,CAAA,CAC3D;;CACN,CAAA;AAE1B;;;AChCA,IAAMV,IAAWY,EAAuC,SAAkB,EAAE,cAAW,GAAGP,KAAS,GAAK;CACvG,OACC,kBAACJ,GAAD;EACM;EACL,WAAWC,EAAG,uBAAuBM,CAAS;EAC9C,GAAIH;CACJ,CAAA;AAEH,CAAC;AAED,EAAS,cAAc"}