themelia-react-ui 2.0.5 → 2.0.6

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 (489) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/MIGRATION.md +119 -0
  3. package/README.md +13 -6
  4. package/dist/{accordion-B9MHG0cT.js → accordion-0tQUZ20r.js} +7 -7
  5. package/dist/accordion-0tQUZ20r.js.map +1 -0
  6. package/dist/{action-menu-Dr8K-ghE.js → action-menu-C0gjzLyE.js} +7 -7
  7. package/dist/{action-menu-Dr8K-ghE.js.map → action-menu-C0gjzLyE.js.map} +1 -1
  8. package/dist/{ai-artifact-C58tQcBy.js → ai-artifact-CGGpQryR.js} +172 -157
  9. package/dist/ai-artifact-CGGpQryR.js.map +1 -0
  10. package/dist/{app-shell-B_IuNWOo.js → app-shell-EHuuRDGy.js} +5 -5
  11. package/dist/{app-shell-B_IuNWOo.js.map → app-shell-EHuuRDGy.js.map} +1 -1
  12. package/dist/{attachment-Dg_69lPS.js → attachment-BCpA4e7i.js} +8 -8
  13. package/dist/{attachment-Dg_69lPS.js.map → attachment-BCpA4e7i.js.map} +1 -1
  14. package/dist/{auth-DTkkshS8.js → auth-B0girIk_.js} +15 -15
  15. package/dist/auth-B0girIk_.js.map +1 -0
  16. package/dist/{avatar-CeZaFmNH.js → avatar-B9Jnp-T-.js} +3 -3
  17. package/dist/{avatar-CeZaFmNH.js.map → avatar-B9Jnp-T-.js.map} +1 -1
  18. package/dist/{badge-xIiV_E7f.js → badge-wWauMgAt.js} +3 -3
  19. package/dist/{badge-xIiV_E7f.js.map → badge-wWauMgAt.js.map} +1 -1
  20. package/dist/base/accordion.js +1 -1
  21. package/dist/base/action-menu.js +1 -1
  22. package/dist/base/attachment.js +1 -1
  23. package/dist/base/avatar.js +1 -1
  24. package/dist/base/badge.js +1 -1
  25. package/dist/base/batch-action-bar.js +1 -1
  26. package/dist/base/buttons.js +1 -1
  27. package/dist/base/cards.js +2 -2
  28. package/dist/base/carousel.js +3 -3
  29. package/dist/base/cascader.js +1 -1
  30. package/dist/base/chart.js +1 -1
  31. package/dist/base/choice-inputs.js +2 -2
  32. package/dist/base/code-block.js +1 -1
  33. package/dist/base/combobox.js +1 -1
  34. package/dist/base/command.js +1 -1
  35. package/dist/base/copyable.js +1 -1
  36. package/dist/base/date-pickers.js +2 -2
  37. package/dist/base/display.js +6 -6
  38. package/dist/base/feedback.js +4 -4
  39. package/dist/base/forms-numeric.js +1 -1
  40. package/dist/base/forms.js +2 -2
  41. package/dist/base/inline-edit.js +8 -8
  42. package/dist/base/item.js +1 -1
  43. package/dist/base/media-gallery.js +1 -1
  44. package/dist/base/metadata-list.js +1 -1
  45. package/dist/base/navigation.js +6 -6
  46. package/dist/base/popover-menu.js +1 -1
  47. package/dist/base/popover.js +1 -1
  48. package/dist/base/qr-code.js +1 -1
  49. package/dist/base/repeaters.js +195 -188
  50. package/dist/base/repeaters.js.map +1 -1
  51. package/dist/base/sheet.js +1 -1
  52. package/dist/base/sidebar.js +2 -2
  53. package/dist/base/signature-pad.js +7 -7
  54. package/dist/base/skeleton.js +1 -1
  55. package/dist/base/spinner.js +5 -5
  56. package/dist/base/spinner.js.map +1 -1
  57. package/dist/base/structure.js +1 -1
  58. package/dist/base/table.js +1 -1
  59. package/dist/base/text-inputs.js +2 -2
  60. package/dist/base/toaster.js +1 -1
  61. package/dist/base/tree.js +1 -1
  62. package/dist/base/upload-queue.js +1 -1
  63. package/dist/base/upload.js +3 -3
  64. package/dist/base/value-inputs.js +1 -1
  65. package/dist/{batch-action-bar-Cb8cuvyy.js → batch-action-bar-BoqWIIpV.js} +5 -5
  66. package/dist/{batch-action-bar-Cb8cuvyy.js.map → batch-action-bar-BoqWIIpV.js.map} +1 -1
  67. package/dist/blocks/admin.js +17 -17
  68. package/dist/blocks/ai.js +227 -221
  69. package/dist/blocks/ai.js.map +1 -1
  70. package/dist/blocks/analytics/usage-card.js +1 -1
  71. package/dist/blocks/analytics.js +424 -449
  72. package/dist/blocks/analytics.js.map +1 -1
  73. package/dist/blocks/collaboration.js +1 -1
  74. package/dist/blocks/commerce/receipt.js +1 -1
  75. package/dist/blocks/commerce.js +225 -220
  76. package/dist/blocks/commerce.js.map +1 -1
  77. package/dist/blocks/data-display.js +2 -2
  78. package/dist/blocks/onboarding.js +5 -5
  79. package/dist/blocks/planning.js +11 -11
  80. package/dist/blocks/timelines.js +1 -1
  81. package/dist/{breadcrumbs-J-K2kl4c.js → breadcrumbs-Bp9Ke7kd.js} +4 -4
  82. package/dist/breadcrumbs-Bp9Ke7kd.js.map +1 -0
  83. package/dist/{button-S2Cubiiz.js → button-ChBovTx0.js} +2 -2
  84. package/dist/{button-S2Cubiiz.js.map → button-ChBovTx0.js.map} +1 -1
  85. package/dist/{buttons-BedGfygC.js → buttons-DeW0bQeK.js} +6 -6
  86. package/dist/{buttons-BedGfygC.js.map → buttons-DeW0bQeK.js.map} +1 -1
  87. package/dist/{cards-rNX1M4Xn.js → cards-CNXnmvV5.js} +8 -8
  88. package/dist/{cards-rNX1M4Xn.js.map → cards-CNXnmvV5.js.map} +1 -1
  89. package/dist/{cascader-B1MiqkBq.js → cascader-CrAl9zD5.js} +15 -15
  90. package/dist/{cascader-B1MiqkBq.js.map → cascader-CrAl9zD5.js.map} +1 -1
  91. package/dist/{chart-Darg_0Kv.js → chart-I7ROnsl8.js} +5 -5
  92. package/dist/{chart-Darg_0Kv.js.map → chart-I7ROnsl8.js.map} +1 -1
  93. package/dist/{checkbox-fflqmODR.js → checkbox-MoyHIAPs.js} +3 -3
  94. package/dist/{checkbox-fflqmODR.js.map → checkbox-MoyHIAPs.js.map} +1 -1
  95. package/dist/{choice-inputs-zUgBZfE4.js → choice-inputs-DHGtx0QV.js} +122 -110
  96. package/dist/choice-inputs-DHGtx0QV.js.map +1 -0
  97. package/dist/{code-block-BzmM9Eig.js → code-block-BSJyq9e-.js} +7 -7
  98. package/dist/{code-block-BzmM9Eig.js.map → code-block-BSJyq9e-.js.map} +1 -1
  99. package/dist/{collapsible-BkAI_XD4.js → collapsible-BzJ91LUG.js} +3 -3
  100. package/dist/{collapsible-BkAI_XD4.js.map → collapsible-BzJ91LUG.js.map} +1 -1
  101. package/dist/{collection-content-gDh1v6O4.js → collection-content-CSnwtOTH.js} +3 -3
  102. package/dist/{collection-content-gDh1v6O4.js.map → collection-content-CSnwtOTH.js.map} +1 -1
  103. package/dist/{combobox-BEx0vJgF.js → combobox-Bcvu5J8O.js} +11 -10
  104. package/dist/{combobox-BEx0vJgF.js.map → combobox-Bcvu5J8O.js.map} +1 -1
  105. package/dist/combobox-C2JiSQPc.js +915 -0
  106. package/dist/combobox-C2JiSQPc.js.map +1 -0
  107. package/dist/{command-CrlPIL6m.js → command-9e52NPgK.js} +6 -6
  108. package/dist/{command-CrlPIL6m.js.map → command-9e52NPgK.js.map} +1 -1
  109. package/dist/{comments-Dmpp0YIc.js → comments-BsgErEqd.js} +33 -28
  110. package/dist/comments-BsgErEqd.js.map +1 -0
  111. package/dist/components/base/choice-inputs/choice-types.d.ts +4 -0
  112. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
  113. package/dist/components/base/combobox/combobox-field.d.ts +2 -2
  114. package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
  115. package/dist/components/base/date-pickers/datepicker.types.d.ts +10 -4
  116. package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
  117. package/dist/components/base/feedback/state-display.d.ts +5 -1
  118. package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
  119. package/dist/components/base/forms/form-field.d.ts +7 -2
  120. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -1
  121. package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
  122. package/dist/components/base/forms-numeric/dimensions-input.d.ts +4 -1
  123. package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
  124. package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
  125. package/dist/components/base/navigation/language-switcher.d.ts +12 -4
  126. package/dist/components/base/repeaters/key-value-editor.d.ts +2 -1
  127. package/dist/components/base/sidebar/sidebar.d.ts +2 -0
  128. package/dist/components/base/upload/avatar-upload.d.ts +2 -1
  129. package/dist/components/base/upload/image-upload.d.ts +2 -1
  130. package/dist/components/blocks/ai/ai-citation/types.d.ts +2 -0
  131. package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
  132. package/dist/components/blocks/ai/ai-sources/types.d.ts +2 -0
  133. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +2 -0
  134. package/dist/components/blocks/analytics/metric/metric.d.ts +4 -0
  135. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  136. package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
  137. package/dist/components/blocks/analytics/types.d.ts +2 -2
  138. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  139. package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +4 -3
  140. package/dist/components/features/activities/activities.types.d.ts +18 -11
  141. package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
  142. package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
  143. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
  144. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +4 -2
  145. package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
  146. package/dist/components/features/combobox/combobox.d.ts +2 -2
  147. package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -1
  148. package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
  149. package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
  150. package/dist/components/features/combobox/types.d.ts +37 -8
  151. package/dist/components/features/email-composer/types.d.ts +3 -1
  152. package/dist/components/features/filters/facets/date-facet.d.ts +4 -2
  153. package/dist/components/features/filters/facets/range-facet.d.ts +12 -0
  154. package/dist/components/features/filters/filters.types.d.ts +3 -3
  155. package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
  156. package/dist/components/features/filters/partials/filter-popover-content.d.ts +4 -2
  157. package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
  158. package/dist/components/features/filters/utils/filter-utils.d.ts +5 -1
  159. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  160. package/dist/components/features/media-library/media-library.d.ts +1 -1
  161. package/dist/components/features/media-library/media-library.strings.d.ts +6 -0
  162. package/dist/components/features/media-library/media-library.types.d.ts +36 -8
  163. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  164. package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
  165. package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +5 -1
  166. package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +1 -7
  167. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
  168. package/dist/components/features/products/products.types.d.ts +2 -2
  169. package/dist/components/features/questionnaire/questionnaire.types.d.ts +3 -0
  170. package/dist/components/features/resource/resource.d.ts +1 -1
  171. package/dist/components/features/resource/resource.types.d.ts +2 -0
  172. package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
  173. package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +1 -1
  174. package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
  175. package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +3 -1
  176. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
  177. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +17 -3
  178. package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -1
  179. package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
  180. package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
  181. package/dist/components/features/suggestions/suggestions.types.d.ts +1 -1
  182. package/dist/components/features/table/data-table.d.ts +1 -1
  183. package/dist/components/features/table/index.d.ts +1 -0
  184. package/dist/components/features/table/table-body.d.ts +1 -1
  185. package/dist/components/features/table/table-helpers.d.ts +6 -3
  186. package/dist/components/features/table/table.strings.d.ts +3 -0
  187. package/dist/components/features/table/table.types.d.ts +17 -1
  188. package/dist/components/layout/header/header.types.d.ts +3 -2
  189. package/dist/components/layout/layout.types.d.ts +5 -3
  190. package/dist/components/layout/navigation/side-nav.d.ts +3 -2
  191. package/dist/components/layout/normalize-layout-path.d.ts +1 -0
  192. package/dist/components/layout/settings/settings.d.ts +1 -1
  193. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  194. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +3 -1
  195. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -0
  196. package/dist/components/layout/sidebar/sidebar.types.d.ts +2 -0
  197. package/dist/components/primitives/link.d.ts +3 -2
  198. package/dist/components/primitives/money.d.ts +1 -1
  199. package/dist/components/primitives/number.d.ts +1 -1
  200. package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
  201. package/dist/{containers-CIxwbZt5.js → containers-CSdc32h9.js} +2 -2
  202. package/dist/{containers-CIxwbZt5.js.map → containers-CSdc32h9.js.map} +1 -1
  203. package/dist/{copyable-DIznBqiT.js → copyable-3fdHfMR3.js} +4 -4
  204. package/dist/{copyable-DIznBqiT.js.map → copyable-3fdHfMR3.js.map} +1 -1
  205. package/dist/{data-display-BdgCAw8T.js → data-display-Cmj-xZYl.js} +16 -15
  206. package/dist/data-display-Cmj-xZYl.js.map +1 -0
  207. package/dist/{date-Cq8ioE4o.js → date-Br0FicVv.js} +4 -4
  208. package/dist/{date-Cq8ioE4o.js.map → date-Br0FicVv.js.map} +1 -1
  209. package/dist/date-picker-CyQlFYsP.js +1617 -0
  210. package/dist/date-picker-CyQlFYsP.js.map +1 -0
  211. package/dist/date-pickers-tj2MXmXd.js +185 -0
  212. package/dist/date-pickers-tj2MXmXd.js.map +1 -0
  213. package/dist/{display-KsZLw9Ov.js → display-CT_N2a3w.js} +7 -7
  214. package/dist/{display-KsZLw9Ov.js.map → display-CT_N2a3w.js.map} +1 -1
  215. package/dist/{dropdown-menu-CLs8Lihj.js → dropdown-menu-C08iIugv.js} +6 -6
  216. package/dist/{dropdown-menu-CLs8Lihj.js.map → dropdown-menu-C08iIugv.js.map} +1 -1
  217. package/dist/features/activities.js +283 -270
  218. package/dist/features/activities.js.map +1 -1
  219. package/dist/features/ai-chat.js +40 -27
  220. package/dist/features/ai-chat.js.map +1 -1
  221. package/dist/features/appointment-calendar.js +126 -126
  222. package/dist/features/appointment-calendar.js.map +1 -1
  223. package/dist/features/async-preview.js +9 -9
  224. package/dist/features/combobox.js +1 -1
  225. package/dist/features/comments.js +1 -1
  226. package/dist/features/data-view.js +10 -10
  227. package/dist/features/email-composer.js +24 -19
  228. package/dist/features/email-composer.js.map +1 -1
  229. package/dist/features/event-calendar.js +129 -125
  230. package/dist/features/event-calendar.js.map +1 -1
  231. package/dist/features/filters.js +2 -2
  232. package/dist/features/global-search.js +16 -20
  233. package/dist/features/global-search.js.map +1 -1
  234. package/dist/features/kanban.js +18 -28
  235. package/dist/features/kanban.js.map +1 -1
  236. package/dist/features/map/style.css +15 -0
  237. package/dist/features/map.js +331 -314
  238. package/dist/features/map.js.map +1 -1
  239. package/dist/features/media-library.js +1044 -866
  240. package/dist/features/media-library.js.map +1 -1
  241. package/dist/features/mentions.js +2 -2
  242. package/dist/features/overlays.js +1 -1
  243. package/dist/features/products.js +978 -964
  244. package/dist/features/products.js.map +1 -1
  245. package/dist/features/questionnaire.js +159 -152
  246. package/dist/features/questionnaire.js.map +1 -1
  247. package/dist/features/resource-assignment.js +8 -8
  248. package/dist/features/resource.js +74 -71
  249. package/dist/features/resource.js.map +1 -1
  250. package/dist/features/rich-text-editor.js +28 -19
  251. package/dist/features/rich-text-editor.js.map +1 -1
  252. package/dist/features/schema-form.js +297 -256
  253. package/dist/features/schema-form.js.map +1 -1
  254. package/dist/features/suggestions.js +57 -50
  255. package/dist/features/suggestions.js.map +1 -1
  256. package/dist/features/sync.js +3 -3
  257. package/dist/features/table.js +1 -1
  258. package/dist/features/theme-tweaker.js +400 -399
  259. package/dist/features/theme-tweaker.js.map +1 -1
  260. package/dist/feedback-Dzo1xtAU.js +246 -0
  261. package/dist/feedback-Dzo1xtAU.js.map +1 -0
  262. package/dist/{field-affordance-recipes-DWcNcOjh.js → field-affordance-recipes-D6H7tVJi.js} +2 -2
  263. package/dist/{field-affordance-recipes-DWcNcOjh.js.map → field-affordance-recipes-D6H7tVJi.js.map} +1 -1
  264. package/dist/field-control-attributes-B6i335wr.js +18 -0
  265. package/dist/field-control-attributes-B6i335wr.js.map +1 -0
  266. package/dist/{field-state-recipes-BVA2CWHo.js → field-state-recipes-7sza8QbC.js} +4 -2
  267. package/dist/{field-state-recipes-BVA2CWHo.js.map → field-state-recipes-7sza8QbC.js.map} +1 -1
  268. package/dist/{filters-DzgSJpMK.js → filters-Dl80yYtN.js} +763 -605
  269. package/dist/filters-Dl80yYtN.js.map +1 -0
  270. package/dist/form-field-CAPdwdnZ.js +74 -0
  271. package/dist/form-field-CAPdwdnZ.js.map +1 -0
  272. package/dist/{form-sizing-Bs2qFUeE.js → form-sizing-CgcrUbLU.js} +2 -2
  273. package/dist/{form-sizing-Bs2qFUeE.js.map → form-sizing-CgcrUbLU.js.map} +1 -1
  274. package/dist/{forms-C0RGnJTe.js → forms-B3W8CH7-.js} +8 -8
  275. package/dist/{forms-C0RGnJTe.js.map → forms-B3W8CH7-.js.map} +1 -1
  276. package/dist/forms-numeric-CwjQJe-O.js +991 -0
  277. package/dist/forms-numeric-CwjQJe-O.js.map +1 -0
  278. package/dist/{header-DMMxG__r.js → header-ZIIsRKxP.js} +113 -113
  279. package/dist/header-ZIIsRKxP.js.map +1 -0
  280. package/dist/hooks/use-files.d.ts +2 -0
  281. package/dist/{hooks-DB6CJ4MR.js → hooks-BitHSh-Y.js} +3 -3
  282. package/dist/{hooks-DB6CJ4MR.js.map → hooks-BitHSh-Y.js.map} +1 -1
  283. package/dist/{icon-badge-DZF-YjQp.js → icon-badge-npxF1SLX.js} +2 -2
  284. package/dist/{icon-badge-DZF-YjQp.js.map → icon-badge-npxF1SLX.js.map} +1 -1
  285. package/dist/index.js +1 -1
  286. package/dist/{input-CvyDQlY7.js → input-7KAc7XQL.js} +6 -6
  287. package/dist/{input-CvyDQlY7.js.map → input-7KAc7XQL.js.map} +1 -1
  288. package/dist/{input-DMBwAZmr.js → input-DIREVYHs.js} +3 -3
  289. package/dist/{input-DMBwAZmr.js.map → input-DIREVYHs.js.map} +1 -1
  290. package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-4wZ2tvfb.js} +2 -2
  291. package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-4wZ2tvfb.js.map} +1 -1
  292. package/dist/{item-DjCcM18E.js → item-FfWnaYST.js} +99 -98
  293. package/dist/item-FfWnaYST.js.map +1 -0
  294. package/dist/layout/app-shell.js +1 -1
  295. package/dist/layout/auth.js +1 -1
  296. package/dist/layout/containers.js +1 -1
  297. package/dist/layout/header.js +1 -1
  298. package/dist/layout/hooks.js +1 -1
  299. package/dist/layout/navigation.js +1 -1
  300. package/dist/layout/page.js +1 -1
  301. package/dist/layout/settings.js +1 -1
  302. package/dist/layout/sidebar.js +2 -2
  303. package/dist/layout/workspace.js +1 -1
  304. package/dist/layout.js +11 -11
  305. package/dist/layout.types-E_GAApzO.js +30 -0
  306. package/dist/layout.types-E_GAApzO.js.map +1 -0
  307. package/dist/lib/field-control-attributes.d.ts +11 -0
  308. package/dist/lib/field-state-recipes.d.ts +2 -0
  309. package/dist/lib/format.d.ts +1 -0
  310. package/dist/lib/surface-recipes.d.ts +1 -1
  311. package/dist/lib/token-merge.generated.d.ts +6 -6
  312. package/dist/lib/utils.js +1 -1
  313. package/dist/{media-gallery-C-vChPmE.js → media-gallery-C81DAnKI.js} +6 -6
  314. package/dist/{media-gallery-C-vChPmE.js.map → media-gallery-C81DAnKI.js.map} +1 -1
  315. package/dist/{mentions-0_4nWuI-.js → mentions-qOnedSt4.js} +236 -167
  316. package/dist/mentions-qOnedSt4.js.map +1 -0
  317. package/dist/message-BJHnn43M.js +135 -0
  318. package/dist/message-BJHnn43M.js.map +1 -0
  319. package/dist/{metadata-list-C3MkU-Om.js → metadata-list-XkqZ_UXH.js} +11 -11
  320. package/dist/{metadata-list-C3MkU-Om.js.map → metadata-list-XkqZ_UXH.js.map} +1 -1
  321. package/dist/{navigation-DaRjthVk.js → navigation-BgtPJAhi.js} +119 -119
  322. package/dist/navigation-BgtPJAhi.js.map +1 -0
  323. package/dist/{navigation-C90-oQFq.js → navigation-Bt-v7rWP.js} +52 -46
  324. package/dist/navigation-Bt-v7rWP.js.map +1 -0
  325. package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
  326. package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
  327. package/dist/{number-CRU3kGuk.js → number-CYqBcrSj.js} +78 -86
  328. package/dist/number-CYqBcrSj.js.map +1 -0
  329. package/dist/{overflow-tab-bar-IVFVQFV6.js → overflow-tab-bar-BQCA2Zn2.js} +7 -7
  330. package/dist/{overflow-tab-bar-IVFVQFV6.js.map → overflow-tab-bar-BQCA2Zn2.js.map} +1 -1
  331. package/dist/{overlays-BSgCtM2v.js → overlays-CC8zI3Du.js} +264 -260
  332. package/dist/overlays-CC8zI3Du.js.map +1 -0
  333. package/dist/{page-DUUKDAjo.js → page-BoQ1VaFJ.js} +13 -13
  334. package/dist/{page-DUUKDAjo.js.map → page-BoQ1VaFJ.js.map} +1 -1
  335. package/dist/{page-header-commands-7P3sfE9u.js → page-header-commands-DIKspJfx.js} +4 -4
  336. package/dist/{page-header-commands-7P3sfE9u.js.map → page-header-commands-DIKspJfx.js.map} +1 -1
  337. package/dist/{pagination-CgCjElfu.js → pagination-Br8TdV9A.js} +4 -4
  338. package/dist/{pagination-CgCjElfu.js.map → pagination-Br8TdV9A.js.map} +1 -1
  339. package/dist/{popover-B85RenIl.js → popover-k8TdUcAt.js} +10 -10
  340. package/dist/popover-k8TdUcAt.js.map +1 -0
  341. package/dist/{popover-menu-DlnQ2zlR.js → popover-menu-yn-o0kyA.js} +7 -7
  342. package/dist/{popover-menu-DlnQ2zlR.js.map → popover-menu-yn-o0kyA.js.map} +1 -1
  343. package/dist/{popover.recipes-DdiEp0rd.js → popover.recipes-DJ0AkUan.js} +2 -2
  344. package/dist/{popover.recipes-DdiEp0rd.js.map → popover.recipes-DJ0AkUan.js.map} +1 -1
  345. package/dist/{portal-recipes-BpsV_iRw.js → portal-recipes-DyUXqUtD.js} +2 -2
  346. package/dist/{portal-recipes-BpsV_iRw.js.map → portal-recipes-DyUXqUtD.js.map} +1 -1
  347. package/dist/{primitives-ByWgGUgt.js → primitives-BkkQjYl7.js} +22 -17
  348. package/dist/primitives-BkkQjYl7.js.map +1 -0
  349. package/dist/primitives.js +4 -4
  350. package/dist/{progress-BJhQP9WX.js → progress-DZFXXzPs.js} +4 -4
  351. package/dist/{progress-BJhQP9WX.js.map → progress-DZFXXzPs.js.map} +1 -1
  352. package/dist/{receipt-tOc7B3hw.js → receipt-C7LhOg7Q.js} +6 -6
  353. package/dist/{receipt-tOc7B3hw.js.map → receipt-C7LhOg7Q.js.map} +1 -1
  354. package/dist/rich-text-BnTzZjIo.js +45 -0
  355. package/dist/rich-text-BnTzZjIo.js.map +1 -0
  356. package/dist/rich-text-editor-CAurDwT5.js +1273 -0
  357. package/dist/rich-text-editor-CAurDwT5.js.map +1 -0
  358. package/dist/{rich-text-editor-toolbar-laT3tpBT.js → rich-text-editor-toolbar-DbXig7Jk.js} +36 -35
  359. package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +1 -0
  360. package/dist/rich-text-tree-BqyQ_7-R.js +66 -0
  361. package/dist/rich-text-tree-BqyQ_7-R.js.map +1 -0
  362. package/dist/{sanitize-html-DsQmI48u.js → sanitize-html-BWkH4dLM.js} +29 -16
  363. package/dist/sanitize-html-BWkH4dLM.js.map +1 -0
  364. package/dist/{scroll-area-B0dB2cBi.js → scroll-area-Bj6CRUif.js} +2 -2
  365. package/dist/{scroll-area-B0dB2cBi.js.map → scroll-area-Bj6CRUif.js.map} +1 -1
  366. package/dist/{separator-Bb17I4pu.js → separator-B9ewiCGO.js} +2 -2
  367. package/dist/{separator-Bb17I4pu.js.map → separator-B9ewiCGO.js.map} +1 -1
  368. package/dist/{separator-Ct_WSWTJ.js → separator-DM6gs2vu.js} +3 -3
  369. package/dist/{separator-Ct_WSWTJ.js.map → separator-DM6gs2vu.js.map} +1 -1
  370. package/dist/services/actions.js +1 -1
  371. package/dist/settings-DZPHgpx4.js +155 -0
  372. package/dist/settings-DZPHgpx4.js.map +1 -0
  373. package/dist/{sheet-BGPERY55.js → sheet-C4DHsgLk.js} +6 -6
  374. package/dist/{sheet-BGPERY55.js.map → sheet-C4DHsgLk.js.map} +1 -1
  375. package/dist/sidebar-C8BnDwTH.js +709 -0
  376. package/dist/sidebar-C8BnDwTH.js.map +1 -0
  377. package/dist/{sidebar-f9gRWXIR.js → sidebar-CmD6a-HK.js} +16 -13
  378. package/dist/sidebar-CmD6a-HK.js.map +1 -0
  379. package/dist/{skeleton-BapcJd9C.js → skeleton-DDgdhmu9.js} +5 -5
  380. package/dist/{skeleton-BapcJd9C.js.map → skeleton-DDgdhmu9.js.map} +1 -1
  381. package/dist/{smart-card-CW0hjetE.js → smart-card-B6vLxqa_.js} +8 -8
  382. package/dist/{smart-card-CW0hjetE.js.map → smart-card-B6vLxqa_.js.map} +1 -1
  383. package/dist/{structure-DuxKl954.js → structure-DZJ2wbAU.js} +2 -2
  384. package/dist/{structure-DuxKl954.js.map → structure-DZJ2wbAU.js.map} +1 -1
  385. package/dist/style.css +1 -1
  386. package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-C8mNycaY.js} +2 -2
  387. package/dist/{surface-recipes-BKRVW8Os.js.map → surface-recipes-C8mNycaY.js.map} +1 -1
  388. package/dist/{table-CFOWY9pQ.js → table-CBonSdTp.js} +534 -486
  389. package/dist/table-CBonSdTp.js.map +1 -0
  390. package/dist/{table-B4TE7iOV.js → table-CXSPHH25.js} +75 -71
  391. package/dist/table-CXSPHH25.js.map +1 -0
  392. package/dist/{tabs-e7ko9S2o.js → tabs-C4Kr_hCr.js} +50 -49
  393. package/dist/tabs-C4Kr_hCr.js.map +1 -0
  394. package/dist/{text-inputs-B1culiSK.js → text-inputs-jdkS3ReG.js} +9 -9
  395. package/dist/{text-inputs-B1culiSK.js.map → text-inputs-jdkS3ReG.js.map} +1 -1
  396. package/dist/{timelines-D3Sl9ueq.js → timelines-CoPwdJP0.js} +10 -10
  397. package/dist/{timelines-D3Sl9ueq.js.map → timelines-CoPwdJP0.js.map} +1 -1
  398. package/dist/{tooltip-8wz5S_Zr.js → tooltip-31NwIpTo.js} +4 -4
  399. package/dist/{tooltip-8wz5S_Zr.js.map → tooltip-31NwIpTo.js.map} +1 -1
  400. package/dist/{tree-CzUJHnFs.js → tree-CeYVzdFE.js} +6 -6
  401. package/dist/{tree-CzUJHnFs.js.map → tree-CeYVzdFE.js.map} +1 -1
  402. package/dist/typography/rich-text.js +1 -1
  403. package/dist/{typography-BQnine1k.js → typography-C7-YMW1S.js} +2 -2
  404. package/dist/{typography-BQnine1k.js.map → typography-C7-YMW1S.js.map} +1 -1
  405. package/dist/typography.js +1 -1
  406. package/dist/{upload-BOW6U2tI.js → upload-Hdm5gObf.js} +303 -291
  407. package/dist/upload-Hdm5gObf.js.map +1 -0
  408. package/dist/{upload-queue-qUXn1ykN.js → upload-queue-D0sYPuqo.js} +8 -8
  409. package/dist/{upload-queue-qUXn1ykN.js.map → upload-queue-D0sYPuqo.js.map} +1 -1
  410. package/dist/{usage-card-BeSLY0i0.js → usage-card-9s8hLDfn.js} +9 -9
  411. package/dist/{usage-card-BeSLY0i0.js.map → usage-card-9s8hLDfn.js.map} +1 -1
  412. package/dist/{utils-B6kKb8jB.js → utils-DhuoqFy4.js} +31 -37
  413. package/dist/utils-DhuoqFy4.js.map +1 -0
  414. package/dist/{value-inputs-skdVB2zh.js → value-inputs-D3aPgq9H.js} +15 -15
  415. package/dist/{value-inputs-skdVB2zh.js.map → value-inputs-D3aPgq9H.js.map} +1 -1
  416. package/dist/{value-typography-uAmWUAL1.js → value-typography-uSzzG9Gf.js} +32 -26
  417. package/dist/value-typography-uSzzG9Gf.js.map +1 -0
  418. package/dist/{workspace-DHeHv0qw.js → workspace-CC8Vchiu.js} +12 -12
  419. package/dist/{workspace-DHeHv0qw.js.map → workspace-CC8Vchiu.js.map} +1 -1
  420. package/docs/consumer-skill/examples/edit.tsx +3 -3
  421. package/docs/consumer-skill/references/agents-md.md +19 -19
  422. package/docs/consumer-skill/references/analytics.md +15 -0
  423. package/docs/consumer-skill/references/component-contracts.json +14724 -13057
  424. package/docs/consumer-skill/references/composition.md +21 -4
  425. package/docs/consumer-skill/references/design-contract.md +1 -0
  426. package/docs/consumer-skill/references/installation.md +51 -8
  427. package/docs/consumer-skill/references/integration.md +24 -1
  428. package/docs/consumer-skill/references/public-api.json +172 -34
  429. package/docs/consumer-skill/references/review.md +51 -11
  430. package/docs/consumer-skill/references/rhf-workflows.md +72 -0
  431. package/docs/consumer-skill/references/theming.md +7 -2
  432. package/docs/consumer-skill/references/tokens.json +1 -1
  433. package/docs/consumer-skill/scripts/composition-policy.mjs +144 -30
  434. package/docs/consumer-skill/scripts/setup-skills.mjs +46 -9
  435. package/package.json +4 -2
  436. package/templates/admin-shell-template.tsx +1 -2
  437. package/templates/customers-template.tsx +18 -16
  438. package/dist/accordion-B9MHG0cT.js.map +0 -1
  439. package/dist/ai-artifact-C58tQcBy.js.map +0 -1
  440. package/dist/auth-DTkkshS8.js.map +0 -1
  441. package/dist/breadcrumbs-J-K2kl4c.js.map +0 -1
  442. package/dist/choice-inputs-zUgBZfE4.js.map +0 -1
  443. package/dist/combobox-BwzoXFSG.js +0 -884
  444. package/dist/combobox-BwzoXFSG.js.map +0 -1
  445. package/dist/comments-Dmpp0YIc.js.map +0 -1
  446. package/dist/data-display-BdgCAw8T.js.map +0 -1
  447. package/dist/date-picker-RlIzKom_.js +0 -1551
  448. package/dist/date-picker-RlIzKom_.js.map +0 -1
  449. package/dist/date-pickers-DY-CpXS1.js +0 -179
  450. package/dist/date-pickers-DY-CpXS1.js.map +0 -1
  451. package/dist/feedback-Dm4izqFn.js +0 -240
  452. package/dist/feedback-Dm4izqFn.js.map +0 -1
  453. package/dist/filters-DzgSJpMK.js.map +0 -1
  454. package/dist/form-field-BriWAXyg.js +0 -63
  455. package/dist/form-field-BriWAXyg.js.map +0 -1
  456. package/dist/forms-numeric-DIhghX1Q.js +0 -910
  457. package/dist/forms-numeric-DIhghX1Q.js.map +0 -1
  458. package/dist/header-DMMxG__r.js.map +0 -1
  459. package/dist/item-DjCcM18E.js.map +0 -1
  460. package/dist/layout.types-Cn7aUzJp.js +0 -20
  461. package/dist/layout.types-Cn7aUzJp.js.map +0 -1
  462. package/dist/mentions-0_4nWuI-.js.map +0 -1
  463. package/dist/message-g8p7eVtN.js +0 -128
  464. package/dist/message-g8p7eVtN.js.map +0 -1
  465. package/dist/navigation-C90-oQFq.js.map +0 -1
  466. package/dist/navigation-DaRjthVk.js.map +0 -1
  467. package/dist/number-CRU3kGuk.js.map +0 -1
  468. package/dist/overlays-BSgCtM2v.js.map +0 -1
  469. package/dist/popover-B85RenIl.js.map +0 -1
  470. package/dist/primitives-ByWgGUgt.js.map +0 -1
  471. package/dist/rich-text-Dth5E882.js +0 -78
  472. package/dist/rich-text-Dth5E882.js.map +0 -1
  473. package/dist/rich-text-editor-C1fOjBTd.js +0 -1195
  474. package/dist/rich-text-editor-C1fOjBTd.js.map +0 -1
  475. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +0 -1
  476. package/dist/safe-image-src-C6kQSMBZ.js +0 -17
  477. package/dist/safe-image-src-C6kQSMBZ.js.map +0 -1
  478. package/dist/sanitize-html-DsQmI48u.js.map +0 -1
  479. package/dist/settings-Bar5wiSo.js +0 -167
  480. package/dist/settings-Bar5wiSo.js.map +0 -1
  481. package/dist/sidebar-D-JYMMbY.js +0 -686
  482. package/dist/sidebar-D-JYMMbY.js.map +0 -1
  483. package/dist/sidebar-f9gRWXIR.js.map +0 -1
  484. package/dist/table-B4TE7iOV.js.map +0 -1
  485. package/dist/table-CFOWY9pQ.js.map +0 -1
  486. package/dist/tabs-e7ko9S2o.js.map +0 -1
  487. package/dist/upload-BOW6U2tI.js.map +0 -1
  488. package/dist/utils-B6kKb8jB.js.map +0 -1
  489. package/dist/value-typography-uAmWUAL1.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cascader-B1MiqkBq.js","names":["useDensityConfig","Text","motionRecipes","Stack","surfaceDividerRecipes","surfaceInsetClasses","popoverWidthRecipes","CollectionContent","fieldAffordanceRecipes","selectToggleRecipes","CommandItem","CommandList","Command","resolveFormControlSize","FieldClearButton","Input","PopoverTitle","PopoverTrigger","PopoverHeader","PopoverDescription","Popover","PopoverContent","ScrollArea","indexHierarchy","isBranch","Tree","defaultCascaderStrings","cascaderValues","value","statusRowClasses","resolveHierarchy","nodes","children","cache","node","useCascaderController","path","setPath","useState","query","setQuery","direction","setDirection","expanded","setExpanded","highlights","setHighlights","setCache","cacheSource","useRef","cacheCurrent","items","loadChildren","cacheRef","loads","setLoads","requests","mounted","inputItems","currentLoader","panel","pendingFocus","pendingTreeFocus","resolvedItems","useMemo","index","paths","selected","key","activePath","current","results","entry","strings","abortPending","controller","previous","state","useEffect","open","selectedNodes","selectedPath","rememberPath","mode","visibleBranches","load","row","element","option","next","keys","level","canSelect","selectable","commit","disabled","remove","multiple","retry","sourceItems","loader","nextCache","enter","nextPath","item","goBack","departed","focusList","levelKey","rtl","event","activeId","CascaderPanel","status","parent","Button","column","saved","highlight","cn","ChevronRight","trail","rootInPath","className","header","ChevronLeft","searchable","Cascader","controlledOpen","sizeProp","customStrings","aria","size","defaultScale","localValue","setLocalValue","defaultValue","localOpen","setLocalOpen","defaultOpen","triggerRef","showClear","clearable","changeOpen","onOpenChange","onValueChange","details","label","i","name","invalid","formFieldTriggerClasses","renderValue","ChevronDown"],"sources":["../src/components/base/cascader/cascader-panel.tsx","../src/components/base/cascader/cascader.tsx"],"sourcesContent":["/**\n * Private cascader panel: the levels, path header, search and branch loading\n * shared by the Cascader field and hosts that already own a popover surface,\n * such as the filters editor. Not a public entrypoint: its header uses the\n * popover anatomy, so it renders inside a PopoverContent.\n */\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { Button } from '../buttons';\nimport { PopoverDescription, PopoverHeader, PopoverTitle } from '../popover';\nimport { Command, CommandItem, CommandList } from '../command';\nimport { Input } from '../text-inputs';\nimport { ScrollArea } from '../display';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { surfaceInsetClasses } from '../popover/popover.recipes';\nimport { CollectionContent } from '../popover/collection-content';\nimport { Tree } from '../tree';\nimport { indexHierarchy, isBranch } from '../tree/hierarchy';\nimport { cn } from '../../../lib/utils';\nimport { motionRecipes } from '../../../lib/motion-recipes';\nimport { surfaceDividerRecipes } from '../../../lib/surface-recipes';\nimport type { RowDensity } from '../../../lib/row-recipes';\nimport type { CascaderChangeDetails, CascaderMode, CascaderNode, CascaderProps, CascaderStrings } from './cascader.types';\n\nexport const defaultCascaderStrings: CascaderStrings = { placeholder: 'Choose an option', search: 'Search options', empty: 'No options', loading: 'Loading options…', error: 'Options could not be loaded.', retry: 'Retry', back: 'Back', root: 'All options', clear: 'Clear selection', selectCurrent: 'Select current category', pathSeparator: ' / ' };\nexport const cascaderValues = (value: CascaderProps['value']): readonly string[] => value == null ? [] : typeof value === 'string' ? [value] : value;\n/** Status copy in a list aligns with the row text, not the list edge. */\nconst statusRowClasses = 'px-row-x py-row-y';\ntype LoadState = { status: 'loading' | 'error'; };\nfunction resolveHierarchy<T>(nodes: readonly CascaderNode<T>[], cache: ReadonlyMap<string, readonly CascaderNode<T>[]>): CascaderNode<T>[] {\n return nodes.map(node => {\n const children = cache.get(node.value) ?? node.children;\n return { ...node, ...(children ? { children: resolveHierarchy(children, cache) } : {}), ...(cache.has(node.value) ? { hasChildren: !!children?.length } : {}) };\n });\n}\n\nexport interface CascaderControllerOptions<T> {\n items: readonly CascaderNode<T>[];\n /** Selected node values; the host owns the value. */\n selected: readonly string[];\n /** Receives the next value; the host stores it and decides whether to close. */\n onChange: (value: string | string[] | null, details: CascaderChangeDetails<T>) => void;\n /** Whether the panel is showing. Opening reveals the selected path; closing aborts pending loads. */\n open: boolean;\n multiple?: boolean;\n mode?: CascaderMode;\n selectable?: CascaderProps<T>['selectable'];\n disabled?: boolean;\n searchable?: boolean;\n density?: RowDensity;\n strings: CascaderStrings;\n loadChildren?: CascaderProps<T>['loadChildren'];\n}\n\n/** State, branch loading and keyboard navigation for one cascader panel. */\nexport function useCascaderController<T>({ items, selected, onChange, open, multiple = false, mode = 'drill', selectable = 'leaf', disabled = false, searchable = true, density = 'default', strings, loadChildren }: CascaderControllerOptions<T>) {\n const [path, setPath] = useState<string[]>([]);\n const [query, setQuery] = useState('');\n // The way the last level was reached; a new level enters from that side.\n const [direction, setDirection] = useState<'forward' | 'back' | null>(null);\n const [expanded, setExpanded] = useState<string[]>([]);\n const [highlights, setHighlights] = useState(new Map<string | undefined, string>());\n const [cache, setCache] = useState(new Map<string, readonly CascaderNode<T>[]>());\n const cacheSource = useRef({items, loadChildren});\n const cacheCurrent = cacheSource.current.items === items && cacheSource.current.loadChildren === loadChildren;\n const cacheRef = useRef(cache);\n useLayoutEffect(() => { cacheRef.current = cache; }, [cache]);\n const [loads, setLoads] = useState(new Map<string, LoadState>());\n const requests = useRef(new Map<string, AbortController>());\n const mounted = useRef(true);\n const inputItems = useRef(items);\n const currentLoader = useRef(loadChildren);\n useLayoutEffect(() => { inputItems.current = items; currentLoader.current = loadChildren; }, [items, loadChildren]);\n const panel = useRef<HTMLDivElement>(null);\n const pendingFocus = useRef<number | null>(null);\n const pendingTreeFocus = useRef<string | null>(null);\n const resolvedItems = useMemo(() => resolveHierarchy(items, cacheCurrent ? cache : new Map()), [items, cache, cacheCurrent]);\n const index = useMemo(() => indexHierarchy(resolvedItems), [resolvedItems]);\n const paths = selected.map(key => index.get(key)?.path ?? []);\n const activePath = path.filter(key => index.has(key));\n const current = activePath.length ? index.get(activePath.at(-1)!)?.node : undefined;\n const results = query.trim() ? [...index.values()].filter(entry => !entry.disabled && entry.path.map(node => node.label).join(strings.pathSeparator).toLocaleLowerCase().includes(query.trim().toLocaleLowerCase())) : null;\n function abortPending() {\n for (const controller of requests.current.values()) controller.abort();\n requests.current.clear();\n setLoads(previous => new Map([...previous].filter(([, state]) => state.status !== 'loading')));\n }\n useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; for (const controller of requests.current.values()) controller.abort(); requests.current.clear(); };\n }, []);\n useEffect(() => { abortPending(); cacheSource.current = {items, loadChildren}; cacheRef.current = new Map(); setCache(cacheRef.current); setLoads(new Map()); setPath([]); setExpanded([]); setHighlights(new Map()); pendingFocus.current = null; pendingTreeFocus.current = null; }, [items, loadChildren]);\n useEffect(() => {\n setDirection(null);\n if (!open) { abortPending(); setQuery(''); }\n else {\n const selectedNodes = paths.find(nodes => nodes.length);\n const selectedPath = selectedNodes?.slice(0, -1).map(node => node.value);\n if (selectedPath) {\n setPath(selectedPath);\n rememberPath(selectedNodes!.map(node => node.value));\n if (mode === 'tree') setExpanded(previous => [...new Set([...previous, ...selectedPath])]);\n }\n const visibleBranches = mode === 'tree' ? [...expanded, ...(selectedPath ?? [])] : selectedPath ?? activePath;\n for (const key of visibleBranches) { const node = index.get(key)?.node; if (node) void load(node); }\n }\n }, [open]);\n useEffect(() => {\n if (pendingTreeFocus.current !== null) {\n const row = [...(panel.current?.querySelectorAll<HTMLElement>('[data-tree-value]') ?? [])].find(element => element.dataset.treeValue === pendingTreeFocus.current);\n if (row) { row.focus(); pendingTreeFocus.current = null; }\n }\n if (pendingFocus.current === null) return;\n const columns = panel.current?.querySelectorAll('[data-cascader-level]');\n const target = columns?.[pendingFocus.current];\n const option = target?.querySelector<HTMLElement>('[data-cascader-list][tabindex=\"0\"]');\n if (option) { option.focus(); pendingFocus.current = null; }\n }, [path, cache, query]);\n function rememberPath(keys: readonly string[]) {\n setHighlights(previous => {\n const next = new Map(previous);\n keys.forEach((key, level) => next.set(level ? keys[level - 1] : undefined, key));\n return next;\n });\n }\n function canSelect(node: CascaderNode<T>) { return typeof selectable === 'function' ? selectable(node) : selectable === 'any' || !isBranch(node); }\n function commit(node: CascaderNode<T> | null) {\n if (disabled || (node && (index.get(node.value)?.disabled || !canSelect(node)))) return;\n const remove = !!node && selected.includes(node.value);\n const next = node ? multiple ? remove ? selected.filter(key => key !== node.value) : [...selected, node.value] : node.value : multiple ? [] : null;\n onChange(next, { node, path: node ? index.get(node.value)?.path ?? [node] : [], reason: node ? multiple && remove ? 'deselect' : 'select' : 'clear' });\n }\n async function load(node: CascaderNode<T>, retry = false) {\n if (!loadChildren || !node.hasChildren || node.children !== undefined || (cacheCurrent && cache.has(node.value)) || requests.current.has(node.value) || (!retry && cacheCurrent && loads.get(node.value)?.status === 'error')) return;\n const controller = new AbortController();\n const sourceItems = inputItems.current;\n const loader = loadChildren;\n requests.current.set(node.value, controller);\n setLoads(previous => new Map(previous).set(node.value, {status: 'loading'}));\n try {\n const children = await loader(node, {signal: controller.signal});\n if (!mounted.current || controller.signal.aborted || inputItems.current !== sourceItems || currentLoader.current !== loader || requests.current.get(node.value) !== controller) return;\n // Reject duplicate/cyclic values before a bad response can replace the rendered hierarchy.\n const nextCache = new Map(cacheRef.current).set(node.value, children);\n indexHierarchy(resolveHierarchy(sourceItems, nextCache));\n cacheRef.current = nextCache;\n setCache(nextCache);\n setLoads(previous => {const next = new Map(previous); next.delete(node.value); return next;});\n } catch {\n if (mounted.current && !controller.signal.aborted && inputItems.current === sourceItems && currentLoader.current === loader) setLoads(previous => new Map(previous).set(node.value, {status: 'error'}));\n } finally { if (requests.current.get(node.value) === controller) requests.current.delete(node.value); }\n }\n function enter(node: CascaderNode<T>, level: number) {\n if (index.get(node.value)?.disabled) return;\n if (isBranch(node)) {\n const nextPath = index.get(node.value)?.path.map(item => item.value) ?? [...activePath.slice(0, level), node.value];\n rememberPath(nextPath);\n setQuery(''); setPath(nextPath); setDirection('forward');\n if (mode === 'tree') { setExpanded(previous => [...new Set([...previous, ...nextPath])]); pendingTreeFocus.current = node.value; }\n else pendingFocus.current = mode === 'columns' ? nextPath.length : 0;\n void load(node);\n }\n else commit(node);\n }\n function goBack(focusList = true) {\n if (disabled || !activePath.length) return;\n const departed = activePath.at(-1)!;\n const nextPath = activePath.slice(0, -1);\n requests.current.get(departed)?.abort(); requests.current.delete(departed);\n setLoads(previous => { if (previous.get(departed)?.status !== 'loading') return previous; const next = new Map(previous); next.delete(departed); return next; });\n setHighlights(previous => new Map(previous).set(nextPath.at(-1), departed));\n setQuery(''); setPath(nextPath); setDirection('back');\n pendingFocus.current = focusList ? mode === 'columns' ? nextPath.length : 0 : null;\n }\n function levelKey(event: KeyboardEvent<HTMLDivElement>, level: number) {\n const rtl = getComputedStyle(event.currentTarget).direction === 'rtl';\n if (event.key === (rtl ? 'ArrowRight' : 'ArrowLeft') && activePath.length) {\n event.preventDefault(); event.stopPropagation();\n if (mode === 'columns' && level > 0) panel.current?.querySelectorAll('[data-cascader-level]')[level - 1]?.querySelector<HTMLElement>('[data-cascader-list][tabindex=\"0\"]')?.focus();\n else goBack();\n } else if (event.key === (rtl ? 'ArrowLeft' : 'ArrowRight')) {\n const activeId = event.currentTarget.querySelector('[data-cascader-list]')?.getAttribute('aria-activedescendant');\n const row = (event.target as HTMLElement).closest('[data-node-value]') ?? (activeId ? document.getElementById(activeId) : null);\n const key = row?.getAttribute('data-node-value');\n const node = index.get(key ?? '')?.node;\n if (node && isBranch(node)) { event.preventDefault(); event.stopPropagation(); enter(node, level); }\n }\n }\n return { panel, path, query, setQuery, direction, setDirection, expanded, setExpanded, highlights, setHighlights, loads, resolvedItems, index, paths, activePath, current, results, selected, multiple, mode, disabled, searchable, density, strings, canSelect, commit, load, enter, goBack, levelKey };\n}\n\nexport type CascaderController<T> = ReturnType<typeof useCascaderController<T>>;\n\ninterface CascaderPanelProps<T> {\n controller: CascaderController<T>;\n className?: string;\n /** The host's header at the root level; a drilled level replaces it with its own, so one back control shows at a time. */\n header?: ReactNode;\n /** Starts a drilled level's path with the root label, for hosts whose header names the root. */\n rootInPath?: boolean;\n}\n\n/** The header, search and levels of a cascader, inside an existing popover surface. */\nexport function CascaderPanel<T>({ controller, className, header, rootInPath = false }: CascaderPanelProps<T>) {\n const { panel, query, setQuery, direction, setDirection, expanded, setExpanded, highlights, setHighlights, loads, resolvedItems, index, activePath, current, results, selected, multiple, mode, disabled, searchable, density, strings, canSelect, commit, load, enter, goBack, levelKey } = controller;\n function state(parent: CascaderNode<T> | undefined, nodes: readonly CascaderNode<T>[]) {\n const status = parent ? loads.get(parent.value)?.status : undefined;\n if (status === 'loading') return <Text role=\"status\" type=\"secondary\" className={statusRowClasses}>{strings.loading}</Text>;\n if (status === 'error') return <Stack gap=\"sm\" align=\"start\" className={statusRowClasses}><Text role=\"alert\" type=\"error\">{strings.error}</Text><Button buttonStyle=\"outline\" size=\"sm\" onClick={() => parent && void load(parent, true)}>{strings.retry}</Button></Stack>;\n if (!nodes.length) return <Text role=\"status\" type=\"secondary\" className={statusRowClasses}>{strings.empty}</Text>;\n return null;\n }\n function column(nodes: readonly CascaderNode<T>[], parent: CascaderNode<T> | undefined, level: number) {\n const saved = highlights.get(parent?.value);\n const highlight = nodes.find(node => node.value === saved && !index.get(node.value)?.disabled)?.value ?? nodes.find(node => !index.get(node.value)?.disabled)?.value ?? '';\n return <div key={JSON.stringify(parent ? [parent.value] : [])} data-cascader-level={level} data-direction={direction ?? undefined} className={cn('cascader--level min-w-0', motionRecipes.level, mode === 'columns' && !results && 'w-56 shrink-0')} onKeyDownCapture={event => levelKey(event, level)}>\n <Command shouldFilter={false} value={highlight} onValueChange={next => setHighlights(previous => new Map(previous).set(parent?.value, next))} aria-label={parent?.label ?? strings.root}>\n <CommandList data-cascader-list aria-multiselectable={multiple || undefined} aria-label={parent?.label ?? strings.root} tabIndex={nodes.some(node => !index.get(node.value)?.disabled) ? 0 : -1}>\n {state(parent, nodes)}\n {nodes.map(node => <CommandItem key={node.value} value={node.value} data-node-value={node.value} density={density} disabled={disabled || index.get(node.value)?.disabled} data-checked={selected.includes(node.value)} aria-selected={selected.includes(node.value)} onSelect={() => enter(node, level)}>\n <CollectionContent label={results ? index.get(node.value)?.path.map(item => item.label).join(strings.pathSeparator) : node.label} description={node.description} leading={node.icon} leadingDecorative wrap trailing={isBranch(node) ? <ChevronRight aria-hidden=\"true\" className=\"size-icon rtl:rotate-180\" /> : undefined} />\n </CommandItem>)}\n </CommandList>\n </Command>\n </div>;\n }\n const trail = [...(rootInPath ? [strings.root] : []), ...activePath.slice(0, -1).map(key => index.get(key)?.node.label)];\n return <div ref={panel} className={cn('cascader-panel--component', className)}>\n {!activePath.length || mode === 'tree' ? header : <PopoverHeader start={<Button tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly aria-label={strings.back} withTooltip={strings.back} onClick={() => goBack()}><ChevronLeft aria-hidden=\"true\" className=\"size-icon-sm rtl:rotate-180\" /></Button>}>\n {/* The command sits beside the title and path, so it never stretches the title row. */}\n <Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" justify=\"between\" wrap>\n <Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n <PopoverTitle className=\"min-w-0 wrap-anywhere\">{current?.label}</PopoverTitle>\n {trail.length > 0 && <PopoverDescription>{trail.join(strings.pathSeparator)}</PopoverDescription>}\n </Stack>\n {current && canSelect(current) && <Button buttonStyle=\"outline\" size=\"sm\" onClick={() => commit(current)}>{strings.selectCurrent}</Button>}\n </Stack>\n </PopoverHeader>}\n {searchable && <div className={cn('cascader--search', surfaceInsetClasses.compact, surfaceDividerRecipes.anchored.header)}><Input aria-label={strings.search} placeholder={strings.search} value={query} onChange={event => { setQuery(event.target.value); setDirection(null); }} onKeyDown={event => {\n if (event.key === 'ArrowDown') { const option = panel.current?.querySelector<HTMLElement>('[data-cascader-list][tabindex=\"0\"], [role=treeitem][tabindex=\"0\"]'); if (option) { event.preventDefault(); option.focus(); } }\n else if (event.key === 'Backspace' && !query && activePath.length && mode !== 'tree') { event.preventDefault(); goBack(false); }\n }} /></div>}\n {results ? column(results.map(entry => entry.node), undefined, 0) : mode === 'tree' ? <ScrollArea className=\"h-72\"><div className={surfaceInsetClasses.compact}><Tree items={resolvedItems} aria-label={strings.root} density={density} selectionMode={multiple ? 'multiple' : 'single'} selectedValues={selected} expandedValues={expanded} empty={strings.empty}\n onExpandedValuesChange={next => {\n setExpanded(next);\n for (const key of next) {\n if (expanded.includes(key)) continue;\n const node = index.get(key)?.node;\n if (node) void load(node);\n }\n }}\n onSelectedValuesChange={(_next, node) => commit(node)} /></div>\n {[...loads].filter(([key]) => expanded.includes(key)).map(([key]) => <PopoverHeader key={key}><Text size=\"xs\" type=\"secondary\">{index.get(key)?.node.label}</Text>{state(index.get(key)?.node, [])}</PopoverHeader>)}\n </ScrollArea> : mode === 'columns' ? <ScrollArea orientation=\"both\" className=\"max-w-full\" viewportClassName=\"max-h-80\"><div className=\"flex items-start\">{column(resolvedItems, undefined, 0)}{activePath.map((key, level) => { const node = index.get(key)?.node; return node ? column(node.children ?? [], node, level + 1) : null; })}</div></ScrollArea> : column(current?.children ?? (current ? [] : resolvedItems), current, 0)}\n </div>;\n}\n","import { useRef, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { FieldClearButton } from '../text-inputs/field-clear-button';\nimport { popoverWidthRecipes } from '../popover/popover.recipes';\nimport { formFieldTriggerClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { fieldAffordanceRecipes, selectToggleRecipes } from '../../../lib/field-affordance-recipes';\nimport { CascaderPanel, cascaderValues, defaultCascaderStrings, useCascaderController } from './cascader-panel';\nimport type { CascaderProps } from './cascader.types';\n\nexport function Cascader<T = unknown>({ items, value, defaultValue = null, onValueChange, multiple = false, mode = 'drill', selectable = 'leaf', open: controlledOpen, defaultOpen = false, onOpenChange, disabled = false, invalid = false, searchable = true, clearable = false, density = 'default', size: sizeProp, name, id, className, strings: customStrings, loadChildren, renderValue, ...aria }: CascaderProps<T>) {\n const { defaultScale } = useDensityConfig();\n const size = resolveFormControlSize(sizeProp, defaultScale);\n const strings = { ...defaultCascaderStrings, ...customStrings };\n const [localValue, setLocalValue] = useState(defaultValue);\n const selected = cascaderValues(value === undefined ? localValue : value);\n const [localOpen, setLocalOpen] = useState(defaultOpen);\n const open = !disabled && (controlledOpen ?? localOpen);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const showClear = clearable && !!selected.length;\n function changeOpen(next: boolean) {\n if (disabled) return;\n if (controlledOpen === undefined) setLocalOpen(next);\n onOpenChange?.(next);\n }\n const controller = useCascaderController<T>({ items, selected, open, multiple, mode, selectable, disabled, searchable, density, strings, loadChildren, onChange: (next, details) => {\n if (value === undefined) setLocalValue(next);\n onValueChange?.(next, details);\n if (!multiple && details.node) changeOpen(false);\n } });\n const { paths, results } = controller;\n const label = selected.length ? paths.map((nodes, i) => nodes.length ? nodes.map(node => node.label).join(strings.pathSeparator) : selected[i]).join(', ') : strings.placeholder;\n return <div className={cn('cascader--component min-w-0', className)}>\n {name && selected.map(key => <input key={key} type=\"hidden\" name={name} value={key} disabled={disabled} />)}\n <div className=\"cascader--field relative min-w-0\">\n <Popover open={open} onOpenChange={changeOpen}>\n {/* Input's field frame; the select-toggle padding keeps the value clear of the affordance track. */}\n <PopoverTrigger ref={triggerRef} id={id} {...aria} disabled={disabled} aria-invalid={invalid || undefined} className={cn('cascader--trigger', formFieldTriggerClasses(size), showClear ? selectToggleRecipes.clearPadding[size] : selectToggleRecipes.padding[size])}>\n <span className={cn('cascader--value min-w-0 flex-1 truncate text-start', !selected.length && 'text-muted-foreground')}>{renderValue ? renderValue(paths) : label}</span>\n </PopoverTrigger>\n <PopoverContent type=\"menu\" inset=\"flush\" className={cn('cascader--popup', popoverWidthRecipes.lg, mode === 'columns' && !results && 'w-auto')}>\n <CascaderPanel controller={controller} />\n </PopoverContent>\n </Popover>\n {/* The Combobox affordance track: the shared clear target one gap before the\n chevron, which centres where a Select draws its own. The chevron passes\n pointer input through to the trigger beneath it. */}\n <div className={cn('cascader--affordances pointer-events-none flex items-center gap-space-xs text-muted-foreground', fieldAffordanceRecipes.centered, selectToggleRecipes.track[size])}>\n {showClear && <FieldClearButton aria-label={strings.clear} disabled={disabled} className=\"cascader--clear pointer-events-auto\"\n onClick={() => { controller.commit(null); triggerRef.current?.focus(); }} />}\n <span aria-hidden=\"true\" className={cn('cascader--toggle', fieldAffordanceRecipes.target, disabled && 'opacity-50')}>\n <ChevronDown className={cn(selectToggleRecipes.icon[size], 'shrink-0')} />\n </span>\n </div>\n </div>\n </div>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cascader-CrAl9zD5.js","names":["useDensityConfig","Text","motionRecipes","Stack","surfaceDividerRecipes","surfaceInsetClasses","popoverWidthRecipes","CollectionContent","fieldAffordanceRecipes","selectToggleRecipes","CommandItem","CommandList","Command","resolveFormControlSize","FieldClearButton","Input","PopoverTitle","PopoverTrigger","PopoverHeader","PopoverDescription","Popover","PopoverContent","ScrollArea","indexHierarchy","isBranch","Tree","defaultCascaderStrings","cascaderValues","value","statusRowClasses","resolveHierarchy","nodes","children","cache","node","useCascaderController","path","setPath","useState","query","setQuery","direction","setDirection","expanded","setExpanded","highlights","setHighlights","setCache","cacheSource","useRef","cacheCurrent","items","loadChildren","cacheRef","loads","setLoads","requests","mounted","inputItems","currentLoader","panel","pendingFocus","pendingTreeFocus","resolvedItems","useMemo","index","paths","selected","key","activePath","current","results","entry","strings","abortPending","controller","previous","state","useEffect","open","selectedNodes","selectedPath","rememberPath","mode","visibleBranches","load","row","element","option","next","keys","level","canSelect","selectable","commit","disabled","remove","multiple","retry","sourceItems","loader","nextCache","enter","nextPath","item","goBack","departed","focusList","levelKey","rtl","event","activeId","CascaderPanel","status","parent","Button","column","saved","highlight","cn","ChevronRight","trail","rootInPath","className","header","ChevronLeft","searchable","Cascader","controlledOpen","sizeProp","customStrings","aria","size","defaultScale","localValue","setLocalValue","defaultValue","localOpen","setLocalOpen","defaultOpen","triggerRef","showClear","clearable","changeOpen","onOpenChange","onValueChange","details","label","i","name","invalid","formFieldTriggerClasses","renderValue","ChevronDown"],"sources":["../src/components/base/cascader/cascader-panel.tsx","../src/components/base/cascader/cascader.tsx"],"sourcesContent":["/**\n * Private cascader panel: the levels, path header, search and branch loading\n * shared by the Cascader field and hosts that already own a popover surface,\n * such as the filters editor. Not a public entrypoint: its header uses the\n * popover anatomy, so it renders inside a PopoverContent.\n */\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { Button } from '../buttons';\nimport { PopoverDescription, PopoverHeader, PopoverTitle } from '../popover';\nimport { Command, CommandItem, CommandList } from '../command';\nimport { Input } from '../text-inputs';\nimport { ScrollArea } from '../display';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { surfaceInsetClasses } from '../popover/popover.recipes';\nimport { CollectionContent } from '../popover/collection-content';\nimport { Tree } from '../tree';\nimport { indexHierarchy, isBranch } from '../tree/hierarchy';\nimport { cn } from '../../../lib/utils';\nimport { motionRecipes } from '../../../lib/motion-recipes';\nimport { surfaceDividerRecipes } from '../../../lib/surface-recipes';\nimport type { RowDensity } from '../../../lib/row-recipes';\nimport type { CascaderChangeDetails, CascaderMode, CascaderNode, CascaderProps, CascaderStrings } from './cascader.types';\n\nexport const defaultCascaderStrings: CascaderStrings = { placeholder: 'Choose an option', search: 'Search options', empty: 'No options', loading: 'Loading options…', error: 'Options could not be loaded.', retry: 'Retry', back: 'Back', root: 'All options', clear: 'Clear selection', selectCurrent: 'Select current category', pathSeparator: ' / ' };\nexport const cascaderValues = (value: CascaderProps['value']): readonly string[] => value == null ? [] : typeof value === 'string' ? [value] : value;\n/** Status copy in a list aligns with the row text, not the list edge. */\nconst statusRowClasses = 'px-row-x py-row-y';\ntype LoadState = { status: 'loading' | 'error'; };\nfunction resolveHierarchy<T>(nodes: readonly CascaderNode<T>[], cache: ReadonlyMap<string, readonly CascaderNode<T>[]>): CascaderNode<T>[] {\n return nodes.map(node => {\n const children = cache.get(node.value) ?? node.children;\n return { ...node, ...(children ? { children: resolveHierarchy(children, cache) } : {}), ...(cache.has(node.value) ? { hasChildren: !!children?.length } : {}) };\n });\n}\n\nexport interface CascaderControllerOptions<T> {\n items: readonly CascaderNode<T>[];\n /** Selected node values; the host owns the value. */\n selected: readonly string[];\n /** Receives the next value; the host stores it and decides whether to close. */\n onChange: (value: string | string[] | null, details: CascaderChangeDetails<T>) => void;\n /** Whether the panel is showing. Opening reveals the selected path; closing aborts pending loads. */\n open: boolean;\n multiple?: boolean;\n mode?: CascaderMode;\n selectable?: CascaderProps<T>['selectable'];\n disabled?: boolean;\n searchable?: boolean;\n density?: RowDensity;\n strings: CascaderStrings;\n loadChildren?: CascaderProps<T>['loadChildren'];\n}\n\n/** State, branch loading and keyboard navigation for one cascader panel. */\nexport function useCascaderController<T>({ items, selected, onChange, open, multiple = false, mode = 'drill', selectable = 'leaf', disabled = false, searchable = true, density = 'default', strings, loadChildren }: CascaderControllerOptions<T>) {\n const [path, setPath] = useState<string[]>([]);\n const [query, setQuery] = useState('');\n // The way the last level was reached; a new level enters from that side.\n const [direction, setDirection] = useState<'forward' | 'back' | null>(null);\n const [expanded, setExpanded] = useState<string[]>([]);\n const [highlights, setHighlights] = useState(new Map<string | undefined, string>());\n const [cache, setCache] = useState(new Map<string, readonly CascaderNode<T>[]>());\n const cacheSource = useRef({items, loadChildren});\n const cacheCurrent = cacheSource.current.items === items && cacheSource.current.loadChildren === loadChildren;\n const cacheRef = useRef(cache);\n useLayoutEffect(() => { cacheRef.current = cache; }, [cache]);\n const [loads, setLoads] = useState(new Map<string, LoadState>());\n const requests = useRef(new Map<string, AbortController>());\n const mounted = useRef(true);\n const inputItems = useRef(items);\n const currentLoader = useRef(loadChildren);\n useLayoutEffect(() => { inputItems.current = items; currentLoader.current = loadChildren; }, [items, loadChildren]);\n const panel = useRef<HTMLDivElement>(null);\n const pendingFocus = useRef<number | null>(null);\n const pendingTreeFocus = useRef<string | null>(null);\n const resolvedItems = useMemo(() => resolveHierarchy(items, cacheCurrent ? cache : new Map()), [items, cache, cacheCurrent]);\n const index = useMemo(() => indexHierarchy(resolvedItems), [resolvedItems]);\n const paths = selected.map(key => index.get(key)?.path ?? []);\n const activePath = path.filter(key => index.has(key));\n const current = activePath.length ? index.get(activePath.at(-1)!)?.node : undefined;\n const results = query.trim() ? [...index.values()].filter(entry => !entry.disabled && entry.path.map(node => node.label).join(strings.pathSeparator).toLocaleLowerCase().includes(query.trim().toLocaleLowerCase())) : null;\n function abortPending() {\n for (const controller of requests.current.values()) controller.abort();\n requests.current.clear();\n setLoads(previous => new Map([...previous].filter(([, state]) => state.status !== 'loading')));\n }\n useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; for (const controller of requests.current.values()) controller.abort(); requests.current.clear(); };\n }, []);\n useEffect(() => { abortPending(); cacheSource.current = {items, loadChildren}; cacheRef.current = new Map(); setCache(cacheRef.current); setLoads(new Map()); setPath([]); setExpanded([]); setHighlights(new Map()); pendingFocus.current = null; pendingTreeFocus.current = null; }, [items, loadChildren]);\n useEffect(() => {\n setDirection(null);\n if (!open) { abortPending(); setQuery(''); }\n else {\n const selectedNodes = paths.find(nodes => nodes.length);\n const selectedPath = selectedNodes?.slice(0, -1).map(node => node.value);\n if (selectedPath) {\n setPath(selectedPath);\n rememberPath(selectedNodes!.map(node => node.value));\n if (mode === 'tree') setExpanded(previous => [...new Set([...previous, ...selectedPath])]);\n }\n const visibleBranches = mode === 'tree' ? [...expanded, ...(selectedPath ?? [])] : selectedPath ?? activePath;\n for (const key of visibleBranches) { const node = index.get(key)?.node; if (node) void load(node); }\n }\n }, [open]);\n useEffect(() => {\n if (pendingTreeFocus.current !== null) {\n const row = [...(panel.current?.querySelectorAll<HTMLElement>('[data-tree-value]') ?? [])].find(element => element.dataset.treeValue === pendingTreeFocus.current);\n if (row) { row.focus(); pendingTreeFocus.current = null; }\n }\n if (pendingFocus.current === null) return;\n const columns = panel.current?.querySelectorAll('[data-cascader-level]');\n const target = columns?.[pendingFocus.current];\n const option = target?.querySelector<HTMLElement>('[data-cascader-list][tabindex=\"0\"]');\n if (option) { option.focus(); pendingFocus.current = null; }\n }, [path, cache, query]);\n function rememberPath(keys: readonly string[]) {\n setHighlights(previous => {\n const next = new Map(previous);\n keys.forEach((key, level) => next.set(level ? keys[level - 1] : undefined, key));\n return next;\n });\n }\n function canSelect(node: CascaderNode<T>) { return typeof selectable === 'function' ? selectable(node) : selectable === 'any' || !isBranch(node); }\n function commit(node: CascaderNode<T> | null) {\n if (disabled || (node && (index.get(node.value)?.disabled || !canSelect(node)))) return;\n const remove = !!node && selected.includes(node.value);\n const next = node ? multiple ? remove ? selected.filter(key => key !== node.value) : [...selected, node.value] : node.value : multiple ? [] : null;\n onChange(next, { node, path: node ? index.get(node.value)?.path ?? [node] : [], reason: node ? multiple && remove ? 'deselect' : 'select' : 'clear' });\n }\n async function load(node: CascaderNode<T>, retry = false) {\n if (!loadChildren || !node.hasChildren || node.children !== undefined || (cacheCurrent && cache.has(node.value)) || requests.current.has(node.value) || (!retry && cacheCurrent && loads.get(node.value)?.status === 'error')) return;\n const controller = new AbortController();\n const sourceItems = inputItems.current;\n const loader = loadChildren;\n requests.current.set(node.value, controller);\n setLoads(previous => new Map(previous).set(node.value, {status: 'loading'}));\n try {\n const children = await loader(node, {signal: controller.signal});\n if (!mounted.current || controller.signal.aborted || inputItems.current !== sourceItems || currentLoader.current !== loader || requests.current.get(node.value) !== controller) return;\n // Reject duplicate/cyclic values before a bad response can replace the rendered hierarchy.\n const nextCache = new Map(cacheRef.current).set(node.value, children);\n indexHierarchy(resolveHierarchy(sourceItems, nextCache));\n cacheRef.current = nextCache;\n setCache(nextCache);\n setLoads(previous => {const next = new Map(previous); next.delete(node.value); return next;});\n } catch {\n if (mounted.current && !controller.signal.aborted && inputItems.current === sourceItems && currentLoader.current === loader) setLoads(previous => new Map(previous).set(node.value, {status: 'error'}));\n } finally { if (requests.current.get(node.value) === controller) requests.current.delete(node.value); }\n }\n function enter(node: CascaderNode<T>, level: number) {\n if (index.get(node.value)?.disabled) return;\n if (isBranch(node)) {\n const nextPath = index.get(node.value)?.path.map(item => item.value) ?? [...activePath.slice(0, level), node.value];\n rememberPath(nextPath);\n setQuery(''); setPath(nextPath); setDirection('forward');\n if (mode === 'tree') { setExpanded(previous => [...new Set([...previous, ...nextPath])]); pendingTreeFocus.current = node.value; }\n else pendingFocus.current = mode === 'columns' ? nextPath.length : 0;\n void load(node);\n }\n else commit(node);\n }\n function goBack(focusList = true) {\n if (disabled || !activePath.length) return;\n const departed = activePath.at(-1)!;\n const nextPath = activePath.slice(0, -1);\n requests.current.get(departed)?.abort(); requests.current.delete(departed);\n setLoads(previous => { if (previous.get(departed)?.status !== 'loading') return previous; const next = new Map(previous); next.delete(departed); return next; });\n setHighlights(previous => new Map(previous).set(nextPath.at(-1), departed));\n setQuery(''); setPath(nextPath); setDirection('back');\n pendingFocus.current = focusList ? mode === 'columns' ? nextPath.length : 0 : null;\n }\n function levelKey(event: KeyboardEvent<HTMLDivElement>, level: number) {\n const rtl = getComputedStyle(event.currentTarget).direction === 'rtl';\n if (event.key === (rtl ? 'ArrowRight' : 'ArrowLeft') && activePath.length) {\n event.preventDefault(); event.stopPropagation();\n if (mode === 'columns' && level > 0) panel.current?.querySelectorAll('[data-cascader-level]')[level - 1]?.querySelector<HTMLElement>('[data-cascader-list][tabindex=\"0\"]')?.focus();\n else goBack();\n } else if (event.key === (rtl ? 'ArrowLeft' : 'ArrowRight')) {\n const activeId = event.currentTarget.querySelector('[data-cascader-list]')?.getAttribute('aria-activedescendant');\n const row = (event.target as HTMLElement).closest('[data-node-value]') ?? (activeId ? document.getElementById(activeId) : null);\n const key = row?.getAttribute('data-node-value');\n const node = index.get(key ?? '')?.node;\n if (node && isBranch(node)) { event.preventDefault(); event.stopPropagation(); enter(node, level); }\n }\n }\n return { panel, path, query, setQuery, direction, setDirection, expanded, setExpanded, highlights, setHighlights, loads, resolvedItems, index, paths, activePath, current, results, selected, multiple, mode, disabled, searchable, density, strings, canSelect, commit, load, enter, goBack, levelKey };\n}\n\nexport type CascaderController<T> = ReturnType<typeof useCascaderController<T>>;\n\ninterface CascaderPanelProps<T> {\n controller: CascaderController<T>;\n className?: string;\n /** The host's header at the root level; a drilled level replaces it with its own, so one back control shows at a time. */\n header?: ReactNode;\n /** Starts a drilled level's path with the root label, for hosts whose header names the root. */\n rootInPath?: boolean;\n}\n\n/** The header, search and levels of a cascader, inside an existing popover surface. */\nexport function CascaderPanel<T>({ controller, className, header, rootInPath = false }: CascaderPanelProps<T>) {\n const { panel, query, setQuery, direction, setDirection, expanded, setExpanded, highlights, setHighlights, loads, resolvedItems, index, activePath, current, results, selected, multiple, mode, disabled, searchable, density, strings, canSelect, commit, load, enter, goBack, levelKey } = controller;\n function state(parent: CascaderNode<T> | undefined, nodes: readonly CascaderNode<T>[]) {\n const status = parent ? loads.get(parent.value)?.status : undefined;\n if (status === 'loading') return <Text role=\"status\" type=\"secondary\" className={statusRowClasses}>{strings.loading}</Text>;\n if (status === 'error') return <Stack gap=\"sm\" align=\"start\" className={statusRowClasses}><Text role=\"alert\" type=\"error\">{strings.error}</Text><Button buttonStyle=\"outline\" size=\"sm\" onClick={() => parent && void load(parent, true)}>{strings.retry}</Button></Stack>;\n if (!nodes.length) return <Text role=\"status\" type=\"secondary\" className={statusRowClasses}>{strings.empty}</Text>;\n return null;\n }\n function column(nodes: readonly CascaderNode<T>[], parent: CascaderNode<T> | undefined, level: number) {\n const saved = highlights.get(parent?.value);\n const highlight = nodes.find(node => node.value === saved && !index.get(node.value)?.disabled)?.value ?? nodes.find(node => !index.get(node.value)?.disabled)?.value ?? '';\n return <div key={JSON.stringify(parent ? [parent.value] : [])} data-cascader-level={level} data-direction={direction ?? undefined} className={cn('cascader--level min-w-0', motionRecipes.level, mode === 'columns' && !results && 'w-56 shrink-0')} onKeyDownCapture={event => levelKey(event, level)}>\n <Command shouldFilter={false} value={highlight} onValueChange={next => setHighlights(previous => new Map(previous).set(parent?.value, next))} aria-label={parent?.label ?? strings.root}>\n <CommandList data-cascader-list aria-multiselectable={multiple || undefined} aria-label={parent?.label ?? strings.root} tabIndex={nodes.some(node => !index.get(node.value)?.disabled) ? 0 : -1}>\n {state(parent, nodes)}\n {nodes.map(node => <CommandItem key={node.value} value={node.value} data-node-value={node.value} density={density} disabled={disabled || index.get(node.value)?.disabled} data-checked={selected.includes(node.value)} aria-selected={selected.includes(node.value)} onSelect={() => enter(node, level)}>\n <CollectionContent label={results ? index.get(node.value)?.path.map(item => item.label).join(strings.pathSeparator) : node.label} description={node.description} leading={node.icon} leadingDecorative wrap trailing={isBranch(node) ? <ChevronRight aria-hidden=\"true\" className=\"size-icon rtl:rotate-180\" /> : undefined} />\n </CommandItem>)}\n </CommandList>\n </Command>\n </div>;\n }\n const trail = [...(rootInPath ? [strings.root] : []), ...activePath.slice(0, -1).map(key => index.get(key)?.node.label)];\n return <div ref={panel} className={cn('cascader-panel--component', className)}>\n {!activePath.length || mode === 'tree' ? header : <PopoverHeader start={<Button tone=\"secondary\" buttonStyle=\"ghost\" size=\"sm\" iconOnly aria-label={strings.back} withTooltip={strings.back} onClick={() => goBack()}><ChevronLeft aria-hidden=\"true\" className=\"size-icon-sm rtl:rotate-180\" /></Button>}>\n {/* The command sits beside the title and path, so it never stretches the title row. */}\n <Stack direction=\"horizontal\" gap=\"sm\" align=\"center\" justify=\"between\" wrap>\n <Stack gap=\"dense\" className=\"min-w-0 flex-1\">\n <PopoverTitle className=\"min-w-0 wrap-anywhere\">{current?.label}</PopoverTitle>\n {trail.length > 0 && <PopoverDescription>{trail.join(strings.pathSeparator)}</PopoverDescription>}\n </Stack>\n {current && canSelect(current) && <Button buttonStyle=\"outline\" size=\"sm\" onClick={() => commit(current)}>{strings.selectCurrent}</Button>}\n </Stack>\n </PopoverHeader>}\n {searchable && <div className={cn('cascader--search', surfaceInsetClasses.compact, surfaceDividerRecipes.anchored.header)}><Input aria-label={strings.search} placeholder={strings.search} value={query} onChange={event => { setQuery(event.target.value); setDirection(null); }} onKeyDown={event => {\n if (event.key === 'ArrowDown') { const option = panel.current?.querySelector<HTMLElement>('[data-cascader-list][tabindex=\"0\"], [role=treeitem][tabindex=\"0\"]'); if (option) { event.preventDefault(); option.focus(); } }\n else if (event.key === 'Backspace' && !query && activePath.length && mode !== 'tree') { event.preventDefault(); goBack(false); }\n }} /></div>}\n {results ? column(results.map(entry => entry.node), undefined, 0) : mode === 'tree' ? <ScrollArea className=\"h-72\"><div className={surfaceInsetClasses.compact}><Tree items={resolvedItems} aria-label={strings.root} density={density} selectionMode={multiple ? 'multiple' : 'single'} selectedValues={selected} expandedValues={expanded} empty={strings.empty}\n onExpandedValuesChange={next => {\n setExpanded(next);\n for (const key of next) {\n if (expanded.includes(key)) continue;\n const node = index.get(key)?.node;\n if (node) void load(node);\n }\n }}\n onSelectedValuesChange={(_next, node) => commit(node)} /></div>\n {[...loads].filter(([key]) => expanded.includes(key)).map(([key]) => <PopoverHeader key={key}><Text size=\"xs\" type=\"secondary\">{index.get(key)?.node.label}</Text>{state(index.get(key)?.node, [])}</PopoverHeader>)}\n </ScrollArea> : mode === 'columns' ? <ScrollArea orientation=\"both\" className=\"max-w-full\" viewportClassName=\"max-h-80\"><div className=\"flex items-start\">{column(resolvedItems, undefined, 0)}{activePath.map((key, level) => { const node = index.get(key)?.node; return node ? column(node.children ?? [], node, level + 1) : null; })}</div></ScrollArea> : column(current?.children ?? (current ? [] : resolvedItems), current, 0)}\n </div>;\n}\n","import { useRef, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { FieldClearButton } from '../text-inputs/field-clear-button';\nimport { popoverWidthRecipes } from '../popover/popover.recipes';\nimport { formFieldTriggerClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { fieldAffordanceRecipes, selectToggleRecipes } from '../../../lib/field-affordance-recipes';\nimport { CascaderPanel, cascaderValues, defaultCascaderStrings, useCascaderController } from './cascader-panel';\nimport type { CascaderProps } from './cascader.types';\n\nexport function Cascader<T = unknown>({ items, value, defaultValue = null, onValueChange, multiple = false, mode = 'drill', selectable = 'leaf', open: controlledOpen, defaultOpen = false, onOpenChange, disabled = false, invalid = false, searchable = true, clearable = false, density = 'default', size: sizeProp, name, id, className, strings: customStrings, loadChildren, renderValue, ...aria }: CascaderProps<T>) {\n const { defaultScale } = useDensityConfig();\n const size = resolveFormControlSize(sizeProp, defaultScale);\n const strings = { ...defaultCascaderStrings, ...customStrings };\n const [localValue, setLocalValue] = useState(defaultValue);\n const selected = cascaderValues(value === undefined ? localValue : value);\n const [localOpen, setLocalOpen] = useState(defaultOpen);\n const open = !disabled && (controlledOpen ?? localOpen);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const showClear = clearable && !!selected.length;\n function changeOpen(next: boolean) {\n if (disabled) return;\n if (controlledOpen === undefined) setLocalOpen(next);\n onOpenChange?.(next);\n }\n const controller = useCascaderController<T>({ items, selected, open, multiple, mode, selectable, disabled, searchable, density, strings, loadChildren, onChange: (next, details) => {\n if (value === undefined) setLocalValue(next);\n onValueChange?.(next, details);\n if (!multiple && details.node) changeOpen(false);\n } });\n const { paths, results } = controller;\n const label = selected.length ? paths.map((nodes, i) => nodes.length ? nodes.map(node => node.label).join(strings.pathSeparator) : selected[i]).join(', ') : strings.placeholder;\n return <div className={cn('cascader--component min-w-0', className)}>\n {name && selected.map(key => <input key={key} type=\"hidden\" name={name} value={key} disabled={disabled} />)}\n <div className=\"cascader--field relative min-w-0\">\n <Popover open={open} onOpenChange={changeOpen}>\n {/* Input's field frame; the select-toggle padding keeps the value clear of the affordance track. */}\n <PopoverTrigger ref={triggerRef} id={id} {...aria} disabled={disabled} aria-invalid={invalid || undefined} className={cn('cascader--trigger', formFieldTriggerClasses(size), showClear ? selectToggleRecipes.clearPadding[size] : selectToggleRecipes.padding[size])}>\n <span className={cn('cascader--value min-w-0 flex-1 truncate text-start', !selected.length && 'text-muted-foreground')}>{renderValue ? renderValue(paths) : label}</span>\n </PopoverTrigger>\n <PopoverContent type=\"menu\" inset=\"flush\" className={cn('cascader--popup', popoverWidthRecipes.lg, mode === 'columns' && !results && 'w-auto')}>\n <CascaderPanel controller={controller} />\n </PopoverContent>\n </Popover>\n {/* The Combobox affordance track: the shared clear target one gap before the\n chevron, which centres where a Select draws its own. The chevron passes\n pointer input through to the trigger beneath it. */}\n <div className={cn('cascader--affordances pointer-events-none flex items-center gap-space-xs text-muted-foreground', fieldAffordanceRecipes.centered, selectToggleRecipes.track[size])}>\n {showClear && <FieldClearButton aria-label={strings.clear} disabled={disabled} className=\"cascader--clear pointer-events-auto\"\n onClick={() => { controller.commit(null); triggerRef.current?.focus(); }} />}\n <span aria-hidden=\"true\" className={cn('cascader--toggle', fieldAffordanceRecipes.target, disabled && 'opacity-50')}>\n <ChevronDown className={cn(selectToggleRecipes.icon[size], 'shrink-0')} />\n </span>\n </div>\n </div>\n </div>;\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { t as e } from "./utils-B6kKb8jB.js";
3
- import { c as t } from "./typography-BQnine1k.js";
4
- import { r as n } from "./popover.recipes-DdiEp0rd.js";
5
- import { t as r } from "./number-CRU3kGuk.js";
2
+ import { t as e } from "./utils-DhuoqFy4.js";
3
+ import { c as t } from "./typography-C7-YMW1S.js";
4
+ import { r as n } from "./popover.recipes-DJ0AkUan.js";
5
+ import { t as r } from "./number-CYqBcrSj.js";
6
6
  import { t as i } from "./theme-mode-css-BB-_RYab.js";
7
7
  import * as a from "react";
8
8
  import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
@@ -159,4 +159,4 @@ function y(e, t, n) {
159
159
  //#endregion
160
160
  export { h as a, m as i, _ as n, g as o, v as r, p as t };
161
161
 
162
- //# sourceMappingURL=chart-Darg_0Kv.js.map
162
+ //# sourceMappingURL=chart-I7ROnsl8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart-Darg_0Kv.js","names":["React","_Fragment","NumberValue","cn","Text","popoverRecipes","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","nameKey","payloadFill","indicatorColor","formatter","index","hideIndicator","valueFormatter","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 } 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/**\n\t * Formats only each value, keeping the colour indicator and series label,\n\t * for example to render currency. `formatter` replaces the whole row.\n\t */\n\tvalueFormatter?: (\n\t\tvalue: NonNullable<ChartPayloadItem['value']>,\n\t\tname: NonNullable<ChartPayloadItem['name']>,\n\t\titem: ChartPayloadItem,\n\t\tindex: number,\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\tvalueFormatter,\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\tpopoverRecipes.displayCompact,\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\tvalueFormatter && item.name !== undefined ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"inherit\" weight=\"medium\" className=\"chart--tooltip-value text-end tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{valueFormatter(item.value, item.name, item, index)}\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) : typeof 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
+ {"version":3,"file":"chart-I7ROnsl8.js","names":["React","_Fragment","NumberValue","cn","Text","popoverRecipes","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","nameKey","payloadFill","indicatorColor","formatter","index","hideIndicator","valueFormatter","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 } 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/**\n\t * Formats only each value, keeping the colour indicator and series label,\n\t * for example to render currency. `formatter` replaces the whole row.\n\t */\n\tvalueFormatter?: (\n\t\tvalue: NonNullable<ChartPayloadItem['value']>,\n\t\tname: NonNullable<ChartPayloadItem['name']>,\n\t\titem: ChartPayloadItem,\n\t\tindex: number,\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\tvalueFormatter,\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\tpopoverRecipes.displayCompact,\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\tvalueFormatter && item.name !== undefined ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"inherit\" weight=\"medium\" className=\"chart--tooltip-value text-end tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{valueFormatter(item.value, item.name, item, index)}\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) : typeof 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,7 +1,7 @@
1
1
  "use client";
2
- import { t as e } from "./utils-B6kKb8jB.js";
2
+ import { t as e } from "./utils-DhuoqFy4.js";
3
3
  import { t } from "./focus-recipes-B653VaLq.js";
4
- import { t as n } from "./field-state-recipes-BVA2CWHo.js";
4
+ import { t as n } from "./field-state-recipes-7sza8QbC.js";
5
5
  import { forwardRef as r } from "react";
6
6
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
7
  import { CheckIcon as o, MinusIcon as s } from "lucide-react";
@@ -37,4 +37,4 @@ u.displayName = "Checkbox";
37
37
  //#endregion
38
38
  export { u as t };
39
39
 
40
- //# sourceMappingURL=checkbox-fflqmODR.js.map
40
+ //# sourceMappingURL=checkbox-MoyHIAPs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-fflqmODR.js","names":["Checkbox","CheckboxPrimitive","Checkbox","CheckboxPrimitive","cn","fieldStateRecipes","Checkbox$2","props","Checkbox","focusRecipes","className","CheckIcon","MinusIcon","Checkbox$1","forwardRef","ariaInvalid","invalid","onCheckedChange","checked","onValueChange"],"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 as PrimitiveCheckboxProps } 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 */\nexport interface CheckboxProps extends PrimitiveCheckboxProps {\n\t/** Applies the shared invalid boundary and accessibility state. */\n\tinvalid?: boolean;\n\t/** Boolean checked callback, emitted alongside onCheckedChange. Indeterminate remains a separate visual state. */\n\tonValueChange?: (checked: boolean) => void;\n}\n\nconst Checkbox = forwardRef<HTMLElement, CheckboxProps>(function Checkbox({ className, invalid, onValueChange, onCheckedChange, 'aria-invalid': ariaInvalid, ...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\taria-invalid={invalid || ariaInvalid}\n\t\t\tonCheckedChange={(checked) => {\n\t\t\t\tonCheckedChange?.(checked);\n\t\t\t\tonValueChange?.(checked === true);\n\t\t\t}}\n\t\t/>\n\t);\n});\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\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;;;ACzBA,IAAMV,IAAWY,EAAuC,SAAkB,EAAE,cAAW,YAAS,kBAAe,oBAAiB,gBAAgBC,GAAa,GAAGR,KAAS,GAAK;CAC7K,OACC,kBAACJ,GAAD;EACM;EACL,WAAWC,EAAG,uBAAuBM,CAAS;EAC9C,GAAIH;EACJ,gBAAcS,KAAWD;EACzB,kBAAkB,MAAY;GAE7B,AADAE,IAAkBC,CAAO,GACzBC,IAAgBD,MAAY,EAAI;EACjC;CACA,CAAA;AAEH,CAAC;AAED,EAAS,cAAc"}
1
+ {"version":3,"file":"checkbox-MoyHIAPs.js","names":["Checkbox","CheckboxPrimitive","Checkbox","CheckboxPrimitive","cn","fieldStateRecipes","Checkbox$2","props","Checkbox","focusRecipes","className","CheckIcon","MinusIcon","Checkbox$1","forwardRef","ariaInvalid","invalid","onCheckedChange","checked","onValueChange"],"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 as PrimitiveCheckboxProps } 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 */\nexport interface CheckboxProps extends PrimitiveCheckboxProps {\n\t/** Applies the shared invalid boundary and accessibility state. */\n\tinvalid?: boolean;\n\t/** Boolean checked callback, emitted alongside onCheckedChange. Indeterminate remains a separate visual state. */\n\tonValueChange?: (checked: boolean) => void;\n}\n\nconst Checkbox = forwardRef<HTMLElement, CheckboxProps>(function Checkbox({ className, invalid, onValueChange, onCheckedChange, 'aria-invalid': ariaInvalid, ...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\taria-invalid={invalid || ariaInvalid}\n\t\t\tonCheckedChange={(checked) => {\n\t\t\t\tonCheckedChange?.(checked);\n\t\t\t\tonValueChange?.(checked === true);\n\t\t\t}}\n\t\t/>\n\t);\n});\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\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;;;ACzBA,IAAMV,IAAWY,EAAuC,SAAkB,EAAE,cAAW,YAAS,kBAAe,oBAAiB,gBAAgBC,GAAa,GAAGR,KAAS,GAAK;CAC7K,OACC,kBAACJ,GAAD;EACM;EACL,WAAWC,EAAG,uBAAuBM,CAAS;EAC9C,GAAIH;EACJ,gBAAcS,KAAWD;EACzB,kBAAkB,MAAY;GAE7B,AADAE,IAAkBC,CAAO,GACzBC,IAAgBD,MAAY,EAAI;EACjC;CACA,CAAA;AAEH,CAAC;AAED,EAAS,cAAc"}