@servicetitan/anvil2 2.7.0 → 2.7.1

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 (238) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/{Avatar-CCnbKkCm.js → Avatar-BckUfs1N.js} +48 -46
  3. package/dist/{Avatar-CCnbKkCm.js.map → Avatar-BckUfs1N.js.map} +1 -1
  4. package/dist/Avatar-ChybzixS.js +35 -0
  5. package/dist/Avatar-ChybzixS.js.map +1 -0
  6. package/dist/Avatar.js +2 -2
  7. package/dist/Breadcrumbs-C_WK9Yul.js +107 -0
  8. package/dist/Breadcrumbs-C_WK9Yul.js.map +1 -0
  9. package/dist/Breadcrumbs.js +1 -1
  10. package/dist/{Calendar-C1U2npPP.js → Calendar-BTStJPV1.js} +2 -2
  11. package/dist/{Calendar-C1U2npPP.js.map → Calendar-BTStJPV1.js.map} +1 -1
  12. package/dist/{Calendar-SGlTt-bs.js → Calendar-Frpv5rRY.js} +129 -118
  13. package/dist/Calendar-Frpv5rRY.js.map +1 -0
  14. package/dist/Calendar.css +51 -51
  15. package/dist/Calendar.js +2 -2
  16. package/dist/Checkbox-CTZdZym4.js +52 -0
  17. package/dist/Checkbox-CTZdZym4.js.map +1 -0
  18. package/dist/{Checkbox-CtKUNeyu.js → Checkbox-Drgai_lS.js} +3 -3
  19. package/dist/{Checkbox-CtKUNeyu.js.map → Checkbox-Drgai_lS.js.map} +1 -1
  20. package/dist/Checkbox.js +1 -1
  21. package/dist/{Chip-DjTAR0va.js → Chip-CVyEctAz.js} +2 -2
  22. package/dist/{Chip-DjTAR0va.js.map → Chip-CVyEctAz.js.map} +1 -1
  23. package/dist/Chip.js +1 -1
  24. package/dist/{Combobox-By8-34bw.js → Combobox-BRtfrYyZ.js} +185 -182
  25. package/dist/{Combobox-By8-34bw.js.map → Combobox-BRtfrYyZ.js.map} +1 -1
  26. package/dist/Combobox.js +1 -1
  27. package/dist/{DataTable-BYOS6icI.js → DataTable-BmVPjMMg.js} +667 -622
  28. package/dist/DataTable-BmVPjMMg.js.map +1 -0
  29. package/dist/{DateFieldRange-C8Uzrboc.js → DateFieldRange-D9DtlkSQ.js} +19 -5
  30. package/dist/DateFieldRange-D9DtlkSQ.js.map +1 -0
  31. package/dist/DateFieldRange.js +1 -1
  32. package/dist/{DateFieldSingle-DrhLIjlK.js → DateFieldSingle-CkdeCUJv.js} +7 -7
  33. package/dist/{DateFieldSingle-DrhLIjlK.js.map → DateFieldSingle-CkdeCUJv.js.map} +1 -1
  34. package/dist/DateFieldSingle.js +1 -1
  35. package/dist/{DateFieldYearless-DbivK4Hm.js → DateFieldYearless-b81ZcYdp.js} +3 -3
  36. package/dist/{DateFieldYearless-DbivK4Hm.js.map → DateFieldYearless-b81ZcYdp.js.map} +1 -1
  37. package/dist/DateFieldYearless.js +1 -1
  38. package/dist/{DateFieldYearlessRange-BEqJe4Uf.js → DateFieldYearlessRange-ClAFzIDD.js} +3 -3
  39. package/dist/{DateFieldYearlessRange-BEqJe4Uf.js.map → DateFieldYearlessRange-ClAFzIDD.js.map} +1 -1
  40. package/dist/DateFieldYearlessRange.js +1 -1
  41. package/dist/{DaysOfTheWeek-BR32AA32.js → DaysOfTheWeek-2Zeh79oR.js} +3 -3
  42. package/dist/{DaysOfTheWeek-BR32AA32.js.map → DaysOfTheWeek-2Zeh79oR.js.map} +1 -1
  43. package/dist/DaysOfTheWeek.js +1 -1
  44. package/dist/{Details-Dxq_v3Qg.js → Details-CZOIpNP_.js} +8 -8
  45. package/dist/Details-CZOIpNP_.js.map +1 -0
  46. package/dist/Details.js +1 -1
  47. package/dist/{Dialog-CGhwkwvq.js → Dialog-CloZWa1Q.js} +71 -71
  48. package/dist/Dialog-CloZWa1Q.js.map +1 -0
  49. package/dist/Dialog.js +1 -1
  50. package/dist/{Drawer-DA4iAgt-.js → Drawer-CfkoH081.js} +84 -84
  51. package/dist/Drawer-CfkoH081.js.map +1 -0
  52. package/dist/Drawer.js +1 -1
  53. package/dist/DrillDown.js +1 -1
  54. package/dist/{FieldLabel-DbMosKtd.js → FieldLabel-CQ5QGTVq.js} +2 -2
  55. package/dist/{FieldLabel-DbMosKtd.js.map → FieldLabel-CQ5QGTVq.js.map} +1 -1
  56. package/dist/FieldLabel.js +1 -1
  57. package/dist/Grid-DeYIx5k4.js +149 -0
  58. package/dist/Grid-DeYIx5k4.js.map +1 -0
  59. package/dist/Grid.js +1 -1
  60. package/dist/{InputMask-HjaNCb73.js → InputMask-CI4Q5UwG.js} +3 -3
  61. package/dist/{InputMask-HjaNCb73.js.map → InputMask-CI4Q5UwG.js.map} +1 -1
  62. package/dist/InputMask.js +1 -1
  63. package/dist/{Layout-VfhlilMG.js → Layout-CISAxILX.js} +34 -33
  64. package/dist/Layout-CISAxILX.js.map +1 -0
  65. package/dist/Layout.js +1 -1
  66. package/dist/List--KhCpjZn.js +103 -0
  67. package/dist/List--KhCpjZn.js.map +1 -0
  68. package/dist/List.js +1 -1
  69. package/dist/{ListView-mujFK6mQ.js → ListView-DAbBuss4.js} +6 -6
  70. package/dist/ListView-DAbBuss4.js.map +1 -0
  71. package/dist/ListView.js +1 -1
  72. package/dist/{Listbox-BtAgBDRS.js → Listbox-D_T55BFX.js} +5 -4
  73. package/dist/Listbox-D_T55BFX.js.map +1 -0
  74. package/dist/Listbox.js +1 -1
  75. package/dist/{Menu-BXsmCP20.js → Menu-CRoJYJ53.js} +366 -365
  76. package/dist/Menu-CRoJYJ53.js.map +1 -0
  77. package/dist/Menu.js +1 -1
  78. package/dist/MultiSelectField.js +1 -1
  79. package/dist/{MultiSelectFieldSync-DGpGgu8q.js → MultiSelectFieldSync-CSOitvtu.js} +5 -5
  80. package/dist/{MultiSelectFieldSync-DGpGgu8q.js.map → MultiSelectFieldSync-CSOitvtu.js.map} +1 -1
  81. package/dist/MultiSelectMenu.js +1 -1
  82. package/dist/{MultiSelectMenuSync-DiLddJDw.js → MultiSelectMenuSync-62OeGmkz.js} +29 -9
  83. package/dist/MultiSelectMenuSync-62OeGmkz.js.map +1 -0
  84. package/dist/{NumberField-svhZp1kB.js → NumberField-CHBXBMSj.js} +2 -2
  85. package/dist/{NumberField-svhZp1kB.js.map → NumberField-CHBXBMSj.js.map} +1 -1
  86. package/dist/NumberField.js +1 -1
  87. package/dist/Overflow.css +27 -26
  88. package/dist/Overflow.js +11 -11
  89. package/dist/{Page-Be029Dij.js → Page-DtSjnBJL.js} +217 -205
  90. package/dist/Page-DtSjnBJL.js.map +1 -0
  91. package/dist/Page.css +78 -76
  92. package/dist/Page.js +1 -1
  93. package/dist/{Pagination-BAwqfl_2.js → Pagination-CbBte3GQ.js} +17 -15
  94. package/dist/Pagination-CbBte3GQ.js.map +1 -0
  95. package/dist/Pagination.js +1 -1
  96. package/dist/Popover-CQhLSNYR.js +537 -0
  97. package/dist/Popover-CQhLSNYR.js.map +1 -0
  98. package/dist/{Popover-D0qSKZ1J.js → Popover-Rha0q-Pv.js} +354 -354
  99. package/dist/Popover-Rha0q-Pv.js.map +1 -0
  100. package/dist/Popover.js +1 -1
  101. package/dist/{ProgressBar-JpRDW5vG.js → ProgressBar-DEaMqbM-.js} +2 -2
  102. package/dist/{ProgressBar-JpRDW5vG.js.map → ProgressBar-DEaMqbM-.js.map} +1 -1
  103. package/dist/ProgressBar.js +1 -1
  104. package/dist/{Radio-BQg7exDG.js → Radio-Bw2LDl9G.js} +3 -3
  105. package/dist/{Radio-BQg7exDG.js.map → Radio-Bw2LDl9G.js.map} +1 -1
  106. package/dist/Radio-CCvu8mbI.js +60 -0
  107. package/dist/Radio-CCvu8mbI.js.map +1 -0
  108. package/dist/Radio.js +1 -1
  109. package/dist/{SegmentedControl-7fDLhgvh.js → SegmentedControl-BAi4pnFe.js} +79 -75
  110. package/dist/{SegmentedControl-7fDLhgvh.js.map → SegmentedControl-BAi4pnFe.js.map} +1 -1
  111. package/dist/SegmentedControl.js +1 -1
  112. package/dist/SelectCard-ZaAD0wR1.js +325 -0
  113. package/dist/SelectCard-ZaAD0wR1.js.map +1 -0
  114. package/dist/SelectCard.js +1 -1
  115. package/dist/SelectField.js +1 -1
  116. package/dist/{SelectFieldLabel-Dr8HeW3N.js → SelectFieldLabel-EJCXA02B.js} +2 -2
  117. package/dist/{SelectFieldLabel-Dr8HeW3N.js.map → SelectFieldLabel-EJCXA02B.js.map} +1 -1
  118. package/dist/{SelectFieldSync-CJ2Ie_v1.js → SelectFieldSync-DA54WXOk.js} +4 -4
  119. package/dist/{SelectFieldSync-CJ2Ie_v1.js.map → SelectFieldSync-DA54WXOk.js.map} +1 -1
  120. package/dist/SelectMenu.js +1 -1
  121. package/dist/{SelectMenuSync-CJA_coqD.js → SelectMenuSync-BQaSTcaN.js} +29 -9
  122. package/dist/SelectMenuSync-BQaSTcaN.js.map +1 -0
  123. package/dist/{SelectOptions-Bf4xsFek.js → SelectOptions-D-DzWmKE.js} +2 -2
  124. package/dist/{SelectOptions-Bf4xsFek.js.map → SelectOptions-D-DzWmKE.js.map} +1 -1
  125. package/dist/{SelectTrigger-ObsnAKNp.js → SelectTrigger-DWyRndmY.js} +3 -3
  126. package/dist/{SelectTrigger-ObsnAKNp.js.map → SelectTrigger-DWyRndmY.js.map} +1 -1
  127. package/dist/SelectTrigger.js +1 -1
  128. package/dist/{SelectTriggerBase-DKfOL2RJ.js → SelectTriggerBase-B6aZd2a6.js} +3 -3
  129. package/dist/{SelectTriggerBase-DKfOL2RJ.js.map → SelectTriggerBase-B6aZd2a6.js.map} +1 -1
  130. package/dist/{SideNav-KksbSQn7.js → SideNav-CxHemV3H.js} +127 -125
  131. package/dist/{SideNav-KksbSQn7.js.map → SideNav-CxHemV3H.js.map} +1 -1
  132. package/dist/SideNav.js +1 -1
  133. package/dist/{Stepper-Dt8_ImvJ.js → Stepper-CQUXV6P4.js} +156 -156
  134. package/dist/{Stepper-Dt8_ImvJ.js.map → Stepper-CQUXV6P4.js.map} +1 -1
  135. package/dist/Stepper.js +1 -1
  136. package/dist/{Tab-DO7LaUbw.js → Tab-BGGNcz9S.js} +225 -221
  137. package/dist/Tab-BGGNcz9S.js.map +1 -0
  138. package/dist/Tab.js +1 -1
  139. package/dist/Table.js +1 -1
  140. package/dist/{TextField-BW8sJAls.js → TextField-CMv9CpBq.js} +2 -2
  141. package/dist/{TextField-BW8sJAls.js.map → TextField-CMv9CpBq.js.map} +1 -1
  142. package/dist/{TextField-DeHpgPag.js → TextField-o8zvVFDk.js} +2 -2
  143. package/dist/{TextField-DeHpgPag.js.map → TextField-o8zvVFDk.js.map} +1 -1
  144. package/dist/TextField.js +1 -1
  145. package/dist/{Textarea-DyqdMTvQ.js → Textarea-B4bBvO8c.js} +2 -2
  146. package/dist/{Textarea-DyqdMTvQ.js.map → Textarea-B4bBvO8c.js.map} +1 -1
  147. package/dist/Textarea.js +1 -1
  148. package/dist/{TimeField-Dc0Y1JD-.js → TimeField-BEgnjk4R.js} +4 -4
  149. package/dist/{TimeField-Dc0Y1JD-.js.map → TimeField-BEgnjk4R.js.map} +1 -1
  150. package/dist/TimeField.js +1 -1
  151. package/dist/Toast.js +2 -2
  152. package/dist/{Toaster-b0-Ub3yt.js → Toaster-6_LVKok2.js} +2 -2
  153. package/dist/{Toaster-b0-Ub3yt.js.map → Toaster-6_LVKok2.js.map} +1 -1
  154. package/dist/{Toaster-DikGo_hR.js → Toaster-B38WlKC7.js} +2 -2
  155. package/dist/{Toaster-DikGo_hR.js.map → Toaster-B38WlKC7.js.map} +1 -1
  156. package/dist/{Toolbar-DAuz4Gs2.js → Toolbar-0EKhrvZN.js} +148 -147
  157. package/dist/{Toolbar-DAuz4Gs2.js.map → Toolbar-0EKhrvZN.js.map} +1 -1
  158. package/dist/Toolbar.js +1 -1
  159. package/dist/{Tooltip-Bupqao9B.js → Tooltip-BHwSTwsv.js} +224 -226
  160. package/dist/Tooltip-BHwSTwsv.js.map +1 -0
  161. package/dist/Tooltip.js +1 -1
  162. package/dist/{YearlessDateInputWithPicker-DFi08TLG.js → YearlessDateInputWithPicker-BC4lRuny.js} +3 -3
  163. package/dist/{YearlessDateInputWithPicker-DFi08TLG.js.map → YearlessDateInputWithPicker-BC4lRuny.js.map} +1 -1
  164. package/dist/beta/components/MultiSelectMenu/types.d.ts +15 -0
  165. package/dist/beta/components/SelectMenu/internal/useMenuInteraction.d.ts +3 -1
  166. package/dist/beta/components/SelectMenu/types.d.ts +15 -0
  167. package/dist/beta/components/Table/DataTable/DataTable.d.ts +2 -15
  168. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectAsyncCell.d.ts +35 -0
  169. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectCell.d.ts +4 -3
  170. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableSelectAsyncCell.d.ts +7 -0
  171. package/dist/beta/components/Table/DataTable/internal/editable-cells/useEditableMenuCell.d.ts +34 -0
  172. package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +2 -4
  173. package/dist/beta/components/Table/DataTable/types.d.ts +18 -1
  174. package/dist/beta/components/Table/createColumnHelper.d.ts +23 -68
  175. package/dist/beta/components/Table/types.d.ts +218 -42
  176. package/dist/beta/components/Toolbar/Toolbar.d.ts +168 -41
  177. package/dist/beta.js +9 -9
  178. package/dist/components/Avatar/Avatar.d.ts +14 -0
  179. package/dist/components/Calendar/Calendar.d.ts +84 -26
  180. package/dist/components/Combobox/Combobox.d.ts +172 -1
  181. package/dist/components/Dialog/Dialog.d.ts +96 -28
  182. package/dist/components/DrillDown/DrillDown.d.ts +7 -1
  183. package/dist/components/Layout/Layout.d.ts +52 -44
  184. package/dist/components/ListView/ListView.d.ts +5 -5
  185. package/dist/components/Listbox/Listbox.d.ts +5 -23
  186. package/dist/components/Menu/Menu.d.ts +1 -4
  187. package/dist/components/Toolbar/Toolbar.d.ts +3 -1
  188. package/dist/{floating-ui.react-C_s3_nEb.js → floating-ui.react-aKYfs-aw.js} +2 -2
  189. package/dist/{floating-ui.react-C_s3_nEb.js.map → floating-ui.react-aKYfs-aw.js.map} +1 -1
  190. package/dist/{index.esm-BZV0wNKZ.js → index.esm-K9kxJhLx.js} +2 -1
  191. package/dist/{index.esm-BZV0wNKZ.js.map → index.esm-K9kxJhLx.js.map} +1 -1
  192. package/dist/index.js +126 -126
  193. package/dist/index.js.map +1 -1
  194. package/dist/{syncFilterUtils-vt8ldsES.js → syncFilterUtils-B03Pc941.js} +191 -191
  195. package/dist/{syncFilterUtils-vt8ldsES.js.map → syncFilterUtils-B03Pc941.js.map} +1 -1
  196. package/dist/{useDrilldown-wwXRpNgb.js → useDrilldown-BW2XkUcK.js} +41 -39
  197. package/dist/{useDrilldown-wwXRpNgb.js.map → useDrilldown-BW2XkUcK.js.map} +1 -1
  198. package/dist/{useInitialFocus-CdoVwSbr.js → useInitialFocus-BRRbylek.js} +2 -2
  199. package/dist/{useInitialFocus-CdoVwSbr.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
  200. package/dist/{useMenuInteraction-zR_78KQC.js → useMenuInteraction-BwZ2ORo9.js} +8 -3
  201. package/dist/useMenuInteraction-BwZ2ORo9.js.map +1 -0
  202. package/dist/{useToggleSelection-BdXW3Zg3.js → useToggleSelection-Dip0eimQ.js} +2 -2
  203. package/dist/{useToggleSelection-BdXW3Zg3.js.map → useToggleSelection-Dip0eimQ.js.map} +1 -1
  204. package/package.json +3 -3
  205. package/dist/Avatar--CnTAnfD.js +0 -35
  206. package/dist/Avatar--CnTAnfD.js.map +0 -1
  207. package/dist/Breadcrumbs-3Y7jnj-F.js +0 -105
  208. package/dist/Breadcrumbs-3Y7jnj-F.js.map +0 -1
  209. package/dist/Calendar-SGlTt-bs.js.map +0 -1
  210. package/dist/Checkbox-CjEKa5Iv.js +0 -50
  211. package/dist/Checkbox-CjEKa5Iv.js.map +0 -1
  212. package/dist/DataTable-BYOS6icI.js.map +0 -1
  213. package/dist/DateFieldRange-C8Uzrboc.js.map +0 -1
  214. package/dist/Details-Dxq_v3Qg.js.map +0 -1
  215. package/dist/Dialog-CGhwkwvq.js.map +0 -1
  216. package/dist/Drawer-DA4iAgt-.js.map +0 -1
  217. package/dist/Grid-ONcUpb__.js +0 -147
  218. package/dist/Grid-ONcUpb__.js.map +0 -1
  219. package/dist/Layout-VfhlilMG.js.map +0 -1
  220. package/dist/List-CJZjElAQ.js +0 -101
  221. package/dist/List-CJZjElAQ.js.map +0 -1
  222. package/dist/ListView-mujFK6mQ.js.map +0 -1
  223. package/dist/Listbox-BtAgBDRS.js.map +0 -1
  224. package/dist/Menu-BXsmCP20.js.map +0 -1
  225. package/dist/MultiSelectMenuSync-DiLddJDw.js.map +0 -1
  226. package/dist/Page-Be029Dij.js.map +0 -1
  227. package/dist/Pagination-BAwqfl_2.js.map +0 -1
  228. package/dist/Popover-D0qSKZ1J.js.map +0 -1
  229. package/dist/Popover-DxZF6lbJ.js +0 -535
  230. package/dist/Popover-DxZF6lbJ.js.map +0 -1
  231. package/dist/Radio-BOq9UkpC.js +0 -60
  232. package/dist/Radio-BOq9UkpC.js.map +0 -1
  233. package/dist/SelectCard-cu4MBuh8.js +0 -320
  234. package/dist/SelectCard-cu4MBuh8.js.map +0 -1
  235. package/dist/SelectMenuSync-CJA_coqD.js.map +0 -1
  236. package/dist/Tab-DO7LaUbw.js.map +0 -1
  237. package/dist/Tooltip-Bupqao9B.js.map +0 -1
  238. package/dist/useMenuInteraction-zR_78KQC.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SegmentedControl-7fDLhgvh.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 {\n icon,\n value,\n children,\n className,\n \"aria-label\": ariaLabel,\n ...rest\n } = 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 // For icon-only segments (no children), use aria-label if provided, otherwise fall back to value\n const computedAriaLabel = !children ? ariaLabel || value : undefined;\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 aria-label={computedAriaLabel}\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-BAi4pnFe.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 {\n icon,\n value,\n children,\n className,\n \"aria-label\": ariaLabel,\n ...rest\n } = 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 // For icon-only segments (no children), use aria-label if provided, otherwise fall back to value\n const computedAriaLabel = !children ? ariaLabel || value : undefined;\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 aria-label={computedAriaLabel}\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\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(\n forwardRef<HTMLDivElement, SegmentedControlProps>(\n function SegmentedControlInner(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 ),\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 *\n * @example\n * <SegmentedControl.Segment value=\"option1\" icon={Icon1}>\n * Option 1\n * </SegmentedControl.Segment>\n */\n Segment: SegmentedControlSegment,\n },\n);\nSegmentedControl.displayName = \"SegmentedControl\";\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-7fDLhgvh.js';
1
+ export { S as SegmentedControl, a as SegmentedControlSegment, S as default } from './SegmentedControl-BAi4pnFe.js';
2
2
  //# sourceMappingURL=SegmentedControl.js.map
@@ -0,0 +1,325 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useContext, createContext, useState, useId, forwardRef, useLayoutEffect, useRef } from 'react';
3
+ import { c as cx } from './index-De1g9FRV.js';
4
+ import { a as CheckboxGroup, C as Checkbox } from './Checkbox-Drgai_lS.js';
5
+ import { a as RadioGroup, R as Radio, S as SvgRadioButtonUnchecked, b as SvgRadioButtonChecked } from './Radio-Bw2LDl9G.js';
6
+ import { C as Card } from './Card-wz71dEVA.js';
7
+ import { I as Icon } from './Icon-DuIlne4x.js';
8
+ import { a as SvgCheckBox, b as SvgCheckBoxOutlineBlank } from './indeterminate_check_box-B4zobNlt.js';
9
+ import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
10
+
11
+ import './SelectCard.css';const SelectCardContext = createContext(null);
12
+ const useSelectCardContext = () => useContext(SelectCardContext);
13
+
14
+ const SelectCardProvider = ({
15
+ children,
16
+ onChange,
17
+ selectionMode,
18
+ showSelectIndicator
19
+ }) => {
20
+ const [selection, setSelection] = useState(/* @__PURE__ */ new Set());
21
+ const radioName = useId();
22
+ const handleChange = (e, state, options) => {
23
+ if (!state || !state.id) {
24
+ if (!options?.internal) {
25
+ onChange?.(e, state);
26
+ }
27
+ return;
28
+ }
29
+ if (selectionMode === "single") {
30
+ if (state.checked) {
31
+ setSelection(/* @__PURE__ */ new Set([state.id]));
32
+ } else {
33
+ setSelection(/* @__PURE__ */ new Set());
34
+ }
35
+ } else {
36
+ if (state.checked) {
37
+ setSelection(selection.add(state.id));
38
+ } else {
39
+ selection.delete(state.id);
40
+ setSelection(selection);
41
+ }
42
+ }
43
+ if (!options?.internal) {
44
+ onChange?.(e, state);
45
+ }
46
+ };
47
+ const context = {
48
+ selectionMode,
49
+ onChange: handleChange,
50
+ radioName,
51
+ selection,
52
+ showSelectIndicator
53
+ };
54
+ return /* @__PURE__ */ jsx(SelectCardContext.Provider, { value: context, children });
55
+ };
56
+
57
+ const SelectCardGroup = forwardRef((props, _ref) => {
58
+ const {
59
+ ariaLabelledBy,
60
+ children,
61
+ legend,
62
+ onChange,
63
+ required = false,
64
+ selectionMode,
65
+ showSelectIndicator = false,
66
+ ...rest
67
+ } = props;
68
+ return /* @__PURE__ */ jsxs(
69
+ SelectCardProvider,
70
+ {
71
+ onChange,
72
+ selectionMode,
73
+ showSelectIndicator,
74
+ children: [
75
+ selectionMode === "multiple" && /* @__PURE__ */ jsx(
76
+ CheckboxGroup,
77
+ {
78
+ "aria-labelledby": ariaLabelledBy,
79
+ legend,
80
+ required,
81
+ ...rest,
82
+ children
83
+ }
84
+ ),
85
+ selectionMode === "single" && /* @__PURE__ */ jsx(
86
+ RadioGroup,
87
+ {
88
+ "aria-labelledby": ariaLabelledBy,
89
+ legend,
90
+ required,
91
+ ...rest,
92
+ children
93
+ }
94
+ )
95
+ ]
96
+ }
97
+ );
98
+ });
99
+ SelectCardGroup.displayName = "SelectCardGroup";
100
+
101
+ const styles = {
102
+ "select-card": "_select-card_1grbf_2",
103
+ "select-card-wrapper": "_select-card-wrapper_1grbf_20",
104
+ "select-card-label": "_select-card-label_1grbf_23",
105
+ "icon-wrapper": "_icon-wrapper_1grbf_26",
106
+ "icon-checked": "_icon-checked_1grbf_33",
107
+ "icon-unchecked": "_icon-unchecked_1grbf_34",
108
+ "select-card--selected": "_select-card--selected_1grbf_45",
109
+ "select-card--checked": "_select-card--checked_1grbf_61",
110
+ "select-card--errored": "_select-card--errored_1grbf_68",
111
+ "select-card--disabled": "_select-card--disabled_1grbf_76",
112
+ "select-card--remove-drop-shadow": "_select-card--remove-drop-shadow_1grbf_80"
113
+ };
114
+
115
+ const SelectCard = Object.assign(
116
+ forwardRef(
117
+ function SelectCardInner(props, ref) {
118
+ const {
119
+ checkboxProps,
120
+ children,
121
+ checked: checkedProp,
122
+ className,
123
+ defaultChecked: defaultCheckedProp,
124
+ disabled,
125
+ errored,
126
+ radioProps,
127
+ onChange,
128
+ removeDropShadow,
129
+ showSelectIndicator = false,
130
+ id,
131
+ ...rest
132
+ } = props;
133
+ const [checked, setChecked] = useOptionallyControlledState({
134
+ controlledValue: checkedProp,
135
+ defaultValue: defaultCheckedProp || false,
136
+ onChange
137
+ });
138
+ const context = useSelectCardContext();
139
+ const isControlled = checkedProp !== void 0;
140
+ const [_, setForceRenderCount] = useState(0);
141
+ useLayoutEffect(() => {
142
+ const initialChecked = checkedProp ?? defaultCheckedProp;
143
+ if (initialChecked) {
144
+ context?.onChange?.(
145
+ void 0,
146
+ {
147
+ id,
148
+ checked: initialChecked
149
+ },
150
+ { internal: true }
151
+ );
152
+ setForceRenderCount((prev) => prev + 1);
153
+ }
154
+ }, []);
155
+ const isFirstRender = useRef(true);
156
+ useLayoutEffect(() => {
157
+ if (isFirstRender.current) {
158
+ isFirstRender.current = false;
159
+ return;
160
+ }
161
+ if (isControlled && context) {
162
+ if (context.selectionMode === "single" && !checkedProp) {
163
+ return;
164
+ }
165
+ context.onChange?.(
166
+ void 0,
167
+ {
168
+ id,
169
+ checked: checkedProp
170
+ },
171
+ { internal: true }
172
+ );
173
+ }
174
+ }, [checkedProp]);
175
+ const handleChange = (event) => {
176
+ const newChecked = event ? event.target.checked : false;
177
+ setChecked(newChecked);
178
+ context?.onChange?.(event, {
179
+ id,
180
+ checked: newChecked
181
+ });
182
+ };
183
+ const isChecked = context ? context.selection.has(id) : checked;
184
+ const showIndicator = context?.showSelectIndicator || showSelectIndicator;
185
+ const contentClassName = cx(styles["select-card"], className, {
186
+ [styles["select-card--remove-drop-shadow"]]: removeDropShadow,
187
+ [styles["select-card--checked"]]: isChecked,
188
+ [styles["select-card--selected"]]: isChecked && !errored,
189
+ [styles["select-card--errored"]]: errored,
190
+ [styles["select-card--disabled"]]: disabled
191
+ });
192
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
193
+ (!context || context?.selectionMode === "multiple") && /* @__PURE__ */ jsx(
194
+ Checkbox,
195
+ {
196
+ ...checkboxProps,
197
+ className: cx(
198
+ styles["select-card-wrapper"],
199
+ checkboxProps?.className
200
+ ),
201
+ labelWrapperClassName: styles["select-card-label"],
202
+ checked: isControlled ? checkedProp : void 0,
203
+ defaultChecked: isControlled ? void 0 : defaultCheckedProp,
204
+ onChange: handleChange,
205
+ disabled,
206
+ ref,
207
+ label: /* @__PURE__ */ jsx(
208
+ Card,
209
+ {
210
+ ...rest,
211
+ className: contentClassName,
212
+ flex: showIndicator ? "1" : void 0,
213
+ gap: showIndicator ? "2" : void 0,
214
+ alignItems: showIndicator ? "flex-start" : void 0,
215
+ children: showIndicator ? /* @__PURE__ */ jsxs(Fragment, { children: [
216
+ /* @__PURE__ */ jsxs("span", { className: styles["icon-wrapper"], "aria-hidden": true, children: [
217
+ /* @__PURE__ */ jsx(
218
+ Icon,
219
+ {
220
+ size: "large",
221
+ svg: SvgCheckBox,
222
+ className: styles["icon-checked"]
223
+ }
224
+ ),
225
+ /* @__PURE__ */ jsx(
226
+ Icon,
227
+ {
228
+ size: "large",
229
+ svg: SvgCheckBoxOutlineBlank,
230
+ className: styles["icon-unchecked"]
231
+ }
232
+ )
233
+ ] }),
234
+ children
235
+ ] }) : children
236
+ }
237
+ ),
238
+ hideCheckbox: true
239
+ }
240
+ ),
241
+ context?.selectionMode === "single" && /* @__PURE__ */ jsx(
242
+ Radio,
243
+ {
244
+ ...radioProps,
245
+ className: cx(
246
+ styles["select-card-wrapper"],
247
+ radioProps?.className
248
+ ),
249
+ labelWrapperClassName: styles["select-card-label"],
250
+ checked: isControlled ? checkedProp : void 0,
251
+ defaultChecked: isControlled ? void 0 : defaultCheckedProp,
252
+ onChange: handleChange,
253
+ disabled,
254
+ ref,
255
+ name: context.radioName,
256
+ label: /* @__PURE__ */ jsx(
257
+ Card,
258
+ {
259
+ ...rest,
260
+ className: contentClassName,
261
+ flex: showIndicator ? "1" : void 0,
262
+ gap: showIndicator ? "2" : void 0,
263
+ alignItems: showIndicator ? "flex-start" : void 0,
264
+ children: showIndicator ? /* @__PURE__ */ jsxs(Fragment, { children: [
265
+ /* @__PURE__ */ jsxs("span", { className: styles["icon-wrapper"], "aria-hidden": true, children: [
266
+ /* @__PURE__ */ jsx(
267
+ Icon,
268
+ {
269
+ size: "large",
270
+ svg: SvgRadioButtonUnchecked,
271
+ className: styles["icon-unchecked"]
272
+ }
273
+ ),
274
+ /* @__PURE__ */ jsx(
275
+ Icon,
276
+ {
277
+ size: "large",
278
+ svg: SvgRadioButtonChecked,
279
+ className: styles["icon-checked"]
280
+ }
281
+ )
282
+ ] }),
283
+ children
284
+ ] }) : children
285
+ }
286
+ ),
287
+ hideRadio: true
288
+ }
289
+ )
290
+ ] });
291
+ }
292
+ ),
293
+ {
294
+ /**
295
+ * SelectCardGroup component for managing groups of selectable cards.
296
+ *
297
+ * Features:
298
+ * - Manages selection state for multiple SelectCard components
299
+ * - Supports both single and multiple selection modes
300
+ * - Provides proper accessibility with legends and ARIA labels
301
+ * - Handles required field validation
302
+ * - Automatic radio button grouping for single selection
303
+ * - Context provider for child SelectCard components
304
+ *
305
+ * @example
306
+ * <SelectCard.Group
307
+ * legend="Choose your plan"
308
+ * selectionMode="single"
309
+ * onChange={(e, state) => console.log('Selection changed:', state)}
310
+ * >
311
+ * <SelectCard id="basic" onChange={() => {}}>
312
+ * <Text variant="headline" size="small">Basic Plan</Text>
313
+ * </SelectCard>
314
+ * <SelectCard id="premium" onChange={() => {}}>
315
+ * <Text variant="headline" size="small">Premium Plan</Text>
316
+ * </SelectCard>
317
+ * </SelectCard.Group>
318
+ */
319
+ Group: SelectCardGroup
320
+ }
321
+ );
322
+ SelectCard.displayName = "SelectCard";
323
+
324
+ export { SelectCard as S };
325
+ //# sourceMappingURL=SelectCard-ZaAD0wR1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectCard-ZaAD0wR1.js","sources":["../src/components/SelectCard/internal/SelectCardContext.tsx","../src/components/SelectCard/internal/SelectCardProvider.tsx","../src/components/SelectCard/SelectCardGroup.tsx","../src/components/SelectCard/SelectCard.tsx"],"sourcesContent":["import { ChangeEvent, createContext, useContext } from \"react\";\n\n/**\n * Interface for the select card state\n */\nexport interface 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 */\nexport interface 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 * When `true`, displays a checkbox or radio indicator in a separate column on the left side of the card.\n * The indicator type (checkbox or radio) is automatically determined by the selection mode from SelectCard.Group context.\n * @default false\n */\n showSelectIndicator?: boolean;\n}\n\nexport const SelectCardContext = createContext<ISelectCardContext | null>(null);\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 { ChangeEvent, ReactNode, useId, useState } from \"react\";\nimport {\n ISelectCardContext,\n ISelectCardOnChangeOptions,\n ISelectCardState,\n SelectCardContext,\n} from \"./SelectCardContext\";\n\n/**\n * Props for the SelectCardProvider component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\ninterface ISelectCardProviderProps extends Omit<\n ISelectCardContext,\n \"radioName\" | \"selection\"\n> {\n children: ReactNode;\n}\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 showSelectIndicator,\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 showSelectIndicator,\n };\n\n return (\n <SelectCardContext.Provider value={context}>\n {children}\n </SelectCardContext.Provider>\n );\n};\n","import { forwardRef, ReactNode } from \"react\";\nimport { CheckboxGroup, CheckboxGroupProps } from \"../Checkbox/CheckboxGroup\";\nimport { RadioGroup } from \"../Radio/RadioGroup\";\nimport { SelectCardProvider } from \"./internal/SelectCardProvider\";\nimport { ISelectCardContext } from \"./internal/SelectCardContext\";\n\n/**\n * Props for the SelectCardGroup component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\nexport interface SelectCardGroupProps extends Omit<\n ISelectCardContext,\n \"radioName\" | \"selection\"\n> {\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 * When `true`, displays a checkbox or radio indicator in a separate column on the left side of the card.\n * The indicator type (checkbox or radio) is automatically determined by the `selectionMode` setting.\n * @default false\n */\n showSelectIndicator?: 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 showSelectIndicator = false,\n ...rest\n } = props;\n\n return (\n <SelectCardProvider\n onChange={onChange}\n selectionMode={selectionMode}\n showSelectIndicator={showSelectIndicator}\n >\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 {\n useLayoutEffect,\n useState,\n useRef,\n forwardRef,\n type ChangeEvent,\n} 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\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\nimport { useSelectCardContext } from \"./internal/SelectCardContext\";\nimport { Icon } from \"../Icon\";\n\nimport CheckboxOutline from \"@servicetitan/hammer-icon/mdi/round/check_box_outline_blank.svg\";\nimport CheckboxChecked from \"@servicetitan/hammer-icon/mdi/round/check_box.svg\";\nimport RadioOutline from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_unchecked.svg\";\nimport RadioChecked from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_checked.svg\";\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 /**\n * When `true`, displays a checkbox or radio indicator in a separate column on the left side of the card.\n * The indicator type (checkbox or radio) is automatically determined by the `selectionMode` prop on the\n * `SelectCard.Group`, and defaults to checkbox if no `SelectCard.Group` is used.\n * @default false\n */\n showSelectIndicator?: boolean;\n}\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(\n forwardRef<HTMLInputElement, SelectCardProps>(\n function SelectCardInner(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 showSelectIndicator = false,\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 const isControlled = checkedProp !== undefined;\n\n // we need to re-render after setting the initial selection state on context\n const [_, setForceRenderCount] = useState(0);\n useLayoutEffect(() => {\n // Sync initial checked state to context (for both controlled and uncontrolled modes)\n const initialChecked = checkedProp ?? defaultCheckedProp;\n if (initialChecked) {\n context?.onChange?.(\n undefined,\n {\n id,\n checked: initialChecked,\n },\n { internal: true },\n );\n\n setForceRenderCount((prev) => prev + 1);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Sync controlled state changes to context (skip initial mount - handled by above effect)\n const isFirstRender = useRef(true);\n useLayoutEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n if (isControlled && context) {\n // In single selection mode, only sync when checked is true.\n // Unchecking is implicit when another card becomes checked.\n // Syncing checked=false would clear the entire selection.\n if (context.selectionMode === \"single\" && !checkedProp) {\n return;\n }\n context.onChange?.(\n undefined,\n {\n id,\n checked: checkedProp,\n },\n { internal: true },\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [checkedProp]);\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 const showIndicator = context?.showSelectIndicator || showSelectIndicator;\n\n const contentClassName = cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--checked\"]]: isChecked,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n });\n\n return (\n <>\n {(!context || context?.selectionMode === \"multiple\") && (\n <Checkbox\n {...checkboxProps}\n className={cx(\n styles[\"select-card-wrapper\"],\n checkboxProps?.className,\n )}\n labelWrapperClassName={styles[\"select-card-label\"]}\n checked={isControlled ? checkedProp : undefined}\n defaultChecked={isControlled ? undefined : defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n label={\n <Card\n {...rest}\n className={contentClassName}\n flex={showIndicator ? \"1\" : undefined}\n gap={showIndicator ? \"2\" : undefined}\n alignItems={showIndicator ? \"flex-start\" : undefined}\n >\n {showIndicator ? (\n <>\n <span className={styles[\"icon-wrapper\"]} aria-hidden>\n <Icon\n size=\"large\"\n svg={CheckboxChecked}\n className={styles[\"icon-checked\"]}\n />\n\n <Icon\n size=\"large\"\n svg={CheckboxOutline}\n className={styles[\"icon-unchecked\"]}\n />\n </span>\n {children}\n </>\n ) : (\n children\n )}\n </Card>\n }\n hideCheckbox\n />\n )}\n {context?.selectionMode === \"single\" && (\n <Radio\n {...radioProps}\n className={cx(\n styles[\"select-card-wrapper\"],\n radioProps?.className,\n )}\n labelWrapperClassName={styles[\"select-card-label\"]}\n checked={isControlled ? checkedProp : undefined}\n defaultChecked={isControlled ? undefined : defaultCheckedProp}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n name={context.radioName}\n label={\n <Card\n {...rest}\n className={contentClassName}\n flex={showIndicator ? \"1\" : undefined}\n gap={showIndicator ? \"2\" : undefined}\n alignItems={showIndicator ? \"flex-start\" : undefined}\n >\n {showIndicator ? (\n <>\n <span className={styles[\"icon-wrapper\"]} aria-hidden>\n <Icon\n size=\"large\"\n svg={RadioOutline}\n className={styles[\"icon-unchecked\"]}\n />\n\n <Icon\n size=\"large\"\n svg={RadioChecked}\n className={styles[\"icon-checked\"]}\n />\n </span>\n {children}\n </>\n ) : (\n children\n )}\n </Card>\n }\n hideRadio\n />\n )}\n </>\n );\n },\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 *\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);\nSelectCard.displayName = \"SelectCard\";\n"],"names":["CheckboxChecked","CheckboxOutline","RadioOutline","RadioChecked"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { S as SelectCard, S as default } from './SelectCard-cu4MBuh8.js';
1
+ export { S as SelectCard, S as default } from './SelectCard-ZaAD0wR1.js';
2
2
  //# sourceMappingURL=SelectCard.js.map
