@servicetitan/anvil2 1.46.1 → 1.46.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/{Alert-BNGvfMAV.js → Alert-CPOBY6O5.js} +2 -2
  3. package/dist/{Alert-BNGvfMAV.js.map → Alert-CPOBY6O5.js.map} +1 -1
  4. package/dist/Alert.js +1 -1
  5. package/dist/{Announcement-CoheCP1i.js → Announcement-BvzAEdx8.js} +2 -2
  6. package/dist/{Announcement-CoheCP1i.js.map → Announcement-BvzAEdx8.js.map} +1 -1
  7. package/dist/Announcement.js +1 -1
  8. package/dist/AnvilProvider-C_qRQnE6.js.map +1 -1
  9. package/dist/{Avatar-CyGjhToG.js → Avatar-3d5Kv2CF.js} +2 -2
  10. package/dist/{Avatar-CyGjhToG.js.map → Avatar-3d5Kv2CF.js.map} +1 -1
  11. package/dist/{Avatar-D07f9NH_.js → Avatar-DJ3oJNsv.js} +2 -2
  12. package/dist/{Avatar-D07f9NH_.js.map → Avatar-DJ3oJNsv.js.map} +1 -1
  13. package/dist/Avatar.js +2 -2
  14. package/dist/Badge-DCA9mfc2.js.map +1 -1
  15. package/dist/Breadcrumbs-C4_PEolS.js.map +1 -1
  16. package/dist/{Button-BxFXQ0-n.js → Button-VNQQgZ45.js} +2 -2
  17. package/dist/{Button-BxFXQ0-n.js.map → Button-VNQQgZ45.js.map} +1 -1
  18. package/dist/Button.css +48 -48
  19. package/dist/Button.js +1 -1
  20. package/dist/Button.module-C1g9rrJs.js +25 -0
  21. package/dist/Button.module-C1g9rrJs.js.map +1 -0
  22. package/dist/{ButtonCompound-BF2Q6gGX.js → ButtonCompound-BbPK-Xjj.js} +2 -2
  23. package/dist/{ButtonCompound-BF2Q6gGX.js.map → ButtonCompound-BbPK-Xjj.js.map} +1 -1
  24. package/dist/ButtonCompound.js +1 -1
  25. package/dist/{ButtonLink-CXv65WVV.js → ButtonLink-CqR1F5Wn.js} +3 -3
  26. package/dist/{ButtonLink-CXv65WVV.js.map → ButtonLink-CqR1F5Wn.js.map} +1 -1
  27. package/dist/ButtonLink.js +1 -1
  28. package/dist/{ButtonToggle-pSwg7NvT.js → ButtonToggle-PCeSG-5D.js} +3 -3
  29. package/dist/{ButtonToggle-pSwg7NvT.js.map → ButtonToggle-PCeSG-5D.js.map} +1 -1
  30. package/dist/ButtonToggle.js +1 -1
  31. package/dist/{Calendar-BQ5F2ENO.js → Calendar-Cn0fOgog.js} +366 -169
  32. package/dist/Calendar-Cn0fOgog.js.map +1 -0
  33. package/dist/Calendar.js +1 -1
  34. package/dist/Card-vTYeSkxt.js.map +1 -1
  35. package/dist/{Checkbox-Dl4KTwEJ.js → Checkbox-C5PX8wur.js} +2 -2
  36. package/dist/{Checkbox-Dl4KTwEJ.js.map → Checkbox-C5PX8wur.js.map} +1 -1
  37. package/dist/{Checkbox-DDrmVC-u.js → Checkbox-DAODkzN3.js} +2 -2
  38. package/dist/{Checkbox-DDrmVC-u.js.map → Checkbox-DAODkzN3.js.map} +1 -1
  39. package/dist/Checkbox.js +2 -2
  40. package/dist/{Chip-Bz-vlQ4D.js → Chip-DLU13qe-.js} +2 -2
  41. package/dist/{Chip-Bz-vlQ4D.js.map → Chip-DLU13qe-.js.map} +1 -1
  42. package/dist/Chip.js +1 -1
  43. package/dist/{Combobox-B9nesJuc.js → Combobox-DO8cIvRQ.js} +146 -55
  44. package/dist/Combobox-DO8cIvRQ.js.map +1 -0
  45. package/dist/Combobox.js +1 -1
  46. package/dist/{DateField-DXxPsRtf.js → DateField-qHdgwSlB.js} +36 -102
  47. package/dist/DateField-qHdgwSlB.js.map +1 -0
  48. package/dist/DateField.js +1 -1
  49. package/dist/{DateFieldRange-Xauviu1w.js → DateFieldRange-GNpWV70g.js} +57 -58
  50. package/dist/DateFieldRange-GNpWV70g.js.map +1 -0
  51. package/dist/DateFieldRange.js +1 -1
  52. package/dist/{DateFieldSingle-yLnwpVzd.js → DateFieldSingle-B9caNibj.js} +53 -55
  53. package/dist/DateFieldSingle-B9caNibj.js.map +1 -0
  54. package/dist/DateFieldSingle.js +1 -1
  55. package/dist/{DateFieldYearless-Ba7HiTiI.js → DateFieldYearless-BmeKGaDc.js} +4 -4
  56. package/dist/{DateFieldYearless-Ba7HiTiI.js.map → DateFieldYearless-BmeKGaDc.js.map} +1 -1
  57. package/dist/DateFieldYearless.js +1 -1
  58. package/dist/{DaysOfTheWeek-BYSYZySH.js → DaysOfTheWeek-DPH13VCK.js} +4 -4
  59. package/dist/{DaysOfTheWeek-BYSYZySH.js.map → DaysOfTheWeek-DPH13VCK.js.map} +1 -1
  60. package/dist/DaysOfTheWeek.js +1 -1
  61. package/dist/Details-CF8DImjw.js.map +1 -1
  62. package/dist/{Dialog-CgkrvrQu.js → Dialog-BHFLnFNQ.js} +7 -7
  63. package/dist/{Dialog-CgkrvrQu.js.map → Dialog-BHFLnFNQ.js.map} +1 -1
  64. package/dist/Dialog.js +1 -1
  65. package/dist/Divider-DJe8kLf2.js.map +1 -1
  66. package/dist/Dnd.js +1 -1
  67. package/dist/DndSort.js +2 -2
  68. package/dist/DndSort.js.map +1 -1
  69. package/dist/{Drawer-CM4ZbAro.js → Drawer-BDA7Sjj9.js} +7 -7
  70. package/dist/{Drawer-CM4ZbAro.js.map → Drawer-BDA7Sjj9.js.map} +1 -1
  71. package/dist/Drawer.js +1 -1
  72. package/dist/{DrawerContext-DboTgTmo.js → DrawerContext-D4tWTLVf.js} +27 -10
  73. package/dist/DrawerContext-D4tWTLVf.js.map +1 -0
  74. package/dist/{EditCard-WKzZ2XCz.js → EditCard-CZzL0nx7.js} +2 -2
  75. package/dist/{EditCard-WKzZ2XCz.js.map → EditCard-CZzL0nx7.js.map} +1 -1
  76. package/dist/EditCard.js +1 -1
  77. package/dist/{FieldLabel-BsbTTyom.js → FieldLabel-Bgl3iu13.js} +2 -2
  78. package/dist/{FieldLabel-BsbTTyom.js.map → FieldLabel-Bgl3iu13.js.map} +1 -1
  79. package/dist/FieldLabel.js +1 -1
  80. package/dist/FieldMessage-B7uQ8vmr.js.map +1 -1
  81. package/dist/Flex-BdQMekvA.js.map +1 -1
  82. package/dist/Grid-MGUC698u.js.map +1 -1
  83. package/dist/Helper-BkIDJqgA.js.map +1 -1
  84. package/dist/Icon-D8SPKeO4.js.map +1 -1
  85. package/dist/{InputMask-_F139qFu.js → InputMask-B13KumrK.js} +3 -3
  86. package/dist/{InputMask-_F139qFu.js.map → InputMask-B13KumrK.js.map} +1 -1
  87. package/dist/InputMask.js +1 -1
  88. package/dist/Layout-CUUb2PVr.js.map +1 -1
  89. package/dist/Link-eRsLWPaQ.js.map +1 -1
  90. package/dist/LinkButton-2lXfrVoU.js.map +1 -1
  91. package/dist/{ListView-pb3rIcze.js → ListView-C-cVQZHp.js} +3 -3
  92. package/dist/{ListView-pb3rIcze.js.map → ListView-C-cVQZHp.js.map} +1 -1
  93. package/dist/ListView.js +1 -1
  94. package/dist/{Listbox-CUhMbFm2.js → Listbox-DxGx630W.js} +2 -2
  95. package/dist/{Listbox-CUhMbFm2.js.map → Listbox-DxGx630W.js.map} +1 -1
  96. package/dist/Listbox.js +1 -1
  97. package/dist/LocalizationContext-UsmB5mnR.js.map +1 -1
  98. package/dist/LocalizationProvider-DEZyjW5d.js.map +1 -1
  99. package/dist/{Menu-DEVZz9xZ.js → Menu-DUZqzpwg.js} +8 -10
  100. package/dist/Menu-DUZqzpwg.js.map +1 -0
  101. package/dist/Menu.js +1 -1
  102. package/dist/{NumberField-CkZZrkYC.js → NumberField-DWPAy1eG.js} +11 -11
  103. package/dist/{NumberField-CkZZrkYC.js.map → NumberField-DWPAy1eG.js.map} +1 -1
  104. package/dist/NumberField.css +9 -6
  105. package/dist/NumberField.js +1 -1
  106. package/dist/Overflow.js.map +1 -1
  107. package/dist/{Page-BMDkbDcU.js → Page-BfH2mGSt.js} +11 -11
  108. package/dist/Page-BfH2mGSt.js.map +1 -0
  109. package/dist/Page.js +1 -1
  110. package/dist/{Pagination-BJsCppgW.js → Pagination-B_G9QcHf.js} +48 -24
  111. package/dist/Pagination-B_G9QcHf.js.map +1 -0
  112. package/dist/Pagination.css +6 -6
  113. package/dist/Pagination.js +1 -1
  114. package/dist/{Popover-r26xMIfm.js → Popover-v8R920kj.js} +137 -196
  115. package/dist/Popover-v8R920kj.js.map +1 -0
  116. package/dist/Popover.js +1 -1
  117. package/dist/PortalProvider-9lXkQ0xY.js.map +1 -1
  118. package/dist/{ProgressBar-DXcXZEJ2.js → ProgressBar-BWN2yv1s.js} +2 -2
  119. package/dist/{ProgressBar-DXcXZEJ2.js.map → ProgressBar-BWN2yv1s.js.map} +1 -1
  120. package/dist/ProgressBar.js +1 -1
  121. package/dist/{Radio-C89VCMXd.js → Radio-C5riI-do.js} +2 -2
  122. package/dist/{Radio-C89VCMXd.js.map → Radio-C5riI-do.js.map} +1 -1
  123. package/dist/Radio.js +2 -2
  124. package/dist/{RadioGroup-C_4buUtG.js → RadioGroup-B7O06pVu.js} +2 -2
  125. package/dist/{RadioGroup-C_4buUtG.js.map → RadioGroup-B7O06pVu.js.map} +1 -1
  126. package/dist/{SearchField-Bb0uObwG.js → SearchField-CbwGErC4.js} +2 -2
  127. package/dist/{SearchField-Bb0uObwG.js.map → SearchField-CbwGErC4.js.map} +1 -1
  128. package/dist/SearchField.js +1 -1
  129. package/dist/{SegmentedControl-CsjjV1Dz.js → SegmentedControl-CLDdes8W.js} +4 -4
  130. package/dist/{SegmentedControl-CsjjV1Dz.js.map → SegmentedControl-CLDdes8W.js.map} +1 -1
  131. package/dist/SegmentedControl.js +1 -1
  132. package/dist/{SelectCard-BTYZg9TG.js → SelectCard-Ca07K1FW.js} +3 -3
  133. package/dist/{SelectCard-BTYZg9TG.js.map → SelectCard-Ca07K1FW.js.map} +1 -1
  134. package/dist/SelectCard.js +1 -1
  135. package/dist/{SelectTrigger-f1hvRrSC.js → SelectTrigger-CaXX1SHG.js} +3 -3
  136. package/dist/{SelectTrigger-f1hvRrSC.js.map → SelectTrigger-CaXX1SHG.js.map} +1 -1
  137. package/dist/SelectTrigger.js +1 -1
  138. package/dist/{SelectTriggerBase-DP9fmRSo.js → SelectTriggerBase-C7TLCna1.js} +4 -4
  139. package/dist/{SelectTriggerBase-DP9fmRSo.js.map → SelectTriggerBase-C7TLCna1.js.map} +1 -1
  140. package/dist/{SideNav-CBAzYyML.js → SideNav-nqq5sAwz.js} +3 -3
  141. package/dist/SideNav-nqq5sAwz.js.map +1 -0
  142. package/dist/SideNav.js +1 -1
  143. package/dist/Skeleton.js.map +1 -1
  144. package/dist/Spinner-wmO8Epw0.js.map +1 -1
  145. package/dist/SrOnly-CTsYSuby.js.map +1 -1
  146. package/dist/{Stepper-D-fOH9TF.js → Stepper-DQ_Hm-AI.js} +4 -4
  147. package/dist/{Stepper-D-fOH9TF.js.map → Stepper-DQ_Hm-AI.js.map} +1 -1
  148. package/dist/Stepper.js +1 -1
  149. package/dist/Switch-C2ddZcr9.js.map +1 -1
  150. package/dist/{Tab-wNucMTgo.js → Tab-CzNx3IdF.js} +45 -37
  151. package/dist/Tab-CzNx3IdF.js.map +1 -0
  152. package/dist/Tab.js +1 -1
  153. package/dist/Text-BqvcbXyp.js.map +1 -1
  154. package/dist/{TextField-D8fow9j7.js → TextField-D9gD-34Q.js} +3 -3
  155. package/dist/{TextField-D8fow9j7.js.map → TextField-D9gD-34Q.js.map} +1 -1
  156. package/dist/{TextField-BiHxlzE3.js → TextField-uCHgwO5F.js} +2 -2
  157. package/dist/{TextField-BiHxlzE3.js.map → TextField-uCHgwO5F.js.map} +1 -1
  158. package/dist/TextField.js +1 -1
  159. package/dist/{Textarea-BdVJJlbP.js → Textarea-B2-6m291.js} +3 -3
  160. package/dist/{Textarea-BdVJJlbP.js.map → Textarea-B2-6m291.js.map} +1 -1
  161. package/dist/Textarea.js +1 -1
  162. package/dist/ThemeProvider-Be3Pvtpz.js.map +1 -1
  163. package/dist/ThemeProviderContext-l52GohYT.js.map +1 -1
  164. package/dist/{TimeField-CmbErrsZ.js → TimeField-B5Jgy-Zg.js} +363 -360
  165. package/dist/TimeField-B5Jgy-Zg.js.map +1 -0
  166. package/dist/TimeField.js +1 -1
  167. package/dist/Toast.js +2 -2
  168. package/dist/{Toaster-B7zUwJOt.js → Toaster-CHyB-Mxs.js} +3 -3
  169. package/dist/{Toaster-B7zUwJOt.js.map → Toaster-CHyB-Mxs.js.map} +1 -1
  170. package/dist/{Toaster-9cpG_tWR.js → Toaster-CyiGDKMh.js} +18 -18
  171. package/dist/{Toaster-9cpG_tWR.js.map → Toaster-CyiGDKMh.js.map} +1 -1
  172. package/dist/{Toolbar-D4zuUFhb.js → Toolbar-BXGTrR6o.js} +19 -18
  173. package/dist/Toolbar-BXGTrR6o.js.map +1 -0
  174. package/dist/Toolbar.js +1 -1
  175. package/dist/{Tooltip-BI3Xs75X.js → Tooltip-DhtVlhah.js} +9 -3
  176. package/dist/{Tooltip-BI3Xs75X.js.map → Tooltip-DhtVlhah.js.map} +1 -1
  177. package/dist/Tooltip.js +1 -1
  178. package/dist/TrackingProvider-BtSjkmpM.js.map +1 -1
  179. package/dist/beta.js +1 -1
  180. package/dist/childrenToString-Bz9MqbHb.js.map +1 -1
  181. package/dist/components/Calendar/Calendar.d.ts +5 -0
  182. package/dist/components/Calendar/CalendarNowButton.d.ts +3 -1
  183. package/dist/components/Combobox/ComboboxTypes.d.ts +10 -5
  184. package/dist/components/Combobox/internal/ComboboxGroupContext.d.ts +1 -1
  185. package/dist/components/Combobox/internal/useGroups.d.ts +2 -2
  186. package/dist/components/DndSort/internal/test-utils.d.ts +1 -1
  187. package/dist/components/Popover/Popover.d.ts +136 -1
  188. package/dist/components/Popover/PopoverTrigger.d.ts +0 -1
  189. package/dist/components/Popover/internal/PopoverContext.d.ts +5 -3
  190. package/dist/components/Popover/internal/usePopoverContext.d.ts +6 -4
  191. package/dist/components/TimeField/TimeField.d.ts +4 -1
  192. package/dist/extends-Bg2s_OKl.js.map +1 -1
  193. package/dist/getActiveElement-BcSyVE7S.js.map +1 -1
  194. package/dist/getKeyboardFocusableElements-QqcABz0D.js.map +1 -1
  195. package/dist/hooks/useMergeRefs/useMergeRefs.d.ts +11 -0
  196. package/dist/{index-V5Ez2gq_.js → index-DrM3iid4.js} +2 -2
  197. package/dist/{index-V5Ez2gq_.js.map → index-DrM3iid4.js.map} +1 -1
  198. package/dist/index-tZvMCc77.js.map +1 -1
  199. package/dist/{index.esm-D889iexm.js → index.esm-BwMVvxTV.js} +199 -144
  200. package/dist/index.esm-BwMVvxTV.js.map +1 -0
  201. package/dist/index.js +52 -52
  202. package/dist/index.js.map +1 -1
  203. package/dist/internal/hooks/useFocusWithin/useFocusWithin.d.ts +2 -1
  204. package/dist/internal/hooks/useKeyboardFocusables/useKeyboardFocusables.d.ts +0 -1
  205. package/dist/internal/hooks/useOnClickOutside/useOnClickOutside.d.ts +5 -1
  206. package/dist/makeZeroShortcutPreprocessor-CxsiGTRW.js.map +1 -1
  207. package/dist/{proxy-CreWmH-e.js → proxy-BbFHSE6L.js} +8631 -8680
  208. package/dist/proxy-BbFHSE6L.js.map +1 -0
  209. package/dist/{use-reduced-motion-znCm41qB.js → use-reduced-motion-DSpxmqyT.js} +3 -3
  210. package/dist/use-reduced-motion-DSpxmqyT.js.map +1 -0
  211. package/dist/useAccessibleColor-BYKjkGRg.js.map +1 -1
  212. package/dist/useBreakpoint-Cv5fnZxs.js.map +1 -1
  213. package/dist/{useFocusWithin-BhhgRXdZ.js → useFocusWithin-hi77jsrB.js} +6 -3
  214. package/dist/useFocusWithin-hi77jsrB.js.map +1 -0
  215. package/dist/useInfiniteCombobox-WcRgC9p6.js.map +1 -1
  216. package/dist/useIntersectionObserver-BEmMDO3P.js.map +1 -1
  217. package/dist/{useDialogTransitionStates-2NaE_noq.js → useKeyboardFocusables-ek2mYel-.js} +46 -5
  218. package/dist/useKeyboardFocusables-ek2mYel-.js.map +1 -0
  219. package/dist/useLayoutPropsUtil-DjD5IMh0.js.map +1 -1
  220. package/dist/useMergeRefs-Dfmtq9cI.js +22 -0
  221. package/dist/useMergeRefs-Dfmtq9cI.js.map +1 -0
  222. package/dist/useMergeRefs.js +1 -1
  223. package/dist/{useOnClickOutside-BHEWMLa9.js → useOnClickOutside-C5AZE_I6.js} +6 -62
  224. package/dist/useOnClickOutside-C5AZE_I6.js.map +1 -0
  225. package/dist/useOptionallyControlledState-DbDuos5L.js.map +1 -1
  226. package/dist/{usePopoverSupport-DIjjfodl.js → usePopoverSupport-CWTCDfN2.js} +2 -2
  227. package/dist/{usePopoverSupport-DIjjfodl.js.map → usePopoverSupport-CWTCDfN2.js.map} +1 -1
  228. package/dist/usePrefersColorScheme-_hT7dK7_.js.map +1 -1
  229. package/dist/usePrevious-Bvq-5auG.js.map +1 -1
  230. package/dist/useSize.js.map +1 -1
  231. package/dist/{useSwipe-CULmVQEk.js → useSwipe-Cp-CJxLU.js} +2 -2
  232. package/dist/{useSwipe-CULmVQEk.js.map → useSwipe-Cp-CJxLU.js.map} +1 -1
  233. package/dist/useSwipe.js +1 -1
  234. package/dist/useTrackingContext-DRwDL8DE.js.map +1 -1
  235. package/dist/useTrackingId.js.map +1 -1
  236. package/dist/utils-CnKBdBNm.js +50 -0
  237. package/dist/utils-CnKBdBNm.js.map +1 -0
  238. package/package.json +12 -18
  239. package/dist/Button.module-pUNSKoVC.js +0 -25
  240. package/dist/Button.module-pUNSKoVC.js.map +0 -1
  241. package/dist/Calendar-BQ5F2ENO.js.map +0 -1
  242. package/dist/Combobox-B9nesJuc.js.map +0 -1
  243. package/dist/DateField-DXxPsRtf.js.map +0 -1
  244. package/dist/DateFieldRange-Xauviu1w.js.map +0 -1
  245. package/dist/DateFieldSingle-yLnwpVzd.js.map +0 -1
  246. package/dist/DrawerContext-DboTgTmo.js.map +0 -1
  247. package/dist/Menu-DEVZz9xZ.js.map +0 -1
  248. package/dist/Page-BMDkbDcU.js.map +0 -1
  249. package/dist/Pagination-BJsCppgW.js.map +0 -1
  250. package/dist/Popover-r26xMIfm.js.map +0 -1
  251. package/dist/SideNav-CBAzYyML.js.map +0 -1
  252. package/dist/Tab-wNucMTgo.js.map +0 -1
  253. package/dist/TimeField-CmbErrsZ.js.map +0 -1
  254. package/dist/Toolbar-D4zuUFhb.js.map +0 -1
  255. package/dist/components/DateFieldSingle/internal/useDateFieldOrchestration.d.ts +0 -17
  256. package/dist/index.esm-D889iexm.js.map +0 -1
  257. package/dist/proxy-CreWmH-e.js.map +0 -1
  258. package/dist/use-reduced-motion-znCm41qB.js.map +0 -1
  259. package/dist/useDateFieldOrchestration-BNJCsRkS.js +0 -138
  260. package/dist/useDateFieldOrchestration-BNJCsRkS.js.map +0 -1
  261. package/dist/useDialogTransitionStates-2NaE_noq.js.map +0 -1
  262. package/dist/useFocusWithin-BhhgRXdZ.js.map +0 -1
  263. package/dist/useMergeRefs-Bde85AWI.js +0 -21
  264. package/dist/useMergeRefs-Bde85AWI.js.map +0 -1
  265. package/dist/useOnClickOutside-BHEWMLa9.js.map +0 -1
  266. package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js +0 -18
  267. package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SegmentedControl-CsjjV1Dz.js","sources":["../src/components/SegmentedControl/internal/SegmentedControlContext.ts","../src/components/SegmentedControl/SegmentedControlSegment.tsx","../src/components/SegmentedControl/SegmentedControl.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\nimport { SegmentedControlSegmentProps } from \"../SegmentedControlSegment\";\nimport { SegmentedControlProps } from \"../SegmentedControl\";\n\n/**\n * Context props for SegmentedControl internal state management\n */\nexport type SegmentedControlContextProps = {\n /**\n * Currently selected segment value\n */\n current?: SegmentedControlSegmentProps[\"value\"];\n /**\n * Function to set the current segment\n */\n setCurrent?: (value: SegmentedControlSegmentProps[\"value\"]) => void;\n /**\n * Change handler for the segmented control\n */\n onChange?: SegmentedControlProps[\"onChange\"];\n /**\n * Name attribute for radio inputs\n */\n name?: string;\n};\n\nexport const SegmentedControlContext =\n createContext<SegmentedControlContextProps>({});\n","import {\n useContext,\n useRef,\n forwardRef,\n ComponentPropsWithoutRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport { core } from \"@servicetitan/hammer-token\";\n\nimport { DataTrackingId } from \"../../types\";\nimport { Icon, IconProps } from \"../Icon\";\nimport { motion, useReducedMotion } from \"motion/react\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\n\nimport { SegmentedControlContext } from \"./internal/SegmentedControlContext\";\n\nimport styles from \"./SegmentedControl.module.scss\";\n\n/**\n * State object returned by segment interactions\n */\nexport type SegmentState = {\n /**\n * Whether the segment is checked\n */\n checked: boolean;\n /**\n * The value of the segment\n */\n value?: SegmentedControlSegmentProps[\"value\"];\n};\n\n/**\n * Props for the SegmentedControlSegment component\n * @extends ComponentPropsWithoutRef<\"label\">\n */\nexport type SegmentedControlSegmentProps = ComponentPropsWithoutRef<\"label\"> & {\n /**\n * Optional icon to display in the segment\n */\n icon?: IconProps[\"svg\"];\n /**\n * Value of the segment\n */\n value: string;\n /**\n * The content to display in the segment\n */\n children?: React.ReactNode;\n} & DataTrackingId;\n\n/**\n * SegmentedControlSegment component for individual segments within a segmented control.\n *\n * Features:\n * - Individual segment with radio input\n * - Optional icon support\n * - Animated selection indicator\n * - Accessibility support with proper ARIA attributes\n * - Context integration with parent SegmentedControl\n * - Motion animations with reduced motion support\n * - Icon-only mode when no children provided\n * - Data tracking id support\n *\n * @example\n * <SegmentedControl.Segment value=\"option1\" icon={Icon1}>\n * Option 1\n * </SegmentedControl.Segment>\n *\n * @example\n * <SegmentedControl.Segment value=\"icon-only\" icon={IconOnly} />\n */\nexport const SegmentedControlSegment = forwardRef<\n HTMLLabelElement,\n SegmentedControlSegmentProps\n>((props, ref) => {\n const { icon, value, children, className, ...rest } = props;\n const shouldReduceMotion = useReducedMotion();\n const { current, setCurrent, name } = useContext(SegmentedControlContext);\n const labelRef = useRef<HTMLSpanElement>(null);\n\n const classNames = cx(styles.segment, className, {\n [styles[\"icon-only\"]]: icon && !children,\n });\n\n const data = {\n value: props.value,\n };\n\n const trackingId = useTrackingId({\n name: \"SegmentedControlSegment\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return (\n <>\n <label\n className={classNames}\n ref={useMergeRefs([labelRef, ref])}\n data-tracking-id={trackingId}\n data-anv=\"segmented-control-segment\"\n {...rest}\n >\n <input\n type=\"radio\"\n name={name}\n value={value}\n onChange={() => setCurrent?.(value)}\n checked={current === value}\n aria-checked={current === value}\n />\n {icon ? <Icon svg={icon} aria-hidden /> : null}\n {children}\n {current === value && (\n <motion.span\n layoutId={name}\n className={styles[\"select-indicator\"]}\n transition={{\n duration: shouldReduceMotion\n ? 0\n : +core.primitive.Duration.value.replace(\"ms\", \"\") / 1000,\n }}\n />\n )}\n </label>\n </>\n );\n});\n\nSegmentedControlSegment.displayName = \"SegmentedControlSegment\";\n","import { forwardRef, useId, ComponentPropsWithoutRef, useRef } from \"react\";\nimport cx from \"classnames\";\nimport { motion } from \"motion/react\";\n\nimport { DataTrackingId, LayoutUtilProps, Size } from \"../../types\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\n\nimport { SegmentedControlContext } from \"./internal/SegmentedControlContext\";\nimport {\n SegmentedControlSegment,\n SegmentedControlSegmentProps,\n} from \"./SegmentedControlSegment\";\n\nimport styles from \"./SegmentedControl.module.scss\";\n\n/**\n * Base props for SegmentedControl component\n * @extends Omit<ComponentPropsWithoutRef<\"div\">, \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"onChange\">\n * @extends LayoutUtilProps\n */\ntype BaseSegmentedControlProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"onChange\"\n> &\n LayoutUtilProps &\n DataTrackingId & {\n /**\n * Callback when segment is changed\n */\n onChange?: (value: SegmentedControlSegmentProps[\"value\"]) => void;\n\n /**\n * Size of the segment\n * @default \"medium\"\n */\n size?: Extract<Size, \"small\" | \"medium\">;\n\n /**\n * Whether to fill available width\n * @default false\n */\n fill?: boolean;\n\n /**\n * Name attribute for radio inputs\n * @remarks If empty, it will auto generate one using useId()\n */\n name?: string;\n\n /**\n * The segments to render within the segmented control\n */\n children?: React.ReactNode;\n };\n\n/**\n * Props for controlled SegmentedControl\n */\ntype ControlledSegmentedControlProps = BaseSegmentedControlProps & {\n /**\n * Selected segment (controlled mode)\n */\n selected: SegmentedControlSegmentProps[\"value\"];\n defaultSelected?: never;\n};\n\n/**\n * Props for uncontrolled SegmentedControl\n */\ntype UncontrolledSegmentedControlProps = BaseSegmentedControlProps & {\n /**\n * Initial selection (uncontrolled mode)\n */\n defaultSelected: SegmentedControlSegmentProps[\"value\"];\n selected?: never;\n};\n\n/**\n * Props for the SegmentedControl component\n */\nexport type SegmentedControlProps =\n | ControlledSegmentedControlProps\n | UncontrolledSegmentedControlProps;\n\nconst SegmentedControlElement = forwardRef<\n HTMLDivElement,\n SegmentedControlProps\n>((props, ref) => {\n const {\n className,\n onClick,\n onChange,\n children,\n size = \"medium\",\n defaultSelected,\n selected,\n name,\n fill,\n ...rest\n } = props;\n\n const [current, setCurrent] = useOptionallyControlledState({\n controlledValue: selected,\n defaultValue: defaultSelected,\n onChange,\n });\n\n const segmentedControlRef = useRef<HTMLDivElement>(null);\n\n const SegmentedControlClassNames = cx(\n styles[\"segmented-control\"],\n styles[size],\n className,\n {\n [styles.fill]: fill,\n },\n );\n\n const uid = useId();\n\n const data = {\n name: props.name,\n };\n\n const trackingId = useTrackingId({\n name: \"SegmentedControl\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return (\n <motion.div\n transition={{ duration: 0 }}\n layout\n role=\"radiogroup\"\n className={SegmentedControlClassNames}\n data-anv=\"segmented-control\"\n data-tracking-id={trackingId}\n ref={useMergeRefs([segmentedControlRef, ref])}\n {...rest}\n >\n <SegmentedControlContext.Provider\n value={{ current, setCurrent, name: name ?? uid }}\n >\n {children}\n </SegmentedControlContext.Provider>\n </motion.div>\n );\n});\n\nSegmentedControlElement.displayName = \"SegmentedControl\";\n\n/**\n * SegmentedControl component for selecting one option from a group of related choices.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Multiple size variants (small, medium)\n * - Optional fill width mode\n * - Smooth animations with motion\n * - Accessibility support with proper radio group semantics\n * - Layout utility props for positioning and spacing\n * - Context-based state management\n * - Auto-generated or custom name attributes\n * - Segment support via SegmentedControl.Segment\n * - Data tracking id support\n *\n * @example\n * <SegmentedControl\n * selected={selectedValue}\n * onChange={setSelectedValue}\n * size=\"medium\"\n * >\n * <SegmentedControl.Segment value=\"option1\">Option 1</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"option2\">Option 2</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"option3\">Option 3</SegmentedControl.Segment>\n * </SegmentedControl>\n *\n * @example\n * <SegmentedControl\n * defaultSelected=\"small\"\n * size=\"small\"\n * fill\n * >\n * <SegmentedControl.Segment value=\"small\" icon={SmallIcon}>Small</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"large\" icon={LargeIcon}>Large</SegmentedControl.Segment>\n * </SegmentedControl>\n */\nexport const SegmentedControl = Object.assign(SegmentedControlElement, {\n /**\n * SegmentedControlSegment component for individual segments within a segmented control.\n *\n * Features:\n * - Individual segment with radio input\n * - Optional icon support\n * - Animated selection indicator\n * - Accessibility support with proper ARIA attributes\n * - Context integration with parent SegmentedControl\n * - Motion animations with reduced motion support\n *\n * @example\n * <SegmentedControl.Segment value=\"option1\" icon={Icon1}>\n * Option 1\n * </SegmentedControl.Segment>\n */\n Segment: SegmentedControlSegment,\n});\n\nexport default SegmentedControl;\n"],"names":["core.primitive.Duration"],"mappings":"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"}
1
+ {"version":3,"file":"SegmentedControl-CLDdes8W.js","sources":["../src/components/SegmentedControl/internal/SegmentedControlContext.ts","../src/components/SegmentedControl/SegmentedControlSegment.tsx","../src/components/SegmentedControl/SegmentedControl.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\nimport { SegmentedControlSegmentProps } from \"../SegmentedControlSegment\";\nimport { SegmentedControlProps } from \"../SegmentedControl\";\n\n/**\n * Context props for SegmentedControl internal state management\n */\nexport type SegmentedControlContextProps = {\n /**\n * Currently selected segment value\n */\n current?: SegmentedControlSegmentProps[\"value\"];\n /**\n * Function to set the current segment\n */\n setCurrent?: (value: SegmentedControlSegmentProps[\"value\"]) => void;\n /**\n * Change handler for the segmented control\n */\n onChange?: SegmentedControlProps[\"onChange\"];\n /**\n * Name attribute for radio inputs\n */\n name?: string;\n};\n\nexport const SegmentedControlContext =\n createContext<SegmentedControlContextProps>({});\n","import {\n useContext,\n useRef,\n forwardRef,\n ComponentPropsWithoutRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport { core } from \"@servicetitan/hammer-token\";\n\nimport { DataTrackingId } from \"../../types\";\nimport { Icon, IconProps } from \"../Icon\";\nimport { motion, useReducedMotion } from \"motion/react\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\n\nimport { SegmentedControlContext } from \"./internal/SegmentedControlContext\";\n\nimport styles from \"./SegmentedControl.module.scss\";\n\n/**\n * State object returned by segment interactions\n */\nexport type SegmentState = {\n /**\n * Whether the segment is checked\n */\n checked: boolean;\n /**\n * The value of the segment\n */\n value?: SegmentedControlSegmentProps[\"value\"];\n};\n\n/**\n * Props for the SegmentedControlSegment component\n * @extends ComponentPropsWithoutRef<\"label\">\n */\nexport type SegmentedControlSegmentProps = ComponentPropsWithoutRef<\"label\"> & {\n /**\n * Optional icon to display in the segment\n */\n icon?: IconProps[\"svg\"];\n /**\n * Value of the segment\n */\n value: string;\n /**\n * The content to display in the segment\n */\n children?: React.ReactNode;\n} & DataTrackingId;\n\n/**\n * SegmentedControlSegment component for individual segments within a segmented control.\n *\n * Features:\n * - Individual segment with radio input\n * - Optional icon support\n * - Animated selection indicator\n * - Accessibility support with proper ARIA attributes\n * - Context integration with parent SegmentedControl\n * - Motion animations with reduced motion support\n * - Icon-only mode when no children provided\n * - Data tracking id support\n *\n * @example\n * <SegmentedControl.Segment value=\"option1\" icon={Icon1}>\n * Option 1\n * </SegmentedControl.Segment>\n *\n * @example\n * <SegmentedControl.Segment value=\"icon-only\" icon={IconOnly} />\n */\nexport const SegmentedControlSegment = forwardRef<\n HTMLLabelElement,\n SegmentedControlSegmentProps\n>((props, ref) => {\n const { icon, value, children, className, ...rest } = props;\n const shouldReduceMotion = useReducedMotion();\n const { current, setCurrent, name } = useContext(SegmentedControlContext);\n const labelRef = useRef<HTMLSpanElement>(null);\n\n const classNames = cx(styles.segment, className, {\n [styles[\"icon-only\"]]: icon && !children,\n });\n\n const data = {\n value: props.value,\n };\n\n const trackingId = useTrackingId({\n name: \"SegmentedControlSegment\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return (\n <>\n <label\n className={classNames}\n ref={useMergeRefs([labelRef, ref])}\n data-tracking-id={trackingId}\n data-anv=\"segmented-control-segment\"\n {...rest}\n >\n <input\n type=\"radio\"\n name={name}\n value={value}\n onChange={() => setCurrent?.(value)}\n checked={current === value}\n aria-checked={current === value}\n />\n {icon ? <Icon svg={icon} aria-hidden /> : null}\n {children}\n {current === value && (\n <motion.span\n layoutId={name}\n className={styles[\"select-indicator\"]}\n transition={{\n duration: shouldReduceMotion\n ? 0\n : +core.primitive.Duration.value.replace(\"ms\", \"\") / 1000,\n }}\n />\n )}\n </label>\n </>\n );\n});\n\nSegmentedControlSegment.displayName = \"SegmentedControlSegment\";\n","import { forwardRef, useId, ComponentPropsWithoutRef, useRef } from \"react\";\nimport cx from \"classnames\";\nimport { motion } from \"motion/react\";\n\nimport { DataTrackingId, LayoutUtilProps, Size } from \"../../types\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\n\nimport { SegmentedControlContext } from \"./internal/SegmentedControlContext\";\nimport {\n SegmentedControlSegment,\n SegmentedControlSegmentProps,\n} from \"./SegmentedControlSegment\";\n\nimport styles from \"./SegmentedControl.module.scss\";\n\n/**\n * Base props for SegmentedControl component\n * @extends Omit<ComponentPropsWithoutRef<\"div\">, \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"onChange\">\n * @extends LayoutUtilProps\n */\ntype BaseSegmentedControlProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"onChange\"\n> &\n LayoutUtilProps &\n DataTrackingId & {\n /**\n * Callback when segment is changed\n */\n onChange?: (value: SegmentedControlSegmentProps[\"value\"]) => void;\n\n /**\n * Size of the segment\n * @default \"medium\"\n */\n size?: Extract<Size, \"small\" | \"medium\">;\n\n /**\n * Whether to fill available width\n * @default false\n */\n fill?: boolean;\n\n /**\n * Name attribute for radio inputs\n * @remarks If empty, it will auto generate one using useId()\n */\n name?: string;\n\n /**\n * The segments to render within the segmented control\n */\n children?: React.ReactNode;\n };\n\n/**\n * Props for controlled SegmentedControl\n */\ntype ControlledSegmentedControlProps = BaseSegmentedControlProps & {\n /**\n * Selected segment (controlled mode)\n */\n selected: SegmentedControlSegmentProps[\"value\"];\n defaultSelected?: never;\n};\n\n/**\n * Props for uncontrolled SegmentedControl\n */\ntype UncontrolledSegmentedControlProps = BaseSegmentedControlProps & {\n /**\n * Initial selection (uncontrolled mode)\n */\n defaultSelected: SegmentedControlSegmentProps[\"value\"];\n selected?: never;\n};\n\n/**\n * Props for the SegmentedControl component\n */\nexport type SegmentedControlProps =\n | ControlledSegmentedControlProps\n | UncontrolledSegmentedControlProps;\n\nconst SegmentedControlElement = forwardRef<\n HTMLDivElement,\n SegmentedControlProps\n>((props, ref) => {\n const {\n className,\n onClick,\n onChange,\n children,\n size = \"medium\",\n defaultSelected,\n selected,\n name,\n fill,\n ...rest\n } = props;\n\n const [current, setCurrent] = useOptionallyControlledState({\n controlledValue: selected,\n defaultValue: defaultSelected,\n onChange,\n });\n\n const segmentedControlRef = useRef<HTMLDivElement>(null);\n\n const SegmentedControlClassNames = cx(\n styles[\"segmented-control\"],\n styles[size],\n className,\n {\n [styles.fill]: fill,\n },\n );\n\n const uid = useId();\n\n const data = {\n name: props.name,\n };\n\n const trackingId = useTrackingId({\n name: \"SegmentedControl\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return (\n <motion.div\n transition={{ duration: 0 }}\n layout\n role=\"radiogroup\"\n className={SegmentedControlClassNames}\n data-anv=\"segmented-control\"\n data-tracking-id={trackingId}\n ref={useMergeRefs([segmentedControlRef, ref])}\n {...rest}\n >\n <SegmentedControlContext.Provider\n value={{ current, setCurrent, name: name ?? uid }}\n >\n {children}\n </SegmentedControlContext.Provider>\n </motion.div>\n );\n});\n\nSegmentedControlElement.displayName = \"SegmentedControl\";\n\n/**\n * SegmentedControl component for selecting one option from a group of related choices.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Multiple size variants (small, medium)\n * - Optional fill width mode\n * - Smooth animations with motion\n * - Accessibility support with proper radio group semantics\n * - Layout utility props for positioning and spacing\n * - Context-based state management\n * - Auto-generated or custom name attributes\n * - Segment support via SegmentedControl.Segment\n * - Data tracking id support\n *\n * @example\n * <SegmentedControl\n * selected={selectedValue}\n * onChange={setSelectedValue}\n * size=\"medium\"\n * >\n * <SegmentedControl.Segment value=\"option1\">Option 1</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"option2\">Option 2</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"option3\">Option 3</SegmentedControl.Segment>\n * </SegmentedControl>\n *\n * @example\n * <SegmentedControl\n * defaultSelected=\"small\"\n * size=\"small\"\n * fill\n * >\n * <SegmentedControl.Segment value=\"small\" icon={SmallIcon}>Small</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"large\" icon={LargeIcon}>Large</SegmentedControl.Segment>\n * </SegmentedControl>\n */\nexport const SegmentedControl = Object.assign(SegmentedControlElement, {\n /**\n * SegmentedControlSegment component for individual segments within a segmented control.\n *\n * Features:\n * - Individual segment with radio input\n * - Optional icon support\n * - Animated selection indicator\n * - Accessibility support with proper ARIA attributes\n * - Context integration with parent SegmentedControl\n * - Motion animations with reduced motion support\n *\n * @example\n * <SegmentedControl.Segment value=\"option1\" icon={Icon1}>\n * Option 1\n * </SegmentedControl.Segment>\n */\n Segment: SegmentedControlSegment,\n});\n\nexport default SegmentedControl;\n"],"names":["core.primitive.Duration"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { S as SegmentedControl, a as SegmentedControlSegment, S as default } from './SegmentedControl-CsjjV1Dz.js';
1
+ export { S as SegmentedControl, a as SegmentedControlSegment, S as default } from './SegmentedControl-CLDdes8W.js';
2
2
  //# sourceMappingURL=SegmentedControl.js.map
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useContext, createContext, useState, useId, forwardRef, useLayoutEffect } from 'react';
3
3
  import { c as cx } from './index-tZvMCc77.js';
4
- import { C as CheckboxGroup, a as Checkbox } from './Checkbox-Dl4KTwEJ.js';
5
- import { R as RadioGroup, a as Radio } from './RadioGroup-C_4buUtG.js';
4
+ import { C as CheckboxGroup, a as Checkbox } from './Checkbox-C5PX8wur.js';
5
+ import { R as RadioGroup, a as Radio } from './RadioGroup-B7O06pVu.js';
6
6
  import { C as Card } from './Card-vTYeSkxt.js';
7
7
  import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
8
8
 
@@ -221,4 +221,4 @@ const SelectCard = Object.assign(SelectCardElement, {
221
221
  });
222
222
 
223
223
  export { SelectCard as S, SelectCardElement as a, SelectCardGroup as b };
224
- //# sourceMappingURL=SelectCard-BTYZg9TG.js.map
224
+ //# sourceMappingURL=SelectCard-Ca07K1FW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCard-BTYZg9TG.js","sources":["../src/components/SelectCard/internal/SelectCardProvider.tsx","../src/components/SelectCard/SelectCardGroup.tsx","../src/components/SelectCard/SelectCard.tsx"],"sourcesContent":["import {\n ChangeEvent,\n ReactNode,\n createContext,\n useContext,\n useId,\n useState,\n} from \"react\";\n\n/**\n * Interface for the select card state\n */\ninterface ISelectCardState {\n /**\n * When `true`, adds the item to the selected state holder.\n */\n checked: boolean;\n\n /**\n * Gives an explicit id to each item in the set.\n */\n id?: string | number;\n}\n\n/**\n * Interface for the select card onChange options\n */\ninterface ISelectCardOnChangeOptions {\n /**\n * When `true`, doesn't fire the user's `onChange`\n */\n internal?: boolean;\n}\n\n/**\n * Interface for the select card context\n */\nexport interface ISelectCardContext {\n /**\n * Callback function that is triggered when the selection state changes.\n *\n * @callback OnChangeCallback\n * @param {ChangeEvent<HTMLInputElement>} [e] - The native HTML input change event.\n * @param {ISelectCardState} [state] - The current state of the select card component after the change.\n * @returns {void}\n */\n onChange: (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => void;\n\n /**\n * Sets how many cards the user can select, either 'single' (radio buttons) or 'multiple' (checkboxes)\n */\n selectionMode: \"single\" | \"multiple\";\n\n /**\n * Used internally to create a UUID for the HTML `name` property on radios.\n */\n radioName: string;\n\n /**\n * Creates a set of ids that are selected.\n */\n selection: Set<string | number>;\n}\n\n/**\n * Props for the SelectCardProvider component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\ninterface ISelectCardProviderProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n children: ReactNode;\n}\n\nconst SelectCardContext = createContext<ISelectCardContext | null>(null);\n\n/**\n * SelectCardProvider component for managing selection state across SelectCard components.\n *\n * Features:\n * - Provides context for SelectCard components to share selection state\n * - Manages selection mode (single vs multiple)\n * - Handles selection state updates and callbacks\n * - Generates unique radio button names for single selection mode\n * - Maintains a set of selected card IDs\n * - Integrates with SelectCardGroup for automatic context provision\n *\n * @example\n * <SelectCardProvider\n * selectionMode=\"multiple\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"1\" onChange={() => {}}>Option 1</SelectCard>\n * <SelectCard id=\"2\" onChange={() => {}}>Option 2</SelectCard>\n * </SelectCardProvider>\n */\nexport const SelectCardProvider = ({\n children,\n onChange,\n selectionMode,\n}: ISelectCardProviderProps) => {\n const [selection, setSelection] = useState<Set<string | number>>(new Set());\n\n const radioName = useId();\n\n const handleChange = (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => {\n if (!state || !state.id) {\n if (!options?.internal) {\n onChange(e, state);\n }\n\n return;\n }\n\n // Set internal selection\n if (selectionMode === \"single\") {\n if (state.checked) {\n setSelection(new Set([state.id]));\n } else {\n setSelection(new Set());\n }\n } else {\n if (state.checked) {\n setSelection(selection.add(state.id));\n } else {\n selection.delete(state.id);\n setSelection(selection);\n }\n }\n\n if (!options?.internal) {\n onChange(e, state);\n }\n };\n\n const context = {\n selectionMode,\n onChange: handleChange,\n radioName,\n selection,\n };\n\n return (\n <SelectCardContext.Provider value={context}>\n {children}\n </SelectCardContext.Provider>\n );\n};\n\n/**\n * Custom hook for accessing the SelectCard context.\n * @returns The SelectCard context or null if not within a SelectCardProvider\n */\nexport const useSelectCardContext = () => useContext(SelectCardContext);\n","import { forwardRef, ReactNode } from \"react\";\nimport { CheckboxGroup, CheckboxGroupProps } from \"../Checkbox/CheckboxGroup\";\nimport { RadioGroup } from \"../Radio\";\nimport {\n ISelectCardContext,\n SelectCardProvider,\n} from \"./internal/SelectCardProvider\";\n\n/**\n * Props for the SelectCardGroup component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\nexport interface SelectCardGroupProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n /**\n * Associates the legend with content below.\n */\n ariaLabelledBy?: string;\n\n children?: ReactNode;\n\n /**\n * Sets the legend on the group.\n */\n legend: CheckboxGroupProps[\"legend\"];\n\n /**\n * When `true`, sets \"required\" text in label.\n * @accessibility This does not enforce error when nothing is selected.\n * @default false\n */\n required?: boolean;\n}\n\n/**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n * - Integrates with CheckboxGroup and RadioGroup for proper form semantics\n *\n * @example\n * <SelectCardGroup\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCardGroup>\n */\nexport const SelectCardGroup = forwardRef<\n HTMLInputElement,\n SelectCardGroupProps\n>((props, _ref) => {\n const {\n ariaLabelledBy,\n children,\n legend,\n onChange,\n required = false,\n selectionMode,\n ...rest\n } = props;\n\n return (\n <SelectCardProvider onChange={onChange} selectionMode={selectionMode}>\n {selectionMode === \"multiple\" && (\n <CheckboxGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n required={required}\n {...rest}\n >\n {children}\n </CheckboxGroup>\n )}\n {selectionMode === \"single\" && (\n <RadioGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n required={required}\n {...rest}\n >\n {children}\n </RadioGroup>\n )}\n </SelectCardProvider>\n );\n});\n\nSelectCardGroup.displayName = \"SelectCardGroup\";\n","import { useLayoutEffect, useState, forwardRef, type ChangeEvent } from \"react\";\nimport cx from \"classnames\";\n\nimport { SelectCardGroup } from \"./SelectCardGroup\";\nimport { Card, CardProps } from \"../Card\";\nimport { Radio, RadioProps } from \"../Radio/internal/Radio\";\nimport { Checkbox, CheckboxProps } from \"../Checkbox/internal/Checkbox\";\n\nimport { useSelectCardContext } from \"./internal/SelectCardProvider\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\n\nimport styles from \"./SelectCard.module.scss\";\n\n/**\n * Props for the SelectCard component\n * @extends Omit<CardProps, \"onChange\" | \"id\">\n */\nexport interface SelectCardProps extends Omit<CardProps, \"onChange\" | \"id\"> {\n /**\n * Passes props to the underlying `<Checkbox />` component.\n */\n checkboxProps?: Omit<CheckboxProps, \"label\">;\n\n /**\n * Controlled state. When provided, the component becomes controlled.\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state.\n */\n defaultChecked?: boolean;\n\n /**\n * When `true`, disables the card.\n */\n disabled?: boolean;\n\n /**\n * When `true`, sets error styling on the card.\n */\n errored?: boolean;\n\n /**\n * A unique identifier for the card, used to track the selection state.\n */\n id: string | number;\n\n /**\n * Function called on selection state change.\n */\n onChange: (value: boolean) => void;\n\n /**\n * Passes props to the underlying `<Radio />` component.\n */\n radioProps?: Omit<RadioProps, \"label\">;\n\n /**\n * Removes the drop shadow effect on the card.\n */\n removeDropShadow?: boolean;\n}\n\nexport const SelectCardElement = forwardRef<HTMLInputElement, SelectCardProps>(\n (props, ref) => {\n const {\n checkboxProps,\n children,\n checked: checkedProp,\n className,\n defaultChecked: defaultCheckedProp,\n disabled,\n errored,\n radioProps,\n onChange,\n removeDropShadow,\n id,\n ...rest\n } = props;\n\n const [checked, setChecked] = useOptionallyControlledState<boolean>({\n controlledValue: checkedProp,\n defaultValue: defaultCheckedProp || false,\n onChange,\n });\n\n const context = useSelectCardContext();\n\n // we need to re-render after setting the initial selection state on context\n const [_, setForceRenderCount] = useState(0);\n useLayoutEffect(() => {\n if (defaultCheckedProp) {\n context?.onChange(\n undefined,\n {\n id,\n checked: defaultCheckedProp,\n },\n { internal: true },\n );\n\n setForceRenderCount((prev) => prev + 1);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleChange = (event?: ChangeEvent<HTMLInputElement>) => {\n const newChecked = event ? event.target.checked : false;\n setChecked(newChecked);\n context?.onChange(event, {\n id,\n checked: newChecked,\n });\n };\n\n // A selection in the group context supersedes the normal checked state of the card\n const isChecked = context ? context.selection.has(id) : checked;\n\n return (\n <>\n {(!context || context?.selectionMode === \"multiple\") && (\n <Checkbox\n {...checkboxProps}\n defaultChecked={defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n label={\n <Card\n {...rest}\n className={cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n })}\n >\n {children}\n </Card>\n }\n hideCheckbox\n />\n )}\n {context?.selectionMode === \"single\" && (\n <Radio\n {...radioProps}\n defaultChecked={defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n name={context.radioName}\n label={\n <Card\n {...rest}\n className={cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n })}\n >\n {children}\n </Card>\n }\n hideRadio\n />\n )}\n </>\n );\n },\n);\n\nSelectCardElement.displayName = \"SelectCard\";\n\n/**\n * SelectCard component for creating interactive card-based selection interfaces.\n *\n * Features:\n * - Supports both single selection (radio) and multiple selection (checkbox) modes\n * - Automatic context detection for selection behavior\n * - Visual feedback for selected, disabled, and error states\n * - Accessible with proper ARIA roles and keyboard navigation\n * - Customizable styling through Card component props\n * - Hover and focus states with smooth transitions\n * - Integration with SelectCardGroup for grouped selection\n *\n * @example\n * <SelectCard\n * id=\"option-1\"\n * onChange={(checked) => console.log('Selected:', checked)}\n * >\n * <Text variant=\"headline\" size=\"small\">Option 1</Text>\n * <Text>Description of option 1</Text>\n * </SelectCard>\n */\nexport const SelectCard = Object.assign(SelectCardElement, {\n /**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n *\n * @example\n * <SelectCard.Group\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCard.Group>\n */\n Group: SelectCardGroup,\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectCard-Ca07K1FW.js","sources":["../src/components/SelectCard/internal/SelectCardProvider.tsx","../src/components/SelectCard/SelectCardGroup.tsx","../src/components/SelectCard/SelectCard.tsx"],"sourcesContent":["import {\n ChangeEvent,\n ReactNode,\n createContext,\n useContext,\n useId,\n useState,\n} from \"react\";\n\n/**\n * Interface for the select card state\n */\ninterface ISelectCardState {\n /**\n * When `true`, adds the item to the selected state holder.\n */\n checked: boolean;\n\n /**\n * Gives an explicit id to each item in the set.\n */\n id?: string | number;\n}\n\n/**\n * Interface for the select card onChange options\n */\ninterface ISelectCardOnChangeOptions {\n /**\n * When `true`, doesn't fire the user's `onChange`\n */\n internal?: boolean;\n}\n\n/**\n * Interface for the select card context\n */\nexport interface ISelectCardContext {\n /**\n * Callback function that is triggered when the selection state changes.\n *\n * @callback OnChangeCallback\n * @param {ChangeEvent<HTMLInputElement>} [e] - The native HTML input change event.\n * @param {ISelectCardState} [state] - The current state of the select card component after the change.\n * @returns {void}\n */\n onChange: (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => void;\n\n /**\n * Sets how many cards the user can select, either 'single' (radio buttons) or 'multiple' (checkboxes)\n */\n selectionMode: \"single\" | \"multiple\";\n\n /**\n * Used internally to create a UUID for the HTML `name` property on radios.\n */\n radioName: string;\n\n /**\n * Creates a set of ids that are selected.\n */\n selection: Set<string | number>;\n}\n\n/**\n * Props for the SelectCardProvider component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\ninterface ISelectCardProviderProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n children: ReactNode;\n}\n\nconst SelectCardContext = createContext<ISelectCardContext | null>(null);\n\n/**\n * SelectCardProvider component for managing selection state across SelectCard components.\n *\n * Features:\n * - Provides context for SelectCard components to share selection state\n * - Manages selection mode (single vs multiple)\n * - Handles selection state updates and callbacks\n * - Generates unique radio button names for single selection mode\n * - Maintains a set of selected card IDs\n * - Integrates with SelectCardGroup for automatic context provision\n *\n * @example\n * <SelectCardProvider\n * selectionMode=\"multiple\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"1\" onChange={() => {}}>Option 1</SelectCard>\n * <SelectCard id=\"2\" onChange={() => {}}>Option 2</SelectCard>\n * </SelectCardProvider>\n */\nexport const SelectCardProvider = ({\n children,\n onChange,\n selectionMode,\n}: ISelectCardProviderProps) => {\n const [selection, setSelection] = useState<Set<string | number>>(new Set());\n\n const radioName = useId();\n\n const handleChange = (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => {\n if (!state || !state.id) {\n if (!options?.internal) {\n onChange(e, state);\n }\n\n return;\n }\n\n // Set internal selection\n if (selectionMode === \"single\") {\n if (state.checked) {\n setSelection(new Set([state.id]));\n } else {\n setSelection(new Set());\n }\n } else {\n if (state.checked) {\n setSelection(selection.add(state.id));\n } else {\n selection.delete(state.id);\n setSelection(selection);\n }\n }\n\n if (!options?.internal) {\n onChange(e, state);\n }\n };\n\n const context = {\n selectionMode,\n onChange: handleChange,\n radioName,\n selection,\n };\n\n return (\n <SelectCardContext.Provider value={context}>\n {children}\n </SelectCardContext.Provider>\n );\n};\n\n/**\n * Custom hook for accessing the SelectCard context.\n * @returns The SelectCard context or null if not within a SelectCardProvider\n */\nexport const useSelectCardContext = () => useContext(SelectCardContext);\n","import { forwardRef, ReactNode } from \"react\";\nimport { CheckboxGroup, CheckboxGroupProps } from \"../Checkbox/CheckboxGroup\";\nimport { RadioGroup } from \"../Radio\";\nimport {\n ISelectCardContext,\n SelectCardProvider,\n} from \"./internal/SelectCardProvider\";\n\n/**\n * Props for the SelectCardGroup component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\nexport interface SelectCardGroupProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n /**\n * Associates the legend with content below.\n */\n ariaLabelledBy?: string;\n\n children?: ReactNode;\n\n /**\n * Sets the legend on the group.\n */\n legend: CheckboxGroupProps[\"legend\"];\n\n /**\n * When `true`, sets \"required\" text in label.\n * @accessibility This does not enforce error when nothing is selected.\n * @default false\n */\n required?: boolean;\n}\n\n/**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n * - Integrates with CheckboxGroup and RadioGroup for proper form semantics\n *\n * @example\n * <SelectCardGroup\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCardGroup>\n */\nexport const SelectCardGroup = forwardRef<\n HTMLInputElement,\n SelectCardGroupProps\n>((props, _ref) => {\n const {\n ariaLabelledBy,\n children,\n legend,\n onChange,\n required = false,\n selectionMode,\n ...rest\n } = props;\n\n return (\n <SelectCardProvider onChange={onChange} selectionMode={selectionMode}>\n {selectionMode === \"multiple\" && (\n <CheckboxGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n required={required}\n {...rest}\n >\n {children}\n </CheckboxGroup>\n )}\n {selectionMode === \"single\" && (\n <RadioGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n required={required}\n {...rest}\n >\n {children}\n </RadioGroup>\n )}\n </SelectCardProvider>\n );\n});\n\nSelectCardGroup.displayName = \"SelectCardGroup\";\n","import { useLayoutEffect, useState, forwardRef, type ChangeEvent } from \"react\";\nimport cx from \"classnames\";\n\nimport { SelectCardGroup } from \"./SelectCardGroup\";\nimport { Card, CardProps } from \"../Card\";\nimport { Radio, RadioProps } from \"../Radio/internal/Radio\";\nimport { Checkbox, CheckboxProps } from \"../Checkbox/internal/Checkbox\";\n\nimport { useSelectCardContext } from \"./internal/SelectCardProvider\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\n\nimport styles from \"./SelectCard.module.scss\";\n\n/**\n * Props for the SelectCard component\n * @extends Omit<CardProps, \"onChange\" | \"id\">\n */\nexport interface SelectCardProps extends Omit<CardProps, \"onChange\" | \"id\"> {\n /**\n * Passes props to the underlying `<Checkbox />` component.\n */\n checkboxProps?: Omit<CheckboxProps, \"label\">;\n\n /**\n * Controlled state. When provided, the component becomes controlled.\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state.\n */\n defaultChecked?: boolean;\n\n /**\n * When `true`, disables the card.\n */\n disabled?: boolean;\n\n /**\n * When `true`, sets error styling on the card.\n */\n errored?: boolean;\n\n /**\n * A unique identifier for the card, used to track the selection state.\n */\n id: string | number;\n\n /**\n * Function called on selection state change.\n */\n onChange: (value: boolean) => void;\n\n /**\n * Passes props to the underlying `<Radio />` component.\n */\n radioProps?: Omit<RadioProps, \"label\">;\n\n /**\n * Removes the drop shadow effect on the card.\n */\n removeDropShadow?: boolean;\n}\n\nexport const SelectCardElement = forwardRef<HTMLInputElement, SelectCardProps>(\n (props, ref) => {\n const {\n checkboxProps,\n children,\n checked: checkedProp,\n className,\n defaultChecked: defaultCheckedProp,\n disabled,\n errored,\n radioProps,\n onChange,\n removeDropShadow,\n id,\n ...rest\n } = props;\n\n const [checked, setChecked] = useOptionallyControlledState<boolean>({\n controlledValue: checkedProp,\n defaultValue: defaultCheckedProp || false,\n onChange,\n });\n\n const context = useSelectCardContext();\n\n // we need to re-render after setting the initial selection state on context\n const [_, setForceRenderCount] = useState(0);\n useLayoutEffect(() => {\n if (defaultCheckedProp) {\n context?.onChange(\n undefined,\n {\n id,\n checked: defaultCheckedProp,\n },\n { internal: true },\n );\n\n setForceRenderCount((prev) => prev + 1);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleChange = (event?: ChangeEvent<HTMLInputElement>) => {\n const newChecked = event ? event.target.checked : false;\n setChecked(newChecked);\n context?.onChange(event, {\n id,\n checked: newChecked,\n });\n };\n\n // A selection in the group context supersedes the normal checked state of the card\n const isChecked = context ? context.selection.has(id) : checked;\n\n return (\n <>\n {(!context || context?.selectionMode === \"multiple\") && (\n <Checkbox\n {...checkboxProps}\n defaultChecked={defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n label={\n <Card\n {...rest}\n className={cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n })}\n >\n {children}\n </Card>\n }\n hideCheckbox\n />\n )}\n {context?.selectionMode === \"single\" && (\n <Radio\n {...radioProps}\n defaultChecked={defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n name={context.radioName}\n label={\n <Card\n {...rest}\n className={cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n })}\n >\n {children}\n </Card>\n }\n hideRadio\n />\n )}\n </>\n );\n },\n);\n\nSelectCardElement.displayName = \"SelectCard\";\n\n/**\n * SelectCard component for creating interactive card-based selection interfaces.\n *\n * Features:\n * - Supports both single selection (radio) and multiple selection (checkbox) modes\n * - Automatic context detection for selection behavior\n * - Visual feedback for selected, disabled, and error states\n * - Accessible with proper ARIA roles and keyboard navigation\n * - Customizable styling through Card component props\n * - Hover and focus states with smooth transitions\n * - Integration with SelectCardGroup for grouped selection\n *\n * @example\n * <SelectCard\n * id=\"option-1\"\n * onChange={(checked) => console.log('Selected:', checked)}\n * >\n * <Text variant=\"headline\" size=\"small\">Option 1</Text>\n * <Text>Description of option 1</Text>\n * </SelectCard>\n */\nexport const SelectCard = Object.assign(SelectCardElement, {\n /**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n *\n * @example\n * <SelectCard.Group\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCard.Group>\n */\n Group: SelectCardGroup,\n});\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { S as SelectCard, a as SelectCardElement, b as SelectCardGroup, S as default } from './SelectCard-BTYZg9TG.js';
1
+ export { S as SelectCard, a as SelectCardElement, b as SelectCardGroup, S as default } from './SelectCard-Ca07K1FW.js';
2
2
  //# sourceMappingURL=SelectCard.js.map
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { A as Avatar } from './Avatar-CyGjhToG.js';
2
+ import { A as Avatar } from './Avatar-3d5Kv2CF.js';
3
3
  import { I as Icon } from './Icon-D8SPKeO4.js';
4
- import { S as SelectTriggerBase, d as defaultItemToString, a as defaultItemToKey } from './SelectTriggerBase-DP9fmRSo.js';
4
+ import { S as SelectTriggerBase, d as defaultItemToString, a as defaultItemToKey } from './SelectTriggerBase-C7TLCna1.js';
5
5
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjD5IMh0.js';
6
6
  import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
7
7
  import { useTrackingId } from './useTrackingId.js';
@@ -122,4 +122,4 @@ const SelectTrigger = function(props) {
122
122
  };
123
123
 
124
124
  export { SelectTrigger as S };
125
- //# sourceMappingURL=SelectTrigger-f1hvRrSC.js.map
125
+ //# sourceMappingURL=SelectTrigger-CaXX1SHG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTrigger-f1hvRrSC.js","sources":["../src/components/SelectTrigger/SelectTrigger.tsx"],"sourcesContent":["import { Dispatch, SetStateAction } from \"react\";\nimport {\n UseComboboxProps as UseDownshiftComboboxProps,\n UseMultipleSelectionProps as UseDownshiftMultipleSelectionProps,\n} from \"downshift\";\n\nimport { Avatar, AvatarProps } from \"../Avatar\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { DataTrackingId, DistributiveOmit } from \"../../types\";\nimport { FieldLabelProps } from \"../FieldLabel\";\nimport { Icon, IconProps } from \"../Icon\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport {\n SelectTriggerBase,\n SelectTriggerBaseProps,\n} from \"./internal/SelectTriggerBase\";\nimport {\n defaultItemToKey,\n defaultItemToString,\n} from \"../Combobox/internal/ComboboxUtils\";\n\nexport type SelectTriggerProps<Item> = DistributiveOmit<\n SelectTriggerBaseProps<Item>,\n \"prefix\" | \"selectedItem\" | \"selectedItems\" | \"onChange\"\n> &\n Pick<FieldLabelProps, \"required\" | \"moreInfo\" | \"openMoreInfo\"> &\n Pick<UseDownshiftComboboxProps<Item>, \"itemToString\" | \"itemToKey\"> &\n DataTrackingId & {\n prefix?:\n | string\n | { icon: DistributiveOmit<IconProps, \"size\"> }\n | { avatar: DistributiveOmit<AvatarProps, \"size\"> };\n } & (\n | {\n multiple?: never;\n onChange?:\n | Dispatch<SetStateAction<Item | null>>\n | ((arg: Item | null) => void);\n selectedItem: UseDownshiftComboboxProps<Item>[\"selectedItem\"];\n selectedItems?: never;\n }\n | {\n multiple: true;\n onChange?:\n | Dispatch<SetStateAction<Item[] | null>>\n | ((arg: Item[] | null) => void);\n selectedItem?: never;\n selectedItems: UseDownshiftMultipleSelectionProps<Item>[\"selectedItems\"];\n }\n );\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO: look into unknown\nexport const SelectTrigger = function <Item = any>(\n props: SelectTriggerProps<Item>,\n) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n\n const {\n className,\n style,\n label,\n size,\n error,\n hint,\n description,\n required,\n moreInfo,\n openMoreInfo,\n prefix: prefixProp,\n suffix,\n maxRows,\n selectedItemProps = () => ({}),\n id,\n placeholder,\n disabled: isDisabled,\n readOnly: isReadOnly,\n onClick,\n multiple,\n onChange,\n disableClearSelection,\n itemToString: itemToStringProp,\n itemToKey: itemToKeyProp,\n selectedItem = null,\n selectedItems = [],\n ...rest\n } = componentProps;\n\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n const itemToKey = itemToKeyProp ?? defaultItemToKey<Item>;\n\n function removeSelectedItem(item: Item) {\n if (multiple) {\n onChange?.(\n selectedItems.filter(\n (selectedItem: Item) => itemToKey(selectedItem) !== itemToKey(item),\n ),\n );\n } else if (itemToKey(selectedItem) === itemToKey(item)) {\n onChange?.(null);\n }\n }\n\n function reset() {\n if (multiple) {\n onChange?.([]);\n } else {\n onChange?.(null);\n }\n }\n\n const noClearButton = isDisabled || isReadOnly || disableClearSelection;\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const data = {\n label: childrenToString(props.label),\n size: props.size,\n required: props.required,\n moreInfo: props.moreInfo,\n openMoreInfo: props.openMoreInfo,\n description: childrenToString(props.description),\n hint: props.hint,\n labelProps: props.labelProps,\n };\n\n const trackingId = useTrackingId({\n name: \"ComboboxSearchField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const prefix =\n prefixProp == null || typeof prefixProp === \"string\" ? (\n prefixProp\n ) : \"icon\" in prefixProp ? (\n <Icon {...prefixProp.icon} />\n ) : \"avatar\" in prefixProp ? (\n <Avatar\n {...prefixProp.avatar}\n size={props.size === \"small\" ? \"small\" : \"medium\"}\n />\n ) : (\n prefixProp\n );\n\n return (\n <SelectTriggerBase\n data-anv=\"select-trigger\"\n data-tracking-id={trackingId}\n className={className}\n style={styleCombined}\n label={label}\n size={size}\n error={error}\n hint={hint}\n description={description}\n labelProps={{\n required,\n moreInfo,\n openMoreInfo,\n }}\n prefix={prefix}\n suffix={suffix}\n maxRows={maxRows}\n selectedItemProps={selectedItemProps}\n id={id}\n placeholder={placeholder}\n disabled={isDisabled}\n readOnly={isReadOnly}\n itemToString={itemToString}\n removeSelectedItem={removeSelectedItem}\n disableClearSelection={noClearButton}\n selectedItem={selectedItem}\n selectedItems={selectedItems}\n onClearButtonClick={reset}\n inputWrapperProps={{ onClick }}\n inputProps={rest}\n />\n );\n};\n"],"names":["selectedItem"],"mappings":"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"}
1
+ {"version":3,"file":"SelectTrigger-CaXX1SHG.js","sources":["../src/components/SelectTrigger/SelectTrigger.tsx"],"sourcesContent":["import { Dispatch, SetStateAction } from \"react\";\nimport {\n UseComboboxProps as UseDownshiftComboboxProps,\n UseMultipleSelectionProps as UseDownshiftMultipleSelectionProps,\n} from \"downshift\";\n\nimport { Avatar, AvatarProps } from \"../Avatar\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { DataTrackingId, DistributiveOmit } from \"../../types\";\nimport { FieldLabelProps } from \"../FieldLabel\";\nimport { Icon, IconProps } from \"../Icon\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport {\n SelectTriggerBase,\n SelectTriggerBaseProps,\n} from \"./internal/SelectTriggerBase\";\nimport {\n defaultItemToKey,\n defaultItemToString,\n} from \"../Combobox/internal/ComboboxUtils\";\n\nexport type SelectTriggerProps<Item> = DistributiveOmit<\n SelectTriggerBaseProps<Item>,\n \"prefix\" | \"selectedItem\" | \"selectedItems\" | \"onChange\"\n> &\n Pick<FieldLabelProps, \"required\" | \"moreInfo\" | \"openMoreInfo\"> &\n Pick<UseDownshiftComboboxProps<Item>, \"itemToString\" | \"itemToKey\"> &\n DataTrackingId & {\n prefix?:\n | string\n | { icon: DistributiveOmit<IconProps, \"size\"> }\n | { avatar: DistributiveOmit<AvatarProps, \"size\"> };\n } & (\n | {\n multiple?: never;\n onChange?:\n | Dispatch<SetStateAction<Item | null>>\n | ((arg: Item | null) => void);\n selectedItem: UseDownshiftComboboxProps<Item>[\"selectedItem\"];\n selectedItems?: never;\n }\n | {\n multiple: true;\n onChange?:\n | Dispatch<SetStateAction<Item[] | null>>\n | ((arg: Item[] | null) => void);\n selectedItem?: never;\n selectedItems: UseDownshiftMultipleSelectionProps<Item>[\"selectedItems\"];\n }\n );\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO: look into unknown\nexport const SelectTrigger = function <Item = any>(\n props: SelectTriggerProps<Item>,\n) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n\n const {\n className,\n style,\n label,\n size,\n error,\n hint,\n description,\n required,\n moreInfo,\n openMoreInfo,\n prefix: prefixProp,\n suffix,\n maxRows,\n selectedItemProps = () => ({}),\n id,\n placeholder,\n disabled: isDisabled,\n readOnly: isReadOnly,\n onClick,\n multiple,\n onChange,\n disableClearSelection,\n itemToString: itemToStringProp,\n itemToKey: itemToKeyProp,\n selectedItem = null,\n selectedItems = [],\n ...rest\n } = componentProps;\n\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n const itemToKey = itemToKeyProp ?? defaultItemToKey<Item>;\n\n function removeSelectedItem(item: Item) {\n if (multiple) {\n onChange?.(\n selectedItems.filter(\n (selectedItem: Item) => itemToKey(selectedItem) !== itemToKey(item),\n ),\n );\n } else if (itemToKey(selectedItem) === itemToKey(item)) {\n onChange?.(null);\n }\n }\n\n function reset() {\n if (multiple) {\n onChange?.([]);\n } else {\n onChange?.(null);\n }\n }\n\n const noClearButton = isDisabled || isReadOnly || disableClearSelection;\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const data = {\n label: childrenToString(props.label),\n size: props.size,\n required: props.required,\n moreInfo: props.moreInfo,\n openMoreInfo: props.openMoreInfo,\n description: childrenToString(props.description),\n hint: props.hint,\n labelProps: props.labelProps,\n };\n\n const trackingId = useTrackingId({\n name: \"ComboboxSearchField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const prefix =\n prefixProp == null || typeof prefixProp === \"string\" ? (\n prefixProp\n ) : \"icon\" in prefixProp ? (\n <Icon {...prefixProp.icon} />\n ) : \"avatar\" in prefixProp ? (\n <Avatar\n {...prefixProp.avatar}\n size={props.size === \"small\" ? \"small\" : \"medium\"}\n />\n ) : (\n prefixProp\n );\n\n return (\n <SelectTriggerBase\n data-anv=\"select-trigger\"\n data-tracking-id={trackingId}\n className={className}\n style={styleCombined}\n label={label}\n size={size}\n error={error}\n hint={hint}\n description={description}\n labelProps={{\n required,\n moreInfo,\n openMoreInfo,\n }}\n prefix={prefix}\n suffix={suffix}\n maxRows={maxRows}\n selectedItemProps={selectedItemProps}\n id={id}\n placeholder={placeholder}\n disabled={isDisabled}\n readOnly={isReadOnly}\n itemToString={itemToString}\n removeSelectedItem={removeSelectedItem}\n disableClearSelection={noClearButton}\n selectedItem={selectedItem}\n selectedItems={selectedItems}\n onClearButtonClick={reset}\n inputWrapperProps={{ onClick }}\n inputProps={rest}\n />\n );\n};\n"],"names":["selectedItem"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { S as SelectTrigger, S as default } from './SelectTrigger-f1hvRrSC.js';
1
+ export { S as SelectTrigger, S as default } from './SelectTrigger-CaXX1SHG.js';
2
2
  //# sourceMappingURL=SelectTrigger.js.map
@@ -3,10 +3,10 @@ import { useRef, useId, useState, useLayoutEffect } from 'react';
3
3
  import { c as cx } from './index-tZvMCc77.js';
4
4
  import { S as SvgClose } from './close-DZj38AEh.js';
5
5
  import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
6
- import { B as Button } from './Button-BxFXQ0-n.js';
7
- import { C as Chip } from './Chip-Bz-vlQ4D.js';
6
+ import { B as Button } from './Button-VNQQgZ45.js';
7
+ import { C as Chip } from './Chip-DLU13qe-.js';
8
8
  import { F as Flex } from './Flex-BdQMekvA.js';
9
- import { F as FieldLabel } from './FieldLabel-BsbTTyom.js';
9
+ import { F as FieldLabel } from './FieldLabel-Bgl3iu13.js';
10
10
  import { H as Helper } from './Helper-BkIDJqgA.js';
11
11
 
12
12
  import './SelectTriggerBase.css';const ADD_NEW = Symbol.for("add-new");
@@ -313,4 +313,4 @@ const SelectTriggerBase = function({
313
313
  };
314
314
 
315
315
  export { ADD_NEW as A, SelectTriggerBase as S, defaultItemToKey as a, defaultItemToString as d, isMultiple as i, useDownshiftEnvironment as u };
316
- //# sourceMappingURL=SelectTriggerBase-DP9fmRSo.js.map
316
+ //# sourceMappingURL=SelectTriggerBase-C7TLCna1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTriggerBase-DP9fmRSo.js","sources":["../src/components/Combobox/internal/ComboboxUtils.ts","../src/components/SelectTrigger/internal/SelectTriggerBase.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport {\n ComboboxMultipleProps,\n ComboboxProps,\n ComboboxSelectProps,\n SelectMultipleProps,\n} from \"../ComboboxTypes\";\n\nexport const ADD_NEW = Symbol.for(\"add-new\");\n\n/**\n * Default function to convert an item to a string representation\n * @template Item - The type of the item\n * @param item - The item to convert to string\n * @returns String representation of the item or empty string if null/undefined\n */\nexport const defaultItemToString = function <Item>(item: Item | null) {\n return item != null ? String(item) : \"\";\n};\n\n/**\n * Default function to generate a unique key for an item\n * @template Item - The type of the item\n * @param item - The item to generate a key for\n * @returns The item itself as the key\n */\nexport const defaultItemToKey = function <Item>(item: Item | null) {\n return item;\n};\n\n/**\n * Hook to handle downshift environment configuration for shadow DOM support\n *\n * Features:\n * - Fixes shadow DOM compatibility issues with downshift\n * - Provides proper document and event listener references\n * - Returns ref for wrapper element and environment configuration\n *\n * @returns Object containing ref and environment configuration\n *\n * @example\n * const { ref, environment } = useDownshiftEnvironment();\n *\n * return (\n * <div ref={ref}>\n * <Combobox environment={environment}>\n * combobox content\n * </Combobox>\n * </div>\n * );\n */\nexport const useDownshiftEnvironment = () => {\n // fix for shadow DOM, see https://gist.github.com/Rendez/1dd55882e9b850dd3990feefc9d6e177\n const wrapperDivRef = useRef<HTMLDivElement | null>(null);\n\n const shadowRoot = wrapperDivRef.current\n ? wrapperDivRef.current.getRootNode()\n : null;\n\n const shadowDocument =\n wrapperDivRef.current && shadowRoot ? shadowRoot.ownerDocument : null;\n\n const environment = shadowDocument\n ? {\n document: shadowDocument,\n addEventListener: shadowDocument.addEventListener.bind(shadowRoot),\n removeEventListener:\n shadowDocument.removeEventListener.bind(shadowRoot),\n Node,\n }\n : undefined;\n\n return { ref: wrapperDivRef, environment };\n};\n\nexport function isMultiple<Item>(\n props: ComboboxProps<Item> | ComboboxSelectProps<Item>,\n): props is ComboboxMultipleProps<Item> | SelectMultipleProps<Item> {\n return Object.hasOwn(props, \"multiple\") && props.multiple === true;\n}\n","import {\n useState,\n useId,\n useRef,\n useLayoutEffect,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n type MutableRefObject,\n type MouseEventHandler,\n ReactNode,\n} from \"react\";\nimport cx from \"classnames\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\n\nimport { Button } from \"../../Button\";\nimport { Chip, ChipProps } from \"../../Chip\";\nimport { Flex } from \"../../Flex\";\nimport { FieldLabel, FieldLabelProps } from \"../../FieldLabel\";\nimport { Helper } from \"../../../internal/components\";\nimport { TextFieldProps } from \"../../TextField\";\n\nimport styles from \"./SelectTriggerBase.module.scss\";\nimport { DistributiveOmit } from \"../../../types\";\nimport { defaultItemToString } from \"../../Combobox/internal/ComboboxUtils\";\n\ntype PartialChipProps = Partial<Omit<ChipProps, \"icon\" | \"avatar\">> &\n (\n | { icon?: ChipProps[\"icon\"]; avatar?: never }\n | { icon?: never; avatar?: ChipProps[\"avatar\"] }\n );\n\nfunction mergeChipProps(\n ...propSets: (PartialChipProps | Partial<ChipProps>)[]\n): ChipProps {\n const merged = propSets.reduce(\n (acc, props) => ({ ...acc, ...props }),\n {} as Record<string, unknown>,\n );\n\n return merged as ChipProps;\n}\n\nexport type SelectTriggerBaseProps<Item = unknown> = DistributiveOmit<\n TextFieldProps,\n \"showCounter\" | \"prefix\"\n> & {\n /**\n * Should be a positive integer.\n */\n maxRows?: number;\n\n /** Allows Combobox/Select to display custom-colored Chips */\n selectedItemProps?: (item: Item, index: number) => PartialChipProps;\n} & {\n itemToString?: (item: Item) => string;\n removeSelectedItem?: (item: Item) => void;\n disableClearSelection?: boolean;\n selectedItem: Item | null;\n selectedItems: Item[];\n\n inputValue?: string;\n referenceRef?: MutableRefObject<HTMLDivElement | null>;\n} & {\n variant?: \"select\" | \"combobox\";\n onClearButtonClick?: MouseEventHandler<HTMLButtonElement>;\n labelProps?: Partial<FieldLabelProps>;\n inputWrapperProps?: ComponentPropsWithoutRef<\"div\">;\n toggleButtonProps?: ComponentPropsWithoutRef<\"button\">;\n chipProps?: (item: Item, index: number) => PartialChipProps;\n inputProps?: ComponentPropsWithoutRef<\"input\" | \"div\">;\n} & {\n prefix?: string | ReactNode;\n};\n\nexport const SelectTriggerBase = function <Item>({\n className,\n label,\n size,\n error,\n hint,\n description,\n prefix,\n suffix,\n maxRows,\n selectedItemProps = (_item: Item, _index: number): PartialChipProps => ({}),\n disabled,\n readOnly,\n /** ======== */\n disableClearSelection,\n itemToString: itemToStringProp,\n selectedItem,\n selectedItems,\n removeSelectedItem,\n inputValue,\n referenceRef,\n /** ======== */\n variant = \"select\",\n onClearButtonClick,\n labelProps,\n inputWrapperProps = {},\n toggleButtonProps = {},\n inputProps = {},\n chipProps = (_item: Item, _index: number): PartialChipProps => ({}),\n placeholder,\n ...rest\n}: SelectTriggerBaseProps<Item>) {\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n\n const ComboboxTriggerClassNames = cx(styles[\"search-field\"], {\n [styles[\"select\"]]: variant === \"select\",\n });\n\n const noClearButton = disabled || readOnly || disableClearSelection;\n\n const ComboboxInputWrapperClassNames = cx(\n styles[\"input-wrapper\"],\n className\n ? {\n [className]: variant === \"select\",\n }\n : {},\n {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: noClearButton,\n },\n );\n\n const ComboboxInputClassNames = cx(\n styles[\"input\"],\n className\n ? {\n [className]: variant === \"combobox\",\n }\n : {},\n {\n [styles[\"error\"]]: error,\n },\n );\n\n const helperUid = \"helper\" + useId();\n const placeholderUid = \"placeholder\" + useId();\n const ariaDescribedBy = `${helperUid} ${placeholderUid}`;\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n\n const rowsRef = useRef<HTMLDivElement>(null);\n const [stillCalculating, setStillCalculating] = useState<boolean>(false);\n const [collapsedChips, setCollapsedChips] = useState<boolean>(false);\n const [visibleChipsCount, setVisibleChipsCount] = useState<number | null>(\n null,\n );\n const [forceRenderCount, setForceRenderCount] = useState<number>(0);\n\n useLayoutEffect(() => {\n // we only need to do this nonsense if maxRows is set\n if (maxRows === undefined) return;\n\n // 1) Render with no chips collapsed, if it's already just one row, we're done\n // 2) If there is a second row, then render again with best guess at how we should collapse\n // 3) If there is still a second row while collapsed, then render again with one less item\n // 4) Keep going until there is only one row, then /actually/ render\n\n // start calculation loop, set intiial values and force re-render\n if (stillCalculating === false) {\n setStillCalculating(true);\n setCollapsedChips(false);\n setVisibleChipsCount(null);\n setForceRenderCount((x) => x + 1);\n\n // otherwise, calculate the number of rows\n } else if (rowsRef?.current?.children) {\n const children = rowsRef?.current?.children;\n\n const rowData = Array.from(children).reduce(\n (acc, child) => {\n const top = child.getBoundingClientRect().top;\n\n if (!acc.length) {\n return [{ count: 1, top }];\n } else if (acc[acc.length - 1].top === top) {\n return [\n ...acc.slice(0, -1),\n { count: acc[acc.length - 1].count + 1, top },\n ];\n } else if (acc[acc.length - 1].top !== top) {\n return [...acc, { count: 1, top }];\n } else {\n return acc;\n }\n },\n [] as { count: number; top: number }[],\n );\n\n // Call it a day if:\n // We don't have a second row OR\n // We're already hiding everything OR\n // There's only one item selected\n if (\n !rowData[maxRows] ||\n visibleChipsCount === 0 ||\n selectedItems.length === 1\n ) {\n setStillCalculating(false);\n } else {\n setCollapsedChips(true);\n\n // otherwise, either guess how many visible chips we have\n if (visibleChipsCount == null) {\n const firstGuess = Math.max(\n rowData.reduce((sum, row) => sum + row.count, -2),\n 0,\n );\n setVisibleChipsCount(firstGuess);\n\n // or decrease our last guess by 1 and try again\n } else {\n setVisibleChipsCount(visibleChipsCount - 1);\n }\n\n setForceRenderCount((x) => x + 1);\n }\n }\n }, [selectedItems.length, maxRows, forceRenderCount]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const selectedItemsDisplayCount =\n collapsedChips && maxRows != null && visibleChipsCount !== null\n ? visibleChipsCount\n : selectedItems.length;\n\n // TODO: Update this to use a TextField component once we can pass props\n // directly to both the label and the text input\n return (\n <div {...rest} className={ComboboxTriggerClassNames} ref={referenceRef}>\n {label ? (\n <FieldLabel\n {...labelProps}\n className={cx(styles[\"label\"], labelProps?.className)}\n >\n {label}\n </FieldLabel>\n ) : null}\n\n <div\n {...inputWrapperProps}\n className={ComboboxInputWrapperClassNames}\n {...(variant === \"select\"\n ? {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": labelProps?.id,\n }\n : {})}\n >\n <div className={styles[\"buttons-wrapper\"]}>\n {(inputValue || selectedItem || selectedItems.length) &&\n !noClearButton ? (\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n icon={Close}\n className={styles[\"close-button\"]}\n onClick={(e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n onClearButtonClick?.(e);\n }}\n tabIndex={-1}\n />\n </div>\n ) : null}\n\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n {...toggleButtonProps}\n {...(variant === \"select\" ? { tabIndex: -1, inert: \"true\" } : {})}\n className={styles[\"toggle-button\"]}\n aria-label=\"toggle menu\"\n icon={Chevron_Right}\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n />\n </div>\n </div>\n\n <div className={styles[\"prefix-wrapper\"]}>\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n </div>\n\n <div className={styles[\"rows-wrapper\"]} ref={rowsRef}>\n {selectedItems.length && removeSelectedItem != null\n ? selectedItems\n .slice(0, selectedItemsDisplayCount)\n .map((item, index) => {\n return (\n <div\n key={`selected-item-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...mergeChipProps(\n chipProps(item, index),\n selectedItemProps(item, index),\n {\n label: itemToString(item),\n onClose:\n disabled || readOnly\n ? undefined\n : (_e) => {\n removeSelectedItem(item);\n },\n className: styles[\"chip\"],\n title: itemToString(item),\n },\n )}\n />\n </div>\n );\n })\n : null}\n\n {collapsedChips && maxRows != null ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${selectedItems.length - selectedItemsDisplayCount}`}\n className={styles[\"chip\"]}\n title={selectedItems\n .slice(selectedItemsDisplayCount)\n .map((item) => itemToString(item))\n .join(\", \")}\n />\n </div>\n ) : null}\n\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n {variant === \"select\" ? (\n <div\n {...inputProps}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n >\n {selectedItems.length ? null : selectedItem ? (\n itemToString(selectedItem)\n ) : (\n <span\n className={styles[\"fake-placeholder\"]}\n id={placeholderUid}\n >\n {placeholder}\n </span>\n )}\n </div>\n ) : (\n <input\n {...inputProps}\n placeholder={placeholder}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n {...(inputProps[\"aria-expanded\"] != null &&\n inputProps[\"aria-controls\"] != null\n ? {\n role: \"combobox\",\n }\n : {})}\n />\n )}\n\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n </div>\n </div>\n\n {hint || errorMessage || description ? (\n <Helper\n id={helperUid}\n errorMessage={errorMessage}\n hint={hint}\n description={description}\n />\n ) : null}\n </div>\n );\n};\n"],"names":["Close","Chevron_Right"],"mappings":"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"}
1
+ {"version":3,"file":"SelectTriggerBase-C7TLCna1.js","sources":["../src/components/Combobox/internal/ComboboxUtils.ts","../src/components/SelectTrigger/internal/SelectTriggerBase.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport {\n ComboboxMultipleProps,\n ComboboxProps,\n ComboboxSelectProps,\n SelectMultipleProps,\n} from \"../ComboboxTypes\";\n\nexport const ADD_NEW = Symbol.for(\"add-new\");\n\n/**\n * Default function to convert an item to a string representation\n * @template Item - The type of the item\n * @param item - The item to convert to string\n * @returns String representation of the item or empty string if null/undefined\n */\nexport const defaultItemToString = function <Item>(item: Item | null) {\n return item != null ? String(item) : \"\";\n};\n\n/**\n * Default function to generate a unique key for an item\n * @template Item - The type of the item\n * @param item - The item to generate a key for\n * @returns The item itself as the key\n */\nexport const defaultItemToKey = function <Item>(item: Item | null) {\n return item;\n};\n\n/**\n * Hook to handle downshift environment configuration for shadow DOM support\n *\n * Features:\n * - Fixes shadow DOM compatibility issues with downshift\n * - Provides proper document and event listener references\n * - Returns ref for wrapper element and environment configuration\n *\n * @returns Object containing ref and environment configuration\n *\n * @example\n * const { ref, environment } = useDownshiftEnvironment();\n *\n * return (\n * <div ref={ref}>\n * <Combobox environment={environment}>\n * combobox content\n * </Combobox>\n * </div>\n * );\n */\nexport const useDownshiftEnvironment = () => {\n // fix for shadow DOM, see https://gist.github.com/Rendez/1dd55882e9b850dd3990feefc9d6e177\n const wrapperDivRef = useRef<HTMLDivElement | null>(null);\n\n const shadowRoot = wrapperDivRef.current\n ? wrapperDivRef.current.getRootNode()\n : null;\n\n const shadowDocument =\n wrapperDivRef.current && shadowRoot ? shadowRoot.ownerDocument : null;\n\n const environment = shadowDocument\n ? {\n document: shadowDocument,\n addEventListener: shadowDocument.addEventListener.bind(shadowRoot),\n removeEventListener:\n shadowDocument.removeEventListener.bind(shadowRoot),\n Node,\n }\n : undefined;\n\n return { ref: wrapperDivRef, environment };\n};\n\nexport function isMultiple<Item>(\n props: ComboboxProps<Item> | ComboboxSelectProps<Item>,\n): props is ComboboxMultipleProps<Item> | SelectMultipleProps<Item> {\n return Object.hasOwn(props, \"multiple\") && props.multiple === true;\n}\n","import {\n useState,\n useId,\n useRef,\n useLayoutEffect,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n type MutableRefObject,\n type MouseEventHandler,\n ReactNode,\n} from \"react\";\nimport cx from \"classnames\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\n\nimport { Button } from \"../../Button\";\nimport { Chip, ChipProps } from \"../../Chip\";\nimport { Flex } from \"../../Flex\";\nimport { FieldLabel, FieldLabelProps } from \"../../FieldLabel\";\nimport { Helper } from \"../../../internal/components\";\nimport { TextFieldProps } from \"../../TextField\";\n\nimport styles from \"./SelectTriggerBase.module.scss\";\nimport { DistributiveOmit } from \"../../../types\";\nimport { defaultItemToString } from \"../../Combobox/internal/ComboboxUtils\";\n\ntype PartialChipProps = Partial<Omit<ChipProps, \"icon\" | \"avatar\">> &\n (\n | { icon?: ChipProps[\"icon\"]; avatar?: never }\n | { icon?: never; avatar?: ChipProps[\"avatar\"] }\n );\n\nfunction mergeChipProps(\n ...propSets: (PartialChipProps | Partial<ChipProps>)[]\n): ChipProps {\n const merged = propSets.reduce(\n (acc, props) => ({ ...acc, ...props }),\n {} as Record<string, unknown>,\n );\n\n return merged as ChipProps;\n}\n\nexport type SelectTriggerBaseProps<Item = unknown> = DistributiveOmit<\n TextFieldProps,\n \"showCounter\" | \"prefix\"\n> & {\n /**\n * Should be a positive integer.\n */\n maxRows?: number;\n\n /** Allows Combobox/Select to display custom-colored Chips */\n selectedItemProps?: (item: Item, index: number) => PartialChipProps;\n} & {\n itemToString?: (item: Item) => string;\n removeSelectedItem?: (item: Item) => void;\n disableClearSelection?: boolean;\n selectedItem: Item | null;\n selectedItems: Item[];\n\n inputValue?: string;\n referenceRef?: MutableRefObject<HTMLDivElement | null>;\n} & {\n variant?: \"select\" | \"combobox\";\n onClearButtonClick?: MouseEventHandler<HTMLButtonElement>;\n labelProps?: Partial<FieldLabelProps>;\n inputWrapperProps?: ComponentPropsWithoutRef<\"div\">;\n toggleButtonProps?: ComponentPropsWithoutRef<\"button\">;\n chipProps?: (item: Item, index: number) => PartialChipProps;\n inputProps?: ComponentPropsWithoutRef<\"input\" | \"div\">;\n} & {\n prefix?: string | ReactNode;\n};\n\nexport const SelectTriggerBase = function <Item>({\n className,\n label,\n size,\n error,\n hint,\n description,\n prefix,\n suffix,\n maxRows,\n selectedItemProps = (_item: Item, _index: number): PartialChipProps => ({}),\n disabled,\n readOnly,\n /** ======== */\n disableClearSelection,\n itemToString: itemToStringProp,\n selectedItem,\n selectedItems,\n removeSelectedItem,\n inputValue,\n referenceRef,\n /** ======== */\n variant = \"select\",\n onClearButtonClick,\n labelProps,\n inputWrapperProps = {},\n toggleButtonProps = {},\n inputProps = {},\n chipProps = (_item: Item, _index: number): PartialChipProps => ({}),\n placeholder,\n ...rest\n}: SelectTriggerBaseProps<Item>) {\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n\n const ComboboxTriggerClassNames = cx(styles[\"search-field\"], {\n [styles[\"select\"]]: variant === \"select\",\n });\n\n const noClearButton = disabled || readOnly || disableClearSelection;\n\n const ComboboxInputWrapperClassNames = cx(\n styles[\"input-wrapper\"],\n className\n ? {\n [className]: variant === \"select\",\n }\n : {},\n {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: noClearButton,\n },\n );\n\n const ComboboxInputClassNames = cx(\n styles[\"input\"],\n className\n ? {\n [className]: variant === \"combobox\",\n }\n : {},\n {\n [styles[\"error\"]]: error,\n },\n );\n\n const helperUid = \"helper\" + useId();\n const placeholderUid = \"placeholder\" + useId();\n const ariaDescribedBy = `${helperUid} ${placeholderUid}`;\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n\n const rowsRef = useRef<HTMLDivElement>(null);\n const [stillCalculating, setStillCalculating] = useState<boolean>(false);\n const [collapsedChips, setCollapsedChips] = useState<boolean>(false);\n const [visibleChipsCount, setVisibleChipsCount] = useState<number | null>(\n null,\n );\n const [forceRenderCount, setForceRenderCount] = useState<number>(0);\n\n useLayoutEffect(() => {\n // we only need to do this nonsense if maxRows is set\n if (maxRows === undefined) return;\n\n // 1) Render with no chips collapsed, if it's already just one row, we're done\n // 2) If there is a second row, then render again with best guess at how we should collapse\n // 3) If there is still a second row while collapsed, then render again with one less item\n // 4) Keep going until there is only one row, then /actually/ render\n\n // start calculation loop, set intiial values and force re-render\n if (stillCalculating === false) {\n setStillCalculating(true);\n setCollapsedChips(false);\n setVisibleChipsCount(null);\n setForceRenderCount((x) => x + 1);\n\n // otherwise, calculate the number of rows\n } else if (rowsRef?.current?.children) {\n const children = rowsRef?.current?.children;\n\n const rowData = Array.from(children).reduce(\n (acc, child) => {\n const top = child.getBoundingClientRect().top;\n\n if (!acc.length) {\n return [{ count: 1, top }];\n } else if (acc[acc.length - 1].top === top) {\n return [\n ...acc.slice(0, -1),\n { count: acc[acc.length - 1].count + 1, top },\n ];\n } else if (acc[acc.length - 1].top !== top) {\n return [...acc, { count: 1, top }];\n } else {\n return acc;\n }\n },\n [] as { count: number; top: number }[],\n );\n\n // Call it a day if:\n // We don't have a second row OR\n // We're already hiding everything OR\n // There's only one item selected\n if (\n !rowData[maxRows] ||\n visibleChipsCount === 0 ||\n selectedItems.length === 1\n ) {\n setStillCalculating(false);\n } else {\n setCollapsedChips(true);\n\n // otherwise, either guess how many visible chips we have\n if (visibleChipsCount == null) {\n const firstGuess = Math.max(\n rowData.reduce((sum, row) => sum + row.count, -2),\n 0,\n );\n setVisibleChipsCount(firstGuess);\n\n // or decrease our last guess by 1 and try again\n } else {\n setVisibleChipsCount(visibleChipsCount - 1);\n }\n\n setForceRenderCount((x) => x + 1);\n }\n }\n }, [selectedItems.length, maxRows, forceRenderCount]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const selectedItemsDisplayCount =\n collapsedChips && maxRows != null && visibleChipsCount !== null\n ? visibleChipsCount\n : selectedItems.length;\n\n // TODO: Update this to use a TextField component once we can pass props\n // directly to both the label and the text input\n return (\n <div {...rest} className={ComboboxTriggerClassNames} ref={referenceRef}>\n {label ? (\n <FieldLabel\n {...labelProps}\n className={cx(styles[\"label\"], labelProps?.className)}\n >\n {label}\n </FieldLabel>\n ) : null}\n\n <div\n {...inputWrapperProps}\n className={ComboboxInputWrapperClassNames}\n {...(variant === \"select\"\n ? {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": labelProps?.id,\n }\n : {})}\n >\n <div className={styles[\"buttons-wrapper\"]}>\n {(inputValue || selectedItem || selectedItems.length) &&\n !noClearButton ? (\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n icon={Close}\n className={styles[\"close-button\"]}\n onClick={(e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n onClearButtonClick?.(e);\n }}\n tabIndex={-1}\n />\n </div>\n ) : null}\n\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n {...toggleButtonProps}\n {...(variant === \"select\" ? { tabIndex: -1, inert: \"true\" } : {})}\n className={styles[\"toggle-button\"]}\n aria-label=\"toggle menu\"\n icon={Chevron_Right}\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n />\n </div>\n </div>\n\n <div className={styles[\"prefix-wrapper\"]}>\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n </div>\n\n <div className={styles[\"rows-wrapper\"]} ref={rowsRef}>\n {selectedItems.length && removeSelectedItem != null\n ? selectedItems\n .slice(0, selectedItemsDisplayCount)\n .map((item, index) => {\n return (\n <div\n key={`selected-item-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...mergeChipProps(\n chipProps(item, index),\n selectedItemProps(item, index),\n {\n label: itemToString(item),\n onClose:\n disabled || readOnly\n ? undefined\n : (_e) => {\n removeSelectedItem(item);\n },\n className: styles[\"chip\"],\n title: itemToString(item),\n },\n )}\n />\n </div>\n );\n })\n : null}\n\n {collapsedChips && maxRows != null ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${selectedItems.length - selectedItemsDisplayCount}`}\n className={styles[\"chip\"]}\n title={selectedItems\n .slice(selectedItemsDisplayCount)\n .map((item) => itemToString(item))\n .join(\", \")}\n />\n </div>\n ) : null}\n\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n {variant === \"select\" ? (\n <div\n {...inputProps}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n >\n {selectedItems.length ? null : selectedItem ? (\n itemToString(selectedItem)\n ) : (\n <span\n className={styles[\"fake-placeholder\"]}\n id={placeholderUid}\n >\n {placeholder}\n </span>\n )}\n </div>\n ) : (\n <input\n {...inputProps}\n placeholder={placeholder}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n {...(inputProps[\"aria-expanded\"] != null &&\n inputProps[\"aria-controls\"] != null\n ? {\n role: \"combobox\",\n }\n : {})}\n />\n )}\n\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n </div>\n </div>\n\n {hint || errorMessage || description ? (\n <Helper\n id={helperUid}\n errorMessage={errorMessage}\n hint={hint}\n description={description}\n />\n ) : null}\n </div>\n );\n};\n"],"names":["Close","Chevron_Right"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { c as cx } from './index-tZvMCc77.js';
4
4
  import { S as SvgKeyboardArrowDown } from './keyboard_arrow_down-C8WQ38p1.js';
5
5
  import { I as Icon } from './Icon-D8SPKeO4.js';
6
6
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DjD5IMh0.js';
7
- import { u as useMergeRefs } from './useMergeRefs-Bde85AWI.js';
7
+ import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
8
8
 
9
9
  import './SideNav.css';const sidenav = "_sidenav_1n03v_128";
10
10
  const root = "_root_1n03v_129";
@@ -136,7 +136,7 @@ const defaultContext = {
136
136
  const SideNavContext$1 = createContext(defaultContext);
137
137
  const useSideNavContext = () => useContext(SideNavContext$1);
138
138
  const SideNavProvider = ({ children }) => {
139
- const [location, setLocation] = useState(window.location.pathname);
139
+ const [location, setLocation] = useState(window?.location.pathname);
140
140
  const sideNavContext = {
141
141
  location,
142
142
  setLocation
@@ -443,4 +443,4 @@ const SideNav = Object.assign(SideNavElement, {
443
443
  });
444
444
 
445
445
  export { SideNav as S, SideNavLink as a, SideNavCollapsible as b, SideNavGroup as c };
446
- //# sourceMappingURL=SideNav-CBAzYyML.js.map
446
+ //# sourceMappingURL=SideNav-nqq5sAwz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideNav-nqq5sAwz.js","sources":["../src/components/SideNav/internal/utils.ts","../src/components/SideNav/internal/SideNavLink.tsx","../src/components/SideNav/internal/SideNavProvider.tsx","../src/components/SideNav/SideNavLink.tsx","../src/components/SideNav/SideNavCollapsible.tsx","../src/components/SideNav/SideNavGroup.tsx","../src/components/SideNav/SideNav.tsx"],"sourcesContent":["import { KeyboardEvent, RefObject } from \"react\";\nimport { SideNavContextProps } from \"../SideNav\";\n\n/**\n * Handles keyboard navigation for SideNav components using arrow keys.\n *\n * This function manages focus movement between navigable elements in a SideNav,\n * providing circular navigation (wrapping from last to first and vice versa).\n * It updates tabindex attributes to maintain proper focus management and\n * prevents default browser behavior for arrow key navigation.\n *\n * @param e - The keyboard event that triggered the navigation\n * @param links - NodeList of all navigable elements in the SideNav\n * @param current - Ref object pointing to the currently focused element\n * @returns void\n */\nexport const sideNavKeyboardNavigation = (\n e: KeyboardEvent<HTMLAnchorElement | HTMLButtonElement>,\n links: SideNavContextProps[\"links\"],\n current: RefObject<HTMLAnchorElement | HTMLButtonElement>,\n) => {\n const currentIndex = Array.prototype.indexOf.call(links, current.current);\n\n switch (e.key) {\n case \"ArrowDown\":\n if (!links) return;\n e.preventDefault();\n links[currentIndex].setAttribute(\"tabindex\", \"-1\");\n if (currentIndex === links.length - 1) {\n links[0].setAttribute(\"tabindex\", \"0\");\n (links[0] as HTMLAnchorElement | HTMLButtonElement).focus();\n break;\n }\n links[currentIndex + 1].setAttribute(\"tabindex\", \"0\");\n (\n links[currentIndex + 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!links) return;\n links[currentIndex].setAttribute(\"tabindex\", \"-1\");\n if (currentIndex === 0) {\n links[links.length - 1].setAttribute(\"tabindex\", \"0\");\n (\n links[links.length - 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n }\n links[currentIndex - 1].setAttribute(\"tabindex\", \"0\");\n (\n links[currentIndex - 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n default:\n break;\n }\n};\n","import {\n ComponentPropsWithoutRef,\n KeyboardEvent,\n MouseEvent,\n forwardRef,\n useRef,\n useEffect,\n} from \"react\";\nimport styles from \"../SideNav.module.scss\";\nimport { sideNavKeyboardNavigation } from \"./utils\";\nimport { useSideNav } from \"../SideNav\";\n\n/**\n * Props for the SideNavLink component\n * @extends Omit<ComponentPropsWithoutRef<\"a\">, \"id\" | \"onClick\" | \"onKeyDown\" | \"onKeyUp\">\n */\nexport type SideNavLinkProps = Omit<\n ComponentPropsWithoutRef<\"a\">,\n \"id\" | \"onClick\" | \"onKeyDown\" | \"onKeyUp\"\n> & {\n /**\n * Unique identifier for the navigation link\n */\n id: string;\n /**\n * When true, marks the link as the current active page\n */\n active?: boolean;\n /**\n * When true, disables the link and prevents interaction\n */\n disabled?: boolean;\n /**\n * Function called when the link is clicked\n */\n onClick?: (\n e: MouseEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n /**\n * Function called when a key is pressed down on the link\n */\n onKeyDown?: (\n e: KeyboardEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n /**\n * Function called when a key is released on the link\n */\n onKeyUp?: (\n e: KeyboardEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n};\n\n/**\n * SideNavLink component for individual navigation links within a SideNav.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n * - Automatic active state tracking through context\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n */\nexport const SideNavLink = forwardRef<HTMLLIElement, SideNavLinkProps>(\n (props, ref) => {\n const {\n className,\n children,\n href,\n id,\n active,\n onClick,\n onKeyDown,\n onKeyUp,\n style,\n disabled,\n ...rest\n } = props;\n const { links } = useSideNav();\n\n const linkRef = useRef<HTMLAnchorElement>(null);\n const { activeIds, addActiveId, removeActiveId } = useSideNav();\n\n useEffect(() => {\n if (!activeIds.has(id) && active) {\n addActiveId(id);\n return;\n }\n if (activeIds.has(id) && !active) {\n removeActiveId(id);\n }\n }, [active, activeIds]);\n\n function onKeyDownHandler(e: KeyboardEvent<HTMLAnchorElement>) {\n sideNavKeyboardNavigation(e, links, linkRef);\n onKeyDown?.(e, id);\n }\n\n function onKeyUpHandler(e: KeyboardEvent<HTMLAnchorElement>) {\n if (disabled) return;\n if (e.code === \"Space\" || e.code === \"Enter\") {\n e.preventDefault();\n if (onClick) {\n e.currentTarget.click();\n }\n }\n\n onKeyUp?.(e, id);\n }\n\n function onClickHandler(e: MouseEvent<HTMLAnchorElement>) {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n // find current item that has tabindex 0\n const current = Array.prototype.slice\n .call(links)\n .filter((child) => (child as HTMLElement).tabIndex === 0)[0];\n\n // remove above from tabbable\n if (current) current.setAttribute(\"tabindex\", \"-1\");\n\n // make label button tabbable\n linkRef.current?.setAttribute(\"tabindex\", \"0\");\n linkRef.current?.focus();\n\n onClick?.(e, id);\n }\n\n return (\n <li className={className} data-anv=\"sidenav-link\" style={style} ref={ref}>\n <a\n className={styles[\"sidenav-link\"]}\n aria-current={active ? \"page\" : undefined}\n href={href}\n ref={linkRef}\n onClick={onClickHandler}\n onKeyDown={onKeyDownHandler}\n onKeyUp={onKeyUpHandler}\n id={id}\n aria-disabled={disabled}\n tabIndex={active ? 0 : -1}\n {...rest}\n >\n {children}\n </a>\n </li>\n );\n },\n);\n\nSideNavLink.displayName = \"SideNavLink\";\n","import { PropsWithChildren, createContext, useContext, useState } from \"react\";\n\n/**\n * Interface for the side navigation context\n */\ninterface ISideNavContext {\n /**\n * Current location pathname for routing\n */\n location: string;\n /**\n * Function to update the current location\n */\n setLocation: (location: string) => void;\n}\n\nconst defaultContext = {\n location: \"\",\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n setLocation: (_location: string) => {},\n};\n\nconst SideNavContext: React.Context<ISideNavContext> =\n createContext(defaultContext);\n\n/**\n * Custom hook for accessing the SideNav context.\n * @returns The SideNav context with location and setLocation\n */\n// eslint-disable-next-line react-refresh/only-export-components\nexport const useSideNavContext = () => useContext(SideNavContext);\n\n/**\n * SideNavProvider component for managing routing state in SideNav components.\n *\n * Features:\n * - Provides routing context for SideNav components\n * - Manages current location state\n * - Enables client-side routing without page reloads\n * - Integrates with browser history API\n * - Context provider for child components\n *\n * @example\n * <SideNavProvider>\n * <SideNav>\n * <SideNav.Link pathname=\"/intro\">Introduction</SideNav.Link>\n * </SideNav>\n * </SideNavProvider>\n */\nexport const SideNavProvider = ({ children }: PropsWithChildren) => {\n const [location, setLocation] = useState(window?.location.pathname);\n\n const sideNavContext = {\n location,\n setLocation,\n };\n\n return (\n <SideNavContext.Provider value={sideNavContext}>\n {children}\n </SideNavContext.Provider>\n );\n};\n","import {\n SideNavLinkProps as CoreSideNavLinkProps,\n SideNavLink as CoreSideNavLink,\n} from \"./internal/SideNavLink\";\nimport { Ref, forwardRef, useCallback } from \"react\";\nimport { useSideNavContext } from \"./internal/SideNavProvider\";\n\n/**\n * Props for SideNavLink with routing support\n * @property {string} [href] - URL for the link (used when pathname is not provided)\n * @property {string} pathname - Pathname for client-side routing\n * @property {string} [search] - Optional search parameters for the URL\n * @property {boolean} [active] - When true, marks the link as the current active page\n * @property {boolean} [disabled] - When true, disables the link and prevents interaction\n * @extends CoreSideNavLinkProps\n */\ntype SideNavLinkWithRoutingProps = CoreSideNavLinkProps & {\n /**\n * Pathname for client-side routing\n */\n pathname: string;\n /**\n * Optional search parameters for the URL\n */\n search?: string;\n};\n\n/**\n * SideNavLink component with routing support\n */\nconst SideNavLinkWithRouting = forwardRef(\n (\n { href, pathname, search, onClick, ...rest }: SideNavLinkWithRoutingProps,\n ref: Ref<HTMLLIElement>,\n ) => {\n const { location, setLocation } = useSideNavContext();\n const to = pathname + (search ?? \"\");\n\n const handleClick = useCallback(\n (...args: Parameters<NonNullable<CoreSideNavLinkProps[\"onClick\"]>>) => {\n args[0].preventDefault();\n history.pushState(null, \"\", to); // eslint-disable-line no-restricted-globals\n setLocation(to);\n return onClick?.(...args);\n },\n [onClick, to, setLocation],\n );\n\n return (\n <CoreSideNavLink\n href={pathname != null ? to : href}\n active={pathname === location}\n onClick={pathname != null ? handleClick : onClick}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nSideNavLinkWithRouting.displayName = CoreSideNavLink.displayName;\n\nexport type SideNavLinkProps =\n | CoreSideNavLinkProps\n | SideNavLinkWithRoutingProps;\n\n/**\n * SideNavLink component for individual navigation links within a SideNav.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n * - Automatic active state tracking through context\n * - Client-side routing support with pathname prop\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n *\n * <SideNav.Link id=\"intro\" pathname=\"/intro\" active>\n * Introduction (with routing)\n * </SideNav.Link>\n */\nexport const SideNavLink = forwardRef(\n (rest: SideNavLinkProps, ref: Ref<HTMLLIElement>) => {\n if (\"pathname\" in rest) {\n return <SideNavLinkWithRouting ref={ref} {...rest} />;\n } else {\n return <CoreSideNavLink ref={ref} {...rest} />;\n }\n },\n);\nSideNavLink.displayName = CoreSideNavLink.displayName;\n","import cx from \"classnames\";\nimport {\n Children,\n ComponentPropsWithoutRef,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n forwardRef,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styles from \"./SideNav.module.scss\";\nimport ArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport { Icon } from \"../Icon\";\nimport { sideNavKeyboardNavigation } from \"./internal/utils\";\nimport { useSideNav } from \"./SideNav\";\n\n/**\n * Props for the SideNavCollapsible component\n * @extends Omit<ComponentPropsWithoutRef<\"li\">, \"onClick\">\n */\nexport type SideNavCollapsibleProps = Omit<\n ComponentPropsWithoutRef<\"li\">,\n \"onClick\"\n> & {\n /**\n * The label text displayed for the collapsible section\n */\n label: string;\n /**\n * Function called when the collapsible button is clicked\n */\n onClick?: ComponentPropsWithoutRef<\"button\">[\"onClick\"];\n /**\n * Function called when a key is pressed on the collapsible button\n */\n onKeyDown?: ComponentPropsWithoutRef<\"button\">[\"onKeyDown\"];\n /**\n * Initial expansion state for uncontrolled usage\n * @default false\n */\n defaultExpanded?: boolean;\n /**\n * Controlled expansion state\n */\n expanded?: boolean;\n};\n\n/**\n * SideNavCollapsible component for expandable navigation sections within a SideNav.\n *\n * Features:\n * - Expandable/collapsible navigation sections\n * - Controlled and uncontrolled expansion states\n * - Keyboard navigation with arrow keys for expansion\n * - Automatic expansion when child links are active\n * - Accessible with proper ARIA expanded states\n * - Visual indicators for active children\n * - Integration with SideNav keyboard navigation\n *\n * @example\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n */\nexport const SideNavCollapsible = forwardRef<\n HTMLLIElement,\n SideNavCollapsibleProps\n>((props, ref) => {\n const {\n className,\n children,\n label,\n onClick,\n onKeyDown,\n defaultExpanded = false,\n expanded: expandedControlled,\n ...rest\n } = props;\n const [expanded, setExpanded] = useState<boolean>(defaultExpanded);\n const [hasSelected, setHasSelected] = useState<boolean>(false);\n const sideNavGroupLabelRef = useRef<HTMLButtonElement>(null);\n const groupRef = useRef<HTMLUListElement>(null);\n const sideNavGroupClassNames = cx(styles[\"sidenav-collapsible\"], className);\n const { links, reCalculateLinks } = useSideNav();\n const groupId = useId();\n\n const setExpandedUncontrolled = (newState?: boolean) => {\n if (expandedControlled === undefined)\n setExpanded((prev) => {\n if (newState !== undefined) return newState;\n return !prev;\n });\n };\n\n useEffect(() => {\n if (expandedControlled !== undefined) {\n setExpanded(expandedControlled);\n }\n }, [expandedControlled]);\n const { activeIds } = useSideNav();\n\n const childIds: string[] = useMemo(\n () =>\n Children.map(children, (child) => (child as ReactElement).props)?.map(\n (item) => item.id,\n ) || [],\n [Children],\n );\n\n function handleOnClick(e: MouseEvent<HTMLButtonElement>) {\n setExpandedUncontrolled();\n setTimeout(() => reCalculateLinks(), 0);\n\n // find current item that has tabindex 0\n const current = Array.prototype.slice\n .call(links)\n .filter((child) => (child as HTMLElement).tabIndex === 0)[0];\n\n // remove above from tabbable\n if (current) current.setAttribute(\"tabindex\", \"-1\");\n\n // make label button tabbable\n sideNavGroupLabelRef.current?.setAttribute(\"tabindex\", \"0\");\n sideNavGroupLabelRef.current?.focus();\n onClick?.(e);\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLButtonElement>) {\n sideNavKeyboardNavigation(e, links, sideNavGroupLabelRef);\n switch (e.key) {\n case \"ArrowRight\":\n setExpanded(true);\n setTimeout(() => reCalculateLinks(), 0);\n break;\n case \"ArrowLeft\":\n setExpanded(false);\n setTimeout(() => reCalculateLinks(), 0);\n break;\n\n default:\n break;\n }\n onKeyDown?.(e);\n }\n\n useLayoutEffect(() => {\n const hasActiveChildren = childIds.some((id) => activeIds.has(id));\n if (hasActiveChildren) {\n setExpandedUncontrolled(true);\n setHasSelected(true);\n setTimeout(() => {\n const selectedChild =\n groupRef.current?.querySelector(`[active='true']`);\n selectedChild?.setAttribute(\"tabindex\", \"0\");\n reCalculateLinks();\n }, 0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!activeIds.size || !childIds.some((id) => activeIds.has(id))) {\n setHasSelected(false);\n return;\n }\n setHasSelected(true);\n }, [activeIds]);\n\n return (\n <li\n ref={ref}\n data-anv=\"sidenav-collapsible\"\n {...rest}\n className={sideNavGroupClassNames}\n >\n <button\n aria-expanded={expanded}\n aria-controls={groupId}\n type=\"button\"\n tabIndex={-1}\n onClick={handleOnClick}\n ref={sideNavGroupLabelRef}\n className={cx(styles[\"sidenav-link\"], {\n [styles[\"has-indicator\"]]: hasSelected && !expanded,\n })}\n onKeyDown={handleKeyDown}\n >\n {label}\n <Icon className={styles[\"arrow\"]} inherit svg={ArrowDown} aria-hidden />\n </button>\n <ul\n id={groupId}\n ref={groupRef}\n className={cx(styles[\"group\"], !expanded && styles.hidden)}\n >\n {children}\n </ul>\n </li>\n );\n});\n\nSideNavCollapsible.displayName = \"SideNavCollapsible\";\n","import { ComponentPropsWithoutRef, forwardRef, useId } from \"react\";\nimport styles from \"./SideNav.module.scss\";\nimport cx from \"classnames\";\n\n/**\n * Props for the SideNavGroup component\n * @extends ComponentPropsWithoutRef<\"li\">\n */\nexport type SideNavGroupProps = ComponentPropsWithoutRef<\"li\"> & {\n /**\n * The label text displayed for the navigation group\n */\n label: string;\n};\n\n/**\n * SideNavGroup component for grouping related navigation links within a SideNav.\n *\n * Features:\n * - Groups related navigation links with labels\n * - Accessible with proper ARIA labeling\n * - Semantic grouping for screen readers\n * - Consistent styling and spacing\n * - Unique ID generation for accessibility\n *\n * @example\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\">\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n */\nexport const SideNavGroup = forwardRef<HTMLLIElement, SideNavGroupProps>(\n (props, ref) => {\n const { children, label, ...rest } = props;\n\n const sideNavGroupClassNames = cx(styles[\"sidenav-group\"]);\n\n const groupLabelId = useId();\n return (\n <li ref={ref} data-anv=\"sidenav-group\" {...rest}>\n <label id={groupLabelId} className={styles[\"group-label\"]}>\n {label}\n </label>\n <ul aria-labelledby={groupLabelId} className={sideNavGroupClassNames}>\n {children}\n </ul>\n </li>\n );\n },\n);\n\nSideNavGroup.displayName = \"SideNavGroup\";\n","import {\n ComponentPropsWithoutRef,\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport styles from \"./SideNav.module.scss\";\nimport { SideNavLink } from \"./SideNavLink\";\nimport { SideNavCollapsible } from \"./SideNavCollapsible\";\nimport { SideNavGroup } from \"./SideNavGroup\";\nimport { SideNavProvider } from \"./internal/SideNavProvider\";\nimport { DataTrackingId } from \"../../types\";\n\n/**\n * Props for the SideNav component\n * @extends ComponentPropsWithoutRef<\"nav\">\n * @extends LayoutUtilProps\n */\nexport type SideNavProps = ComponentPropsWithoutRef<\"nav\"> &\n LayoutUtilProps &\n DataTrackingId;\n\n/**\n * Context props for the SideNav component\n */\nexport type SideNavContextProps = {\n /**\n * List of navigable elements in the side navigation\n */\n links: NodeListOf<Element> | undefined;\n /**\n * Function to recalculate the list of navigable links\n */\n reCalculateLinks: () => void;\n /**\n * Set of currently active link IDs\n */\n activeIds: Set<string>;\n /**\n * Function to add an ID to the active set\n */\n addActiveId: (id: string) => void;\n /**\n * Function to remove an ID from the active set\n */\n removeActiveId: (id: string) => void;\n};\n\nexport const SideNavContext = createContext<SideNavContextProps | null>(null);\n\nconst SideNavElement = forwardRef<HTMLElement, SideNavProps>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const [activeIds, setActiveIds] = useState<Set<string>>(new Set());\n const { className, children, style, ...rest } = componentProps;\n\n const addActiveId = (id: string) => {\n if (activeIds.has(id)) return;\n const newIds = new Set(activeIds);\n newIds.add(id);\n setActiveIds(newIds);\n };\n\n const removeActiveId = (id: string) => {\n if (!activeIds.has(id)) return;\n const newIds = new Set(activeIds);\n newIds.delete(id);\n setActiveIds(newIds);\n };\n\n const sideNavRef = useRef<HTMLElement>(null);\n const [links, setLinks] = useState<SideNavContextProps[\"links\"]>();\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n function reCalculateLinks() {\n if (sideNavRef.current) {\n const items = sideNavRef.current.querySelectorAll(\n \"li[data-anv='sidenav-link'] a:not([aria-disabled='true']), li[data-anv='sidenav-collapsible'] button[aria-expanded]:not([aria-disabled='true'])\",\n );\n setLinks(items);\n }\n }\n\n useEffect(() => {\n reCalculateLinks();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const sidenavClassNames = cx([styles[\"sidenav\"]], className);\n\n const value = useMemo(\n () => ({\n links,\n reCalculateLinks,\n activeIds,\n addActiveId,\n removeActiveId,\n }),\n [links, activeIds, addActiveId, removeActiveId, reCalculateLinks],\n );\n return (\n <SideNavProvider>\n <SideNavContext.Provider value={value}>\n <nav\n ref={useMergeRefs([sideNavRef, ref])}\n className={sidenavClassNames}\n style={styleCombined}\n data-anv=\"sidenav\"\n {...rest}\n >\n <ul className={styles[\"root\"]}>{children}</ul>\n </nav>\n </SideNavContext.Provider>\n </SideNavProvider>\n );\n});\n\n/**\n * Custom hook for accessing the SideNav context.\n * @returns The SideNav context with links, activeIds, and utility functions\n * @throws Error if used outside of a SideNav component\n */\nexport const useSideNav = () => {\n const context = useContext(SideNavContext);\n\n if (context == null) {\n throw new Error(\"useSideNav must be wrapped in <SideNav />\");\n }\n\n return context;\n};\n\nSideNavElement.displayName = \"SideNav\";\n\n/**\n * SideNav component for creating hierarchical navigation menus.\n *\n * Features:\n * - Hierarchical navigation structure with links, groups, and collapsible sections\n * - Keyboard navigation support with arrow keys and focus management\n * - Active state tracking for current page/section\n * - Accessible with proper ARIA roles and labels\n * - Automatic link recalculation for dynamic content\n * - Context provider for child components\n * - Layout utility props for positioning and spacing\n *\n * @example\n * <SideNav>\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n * </SideNav>\n */\nexport const SideNav = Object.assign(SideNavElement, {\n /**\n * SideNavLink component for individual navigation links.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n */\n Link: SideNavLink,\n /**\n * SideNavCollapsible component for expandable navigation sections.\n *\n * Features:\n * - Expandable/collapsible navigation sections\n * - Controlled and uncontrolled expansion states\n * - Keyboard navigation with arrow keys for expansion\n * - Automatic expansion when child links are active\n * - Accessible with proper ARIA expanded states\n * - Visual indicators for active children\n *\n * @example\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n */\n Collapsible: SideNavCollapsible,\n /**\n * SideNavGroup component for grouping related navigation links.\n *\n * Features:\n * - Groups related navigation links with labels\n * - Accessible with proper ARIA labeling\n * - Semantic grouping for screen readers\n * - Consistent styling and spacing\n *\n * @example\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\">\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n */\n Group: SideNavGroup,\n});\n"],"names":["SideNavLink","SideNavContext","CoreSideNavLink","ArrowDown"],"mappings":"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"}
package/dist/SideNav.js CHANGED
@@ -1,2 +1,2 @@
1
- export { S as SideNav, b as SideNavCollapsible, c as SideNavGroup, a as SideNavLink, S as default } from './SideNav-CBAzYyML.js';
1
+ export { S as SideNav, b as SideNavCollapsible, c as SideNavGroup, a as SideNavLink, S as default } from './SideNav-nqq5sAwz.js';
2
2
  //# sourceMappingURL=SideNav.js.map