@@ -1,2 +1,2 @@
1
- export { S as SelectField, a as SelectFieldSync } from './SelectFieldSync-CJ2Ie_v1.js';
1
+ export { S as SelectField, a as SelectFieldSync } from './SelectFieldSync-DA54WXOk.js';
2
2
  //# sourceMappingURL=SelectField.js.map
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { F as FieldLabel } from './FieldLabel-DbMosKtd.js';
2
+ import { F as FieldLabel } from './FieldLabel-CQ5QGTVq.js';
3
3
  import { S as SrOnly } from './SrOnly-eUpYGpAT.js';
4
4
 
5
5
  const SelectFieldLabel = ({
@@ -28,4 +28,4 @@ const SelectFieldLabel = ({
28
28
  };
29
29
 
30
30
  export { SelectFieldLabel as S };
31
- //# sourceMappingURL=SelectFieldLabel-Dr8HeW3N.js.map
31
+ //# sourceMappingURL=SelectFieldLabel-EJCXA02B.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectFieldLabel-Dr8HeW3N.js","sources":["../src/beta/components/SelectField/internal/SelectFieldLabel.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\nimport { FieldLabel } from \"../../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../../components/SrOnly\";\n\ntype GetLabelProps = (options?: object) => { id: string; htmlFor: string };\n\n/**\n * Props for the SelectFieldLabel component\n * @property {string} label - The text content to display as the label\n * @property {GetLabelProps} getLabelProps - Downshift getter function that returns accessibility props for the label\n * @property {boolean} [required] - Whether the field is required. Shows a red asterisk (*) when true.\n * @property {ReactNode} [moreInfo] - Additional information to display in a tooltip\n * @property {boolean} [moreInfoOpen] - Controls the open state of the more info tooltip\n * @property {boolean} [hideLabel] - Visually hides the label while keeping it accessible to screen readers\n * @property {ReactNode} [labelNode] - Custom ReactNode to render as the label, overriding the default label text\n */\nexport type SelectFieldLabelProps = {\n label: string;\n getLabelProps: GetLabelProps;\n hideLabel?: boolean;\n labelNode?: ReactNode;\n moreInfo?: ReactNode;\n moreInfoOpen?: boolean;\n required?: boolean;\n};\n\n/**\n * Internal label component for the SelectField that renders an accessible label element.\n *\n * Features:\n * - Renders a FieldLabel with proper accessibility attributes from Downshift\n * - Automatically associates the label with the combobox input\n * - Supports screen readers with proper labeling\n * - Optional required field indicator with red asterisk\n * - Help tooltip with info icon for additional context\n * - Can visually hide the label while maintaining accessibility\n * - Supports custom label content via labelNode\n *\n * @example\n * <SelectFieldLabel\n * label=\"Select an option\"\n * getLabelProps={getLabelProps}\n * required\n * moreInfo=\"Choose from available options\"\n * />\n */\nexport const SelectFieldLabel = ({\n label,\n getLabelProps,\n hideLabel = false,\n labelNode,\n moreInfo,\n moreInfoOpen,\n required,\n}: SelectFieldLabelProps) => {\n const labelContent = (\n <FieldLabel\n {...getLabelProps()}\n required={required}\n moreInfo={moreInfo}\n moreInfoOpen={moreInfoOpen}\n >\n {labelNode ?? label}\n </FieldLabel>\n );\n\n if (hideLabel) {\n return <SrOnly>{labelContent}</SrOnly>;\n }\n\n return labelContent;\n};\n"],"names":[],"mappings":";;;;AA8CO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,KAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA,EAAc;AAAA,MAClB,QAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MAEC,QAAA,EAAA,SAAA,IAAa;AAAA;AAAA,GAChB;AAGF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAO,GAAA,CAAC,UAAQ,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,YAAA;AACT;;;;"}
1
+ {"version":3,"file":"SelectFieldLabel-EJCXA02B.js","sources":["../src/beta/components/SelectField/internal/SelectFieldLabel.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\nimport { FieldLabel } from \"../../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../../components/SrOnly\";\n\ntype GetLabelProps = (options?: object) => { id: string; htmlFor: string };\n\n/**\n * Props for the SelectFieldLabel component\n * @property {string} label - The text content to display as the label\n * @property {GetLabelProps} getLabelProps - Downshift getter function that returns accessibility props for the label\n * @property {boolean} [required] - Whether the field is required. Shows a red asterisk (*) when true.\n * @property {ReactNode} [moreInfo] - Additional information to display in a tooltip\n * @property {boolean} [moreInfoOpen] - Controls the open state of the more info tooltip\n * @property {boolean} [hideLabel] - Visually hides the label while keeping it accessible to screen readers\n * @property {ReactNode} [labelNode] - Custom ReactNode to render as the label, overriding the default label text\n */\nexport type SelectFieldLabelProps = {\n label: string;\n getLabelProps: GetLabelProps;\n hideLabel?: boolean;\n labelNode?: ReactNode;\n moreInfo?: ReactNode;\n moreInfoOpen?: boolean;\n required?: boolean;\n};\n\n/**\n * Internal label component for the SelectField that renders an accessible label element.\n *\n * Features:\n * - Renders a FieldLabel with proper accessibility attributes from Downshift\n * - Automatically associates the label with the combobox input\n * - Supports screen readers with proper labeling\n * - Optional required field indicator with red asterisk\n * - Help tooltip with info icon for additional context\n * - Can visually hide the label while maintaining accessibility\n * - Supports custom label content via labelNode\n *\n * @example\n * <SelectFieldLabel\n * label=\"Select an option\"\n * getLabelProps={getLabelProps}\n * required\n * moreInfo=\"Choose from available options\"\n * />\n */\nexport const SelectFieldLabel = ({\n label,\n getLabelProps,\n hideLabel = false,\n labelNode,\n moreInfo,\n moreInfoOpen,\n required,\n}: SelectFieldLabelProps) => {\n const labelContent = (\n <FieldLabel\n {...getLabelProps()}\n required={required}\n moreInfo={moreInfo}\n moreInfoOpen={moreInfoOpen}\n >\n {labelNode ?? label}\n </FieldLabel>\n );\n\n if (hideLabel) {\n return <SrOnly>{labelContent}</SrOnly>;\n }\n\n return labelContent;\n};\n"],"names":[],"mappings":";;;;AA8CO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,KAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA,EAAc;AAAA,MAClB,QAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MAEC,QAAA,EAAA,SAAA,IAAa;AAAA;AAAA,GAChB;AAGF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAO,GAAA,CAAC,UAAQ,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,YAAA;AACT;;;;"}
@@ -1,15 +1,15 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { useState, useMemo, useRef, useCallback, useEffect, forwardRef, useId } from 'react';
3
3
  import { w as warnDeprecatedErrorUsage } from './utils-CM48ODEJ.js';
4
- import { S as SelectOptions } from './SelectOptions-Bf4xsFek.js';
4
+ import { S as SelectOptions } from './SelectOptions-D-DzWmKE.js';
5
5
  import { s as styles } from './SelectTriggerBase.module-B0NFRlQP.js';
6
6
  import { c as cx } from './index-De1g9FRV.js';
7
7
  import { B as Button } from './Button-CVsGhVJz.js';
8
8
  import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
9
9
  import { S as SvgClose } from './close-DZj38AEh.js';
10
- import { S as SelectFieldLabel } from './SelectFieldLabel-Dr8HeW3N.js';
10
+ import { S as SelectFieldLabel } from './SelectFieldLabel-EJCXA02B.js';
11
11
  import { u as useDownshiftEnvironment, a as useCombobox, b as useSelect } from './downshift.esm-xtSnQp44.js';
12
- import { b as useProcessedOptions, c as buildSelectItems, h as toSelectItem, d as useDebouncedCallback, e as OptionsDialog, f as OptionsPopover, a as useSelectOrchestration, g as defaultSyncFilter, t as toSyncFilterFn, s as sortByGroup } from './syncFilterUtils-vt8ldsES.js';
12
+ import { b as useProcessedOptions, c as buildSelectItems, h as toSelectItem, d as useDebouncedCallback, e as OptionsDialog, f as OptionsPopover, a as useSelectOrchestration, g as defaultSyncFilter, t as toSyncFilterFn, s as sortByGroup } from './syncFilterUtils-B03Pc941.js';
13
13
  import { F as FieldMessage } from './FieldMessage-COHqUdj5.js';
14
14
  import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
15
15
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DMDdfIah.js';
@@ -1156,4 +1156,4 @@ const SelectFieldSync = (props) => {
1156
1156
  };
1157
1157
 
1158
1158
  export { SelectField as S, SelectFieldSync as a };
1159
- //# sourceMappingURL=SelectFieldSync-CJ2Ie_v1.js.map
1159
+ //# sourceMappingURL=SelectFieldSync-DA54WXOk.js.map