@servicetitan/anvil2 2.5.1 → 2.6.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 (407) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{Alert-D9mBPs6z.js → Alert-C_o2f78C.js} +5 -5
  3. package/dist/{Alert-D9mBPs6z.js.map → Alert-C_o2f78C.js.map} +1 -1
  4. package/dist/Alert.js +1 -1
  5. package/dist/{Announcement-B34cD6BC.js → Announcement-CyrTvgP4.js} +5 -5
  6. package/dist/{Announcement-B34cD6BC.js.map → Announcement-CyrTvgP4.js.map} +1 -1
  7. package/dist/Announcement.js +1 -1
  8. package/dist/{AnvilProvider-C3pjoStP.js → AnvilProvider-ClfmLl_6.js} +5 -5
  9. package/dist/{AnvilProvider-C3pjoStP.js.map → AnvilProvider-ClfmLl_6.js.map} +1 -1
  10. package/dist/AnvilProvider.js +1 -1
  11. package/dist/{Avatar-DShevhcs.js → Avatar--CnTAnfD.js} +2 -2
  12. package/dist/{Avatar-DShevhcs.js.map → Avatar--CnTAnfD.js.map} +1 -1
  13. package/dist/{Avatar-COMPK7Ym.js → Avatar-CCnbKkCm.js} +4 -4
  14. package/dist/{Avatar-COMPK7Ym.js.map → Avatar-CCnbKkCm.js.map} +1 -1
  15. package/dist/Avatar.js +2 -2
  16. package/dist/{Badge-CS-CwcOQ.js → Badge-C2W7Dls9.js} +4 -4
  17. package/dist/{Badge-CS-CwcOQ.js.map → Badge-C2W7Dls9.js.map} +1 -1
  18. package/dist/Badge.js +1 -1
  19. package/dist/{Breadcrumbs-CEVH4s23.js → Breadcrumbs-3Y7jnj-F.js} +6 -6
  20. package/dist/{Breadcrumbs-CEVH4s23.js.map → Breadcrumbs-3Y7jnj-F.js.map} +1 -1
  21. package/dist/Breadcrumbs.js +1 -1
  22. package/dist/{Button-DrNDkO2f.js → Button-CVsGhVJz.js} +6 -6
  23. package/dist/{Button-DrNDkO2f.js.map → Button-CVsGhVJz.js.map} +1 -1
  24. package/dist/Button.css +49 -49
  25. package/dist/Button.js +1 -1
  26. package/dist/Button.module-wCtFYGVD.js +26 -0
  27. package/dist/Button.module-wCtFYGVD.js.map +1 -0
  28. package/dist/{ButtonCompound-D9VTKcL4.js → ButtonCompound-Cmw3cgMY.js} +4 -4
  29. package/dist/{ButtonCompound-D9VTKcL4.js.map → ButtonCompound-Cmw3cgMY.js.map} +1 -1
  30. package/dist/ButtonCompound.js +1 -1
  31. package/dist/{ButtonLink-DDtrmbVM.js → ButtonLink-BJKTJER8.js} +6 -6
  32. package/dist/{ButtonLink-DDtrmbVM.js.map → ButtonLink-BJKTJER8.js.map} +1 -1
  33. package/dist/ButtonLink.js +1 -1
  34. package/dist/{ButtonToggle-DrFewgOG.js → ButtonToggle-DaYJWso_.js} +5 -5
  35. package/dist/{ButtonToggle-DrFewgOG.js.map → ButtonToggle-DaYJWso_.js.map} +1 -1
  36. package/dist/ButtonToggle.js +1 -1
  37. package/dist/{Calendar-CtkL4zYU.js → Calendar-B0u3EgCY.js} +7 -7
  38. package/dist/{Calendar-CtkL4zYU.js.map → Calendar-B0u3EgCY.js.map} +1 -1
  39. package/dist/{Calendar-CkgpKD7Q.js → Calendar-B5d2SUrH.js} +2 -2
  40. package/dist/{Calendar-CkgpKD7Q.js.map → Calendar-B5d2SUrH.js.map} +1 -1
  41. package/dist/Calendar.js +2 -2
  42. package/dist/{Card-DDH7gI8m.js → Card-wz71dEVA.js} +3 -3
  43. package/dist/{Card-DDH7gI8m.js.map → Card-wz71dEVA.js.map} +1 -1
  44. package/dist/Card.js +1 -1
  45. package/dist/{Checkbox-CxjZpzPp.js → Checkbox-BwULIo4D.js} +26 -36
  46. package/dist/Checkbox-BwULIo4D.js.map +1 -0
  47. package/dist/{Checkbox-CFgjreAl.js → Checkbox-CIj37_vY.js} +2 -2
  48. package/dist/{Checkbox-CFgjreAl.js.map → Checkbox-CIj37_vY.js.map} +1 -1
  49. package/dist/Checkbox.css +71 -66
  50. package/dist/Checkbox.js +1 -1
  51. package/dist/Checkbox.module-EkRZO48Y.js +28 -0
  52. package/dist/Checkbox.module-EkRZO48Y.js.map +1 -0
  53. package/dist/{Chip-Bc7jiIJ1.js → Chip-DjTAR0va.js} +6 -6
  54. package/dist/{Chip-Bc7jiIJ1.js.map → Chip-DjTAR0va.js.map} +1 -1
  55. package/dist/Chip.js +1 -1
  56. package/dist/{Combobox-Drqb3GVU.js → Combobox-Clymsgli.js} +16 -19
  57. package/dist/Combobox-Clymsgli.js.map +1 -0
  58. package/dist/Combobox.js +1 -1
  59. package/dist/{DataTable-BLuJ4FtH.js → DataTable-qoseu_e2.js} +83 -48
  60. package/dist/DataTable-qoseu_e2.js.map +1 -0
  61. package/dist/DataTable.css +68 -55
  62. package/dist/{DateFieldRange-CvlOeE4v.js → DateFieldRange-rks7jQor.js} +45 -54
  63. package/dist/DateFieldRange-rks7jQor.js.map +1 -0
  64. package/dist/DateFieldRange.js +1 -1
  65. package/dist/{DateFieldSingle-9UHxIxIA.js → DateFieldSingle-C0WXU7H1.js} +43 -52
  66. package/dist/DateFieldSingle-C0WXU7H1.js.map +1 -0
  67. package/dist/DateFieldSingle.js +1 -1
  68. package/dist/{DateFieldYearless-HNydELvO.js → DateFieldYearless-2p3a7Xgo.js} +15 -23
  69. package/dist/DateFieldYearless-2p3a7Xgo.js.map +1 -0
  70. package/dist/DateFieldYearless.js +1 -1
  71. package/dist/{DateFieldYearlessRange-COb8v2CG.js → DateFieldYearlessRange-DLmhPug8.js} +18 -25
  72. package/dist/DateFieldYearlessRange-DLmhPug8.js.map +1 -0
  73. package/dist/DateFieldYearlessRange.js +1 -1
  74. package/dist/{DaysOfTheWeek-D-WPj18i.js → DaysOfTheWeek-BR32AA32.js} +6 -6
  75. package/dist/{DaysOfTheWeek-D-WPj18i.js.map → DaysOfTheWeek-BR32AA32.js.map} +1 -1
  76. package/dist/DaysOfTheWeek.js +1 -1
  77. package/dist/{Details-BF0-a1by.js → Details-Dxq_v3Qg.js} +4 -4
  78. package/dist/{Details-BF0-a1by.js.map → Details-Dxq_v3Qg.js.map} +1 -1
  79. package/dist/Details.js +1 -1
  80. package/dist/{Dialog-DEAR058v.js → Dialog-CMhypnCD.js} +5 -5
  81. package/dist/{Dialog-DEAR058v.js.map → Dialog-CMhypnCD.js.map} +1 -1
  82. package/dist/Dialog.js +1 -1
  83. package/dist/{DialogCancelButton-BfI9K4a4.js → DialogCancelButton-DQDMzGeT.js} +2 -2
  84. package/dist/{DialogCancelButton-BfI9K4a4.js.map → DialogCancelButton-DQDMzGeT.js.map} +1 -1
  85. package/dist/{Divider-De04mOU6.js → Divider-B1UoK8ho.js} +3 -3
  86. package/dist/{Divider-De04mOU6.js.map → Divider-B1UoK8ho.js.map} +1 -1
  87. package/dist/Divider.js +1 -1
  88. package/dist/Dnd.js +1 -1
  89. package/dist/DndSort.js +6 -6
  90. package/dist/{Drawer-CnMskBQl.js → Drawer-CSelPi8t.js} +5 -5
  91. package/dist/{Drawer-CnMskBQl.js.map → Drawer-CSelPi8t.js.map} +1 -1
  92. package/dist/Drawer.js +1 -1
  93. package/dist/DrillDown.js +1 -1
  94. package/dist/{EditCard-CH-JE4ba.js → EditCard-CLN0GBN_.js} +7 -7
  95. package/dist/{EditCard-CH-JE4ba.js.map → EditCard-CLN0GBN_.js.map} +1 -1
  96. package/dist/EditCard.js +1 -1
  97. package/dist/FieldLabel-DbMosKtd.js +125 -0
  98. package/dist/FieldLabel-DbMosKtd.js.map +1 -0
  99. package/dist/FieldLabel.css +80 -10
  100. package/dist/FieldLabel.js +1 -1
  101. package/dist/{FieldMessage-OeP_xSUE.js → FieldMessage-COHqUdj5.js} +3 -3
  102. package/dist/{FieldMessage-OeP_xSUE.js.map → FieldMessage-COHqUdj5.js.map} +1 -1
  103. package/dist/FieldMessage.js +2 -2
  104. package/dist/{Flex-CUtXN-C0.js → Flex-WyyZm1bf.js} +3 -3
  105. package/dist/{Flex-CUtXN-C0.js.map → Flex-WyyZm1bf.js.map} +1 -1
  106. package/dist/Flex.js +1 -1
  107. package/dist/{Grid-CatFkT0X.js → Grid-ONcUpb__.js} +3 -3
  108. package/dist/{Grid-CatFkT0X.js.map → Grid-ONcUpb__.js.map} +1 -1
  109. package/dist/Grid.js +1 -1
  110. package/dist/{Helper-B2UrgJvr.js → Helper-B_FIOlhy.js} +3 -3
  111. package/dist/{Helper-B2UrgJvr.js.map → Helper-B_FIOlhy.js.map} +1 -1
  112. package/dist/{Icon-Bcil6aBo.js → Icon-DuIlne4x.js} +3 -3
  113. package/dist/{Icon-Bcil6aBo.js.map → Icon-DuIlne4x.js.map} +1 -1
  114. package/dist/Icon.js +1 -1
  115. package/dist/{InputMask-B7ZnJoR5.js → InputMask-BKs-x6ds.js} +3 -3
  116. package/dist/{InputMask-B7ZnJoR5.js.map → InputMask-BKs-x6ds.js.map} +1 -1
  117. package/dist/InputMask.js +1 -1
  118. package/dist/{InteractiveCard-OszQGxGw.js → InteractiveCard-GTYbR6Xy.js} +3 -3
  119. package/dist/{InteractiveCard-OszQGxGw.js.map → InteractiveCard-GTYbR6Xy.js.map} +1 -1
  120. package/dist/InteractiveCard.js +1 -1
  121. package/dist/{Layout-DTAU7jS5.js → Layout-VfhlilMG.js} +2 -2
  122. package/dist/{Layout-DTAU7jS5.js.map → Layout-VfhlilMG.js.map} +1 -1
  123. package/dist/Layout.js +1 -1
  124. package/dist/{Link-B3reiL5f.js → Link-jTvzyXca.js} +4 -4
  125. package/dist/{Link-B3reiL5f.js.map → Link-jTvzyXca.js.map} +1 -1
  126. package/dist/Link.js +1 -1
  127. package/dist/{LinkButton-D62f2os3.js → LinkButton-DGyHR1E7.js} +3 -3
  128. package/dist/{LinkButton-D62f2os3.js.map → LinkButton-DGyHR1E7.js.map} +1 -1
  129. package/dist/LinkButton.js +1 -1
  130. package/dist/{List-CtdOo1dv.js → List-CJZjElAQ.js} +3 -3
  131. package/dist/{List-CtdOo1dv.js.map → List-CJZjElAQ.js.map} +1 -1
  132. package/dist/List.js +1 -1
  133. package/dist/{ListView-CN8zu-cq.js → ListView-CeGwrRbt.js} +4 -4
  134. package/dist/{ListView-CN8zu-cq.js.map → ListView-CeGwrRbt.js.map} +1 -1
  135. package/dist/ListView.js +1 -1
  136. package/dist/{Listbox-DMyxIokT.js → Listbox-BtAgBDRS.js} +7 -7
  137. package/dist/{Listbox-DMyxIokT.js.map → Listbox-BtAgBDRS.js.map} +1 -1
  138. package/dist/Listbox.css +29 -29
  139. package/dist/Listbox.js +1 -1
  140. package/dist/Listbox.module-HAXMOKvC.js +18 -0
  141. package/dist/Listbox.module-HAXMOKvC.js.map +1 -0
  142. package/dist/{LocalizationProvider-ay-XWdlo.js → LocalizationProvider-DWCyga_d.js} +2 -2
  143. package/dist/{LocalizationProvider-ay-XWdlo.js.map → LocalizationProvider-DWCyga_d.js.map} +1 -1
  144. package/dist/LocalizationProvider.js +1 -1
  145. package/dist/{Menu-CpRnsr0v.js → Menu-BXsmCP20.js} +6 -5
  146. package/dist/{Menu-CpRnsr0v.js.map → Menu-BXsmCP20.js.map} +1 -1
  147. package/dist/Menu.js +1 -1
  148. package/dist/MultiSelectField.js +1 -1
  149. package/dist/{MultiSelectFieldSync-BnPzYM72.js → MultiSelectFieldSync-EELhdoD6.js} +92 -177
  150. package/dist/MultiSelectFieldSync-EELhdoD6.js.map +1 -0
  151. package/dist/MultiSelectMenu.d.ts +2 -0
  152. package/dist/MultiSelectMenu.js +2 -0
  153. package/dist/MultiSelectMenu.js.map +1 -0
  154. package/dist/MultiSelectMenuSync-CAPhhkK1.js +432 -0
  155. package/dist/MultiSelectMenuSync-CAPhhkK1.js.map +1 -0
  156. package/dist/{NumberField-ecubQsaf.js → NumberField-svhZp1kB.js} +14 -15
  157. package/dist/NumberField-svhZp1kB.js.map +1 -0
  158. package/dist/NumberField.js +1 -1
  159. package/dist/Overflow.js +3 -3
  160. package/dist/{Page-qOkG6psI.js → Page-BpV1yHkm.js} +16 -16
  161. package/dist/{Page-qOkG6psI.js.map → Page-BpV1yHkm.js.map} +1 -1
  162. package/dist/Page.js +1 -1
  163. package/dist/{Pagination-BuiyhZlJ.js → Pagination-BAwqfl_2.js} +8 -8
  164. package/dist/{Pagination-BuiyhZlJ.js.map → Pagination-BAwqfl_2.js.map} +1 -1
  165. package/dist/Pagination.js +1 -1
  166. package/dist/{Popover-CYWYCj7l.js → Popover-Br6qPgKe.js} +7 -26
  167. package/dist/Popover-Br6qPgKe.js.map +1 -0
  168. package/dist/Popover-Dkw_8dZx.js +535 -0
  169. package/dist/Popover-Dkw_8dZx.js.map +1 -0
  170. package/dist/Popover.js +1 -1
  171. package/dist/Popover2.css +68 -0
  172. package/dist/{ProgressBar-CBhVZIzK.js → ProgressBar-JpRDW5vG.js} +8 -8
  173. package/dist/{ProgressBar-CBhVZIzK.js.map → ProgressBar-JpRDW5vG.js.map} +1 -1
  174. package/dist/ProgressBar.js +1 -1
  175. package/dist/{Radio-DtYoRq3m.js → Radio-8DmfWHYq.js} +38 -46
  176. package/dist/Radio-8DmfWHYq.js.map +1 -0
  177. package/dist/{Radio-BMFwnzyz.js → Radio-M7lc0BsU.js} +2 -2
  178. package/dist/{Radio-BMFwnzyz.js.map → Radio-M7lc0BsU.js.map} +1 -1
  179. package/dist/Radio.css +52 -47
  180. package/dist/Radio.js +1 -1
  181. package/dist/{SearchField-CtdtcrVV.js → SearchField-im7AHGYo.js} +5 -5
  182. package/dist/{SearchField-CtdtcrVV.js.map → SearchField-im7AHGYo.js.map} +1 -1
  183. package/dist/SearchField.js +1 -1
  184. package/dist/{SegmentedControl-CzTtiYS9.js → SegmentedControl-7fDLhgvh.js} +3 -3
  185. package/dist/{SegmentedControl-CzTtiYS9.js.map → SegmentedControl-7fDLhgvh.js.map} +1 -1
  186. package/dist/SegmentedControl.js +1 -1
  187. package/dist/{SelectCard-yWBNnm7t.js → SelectCard-D5dcOIuf.js} +6 -6
  188. package/dist/{SelectCard-yWBNnm7t.js.map → SelectCard-D5dcOIuf.js.map} +1 -1
  189. package/dist/SelectCard.js +1 -1
  190. package/dist/SelectField.js +1 -1
  191. package/dist/SelectFieldLabel-Dr8HeW3N.js +31 -0
  192. package/dist/SelectFieldLabel-Dr8HeW3N.js.map +1 -0
  193. package/dist/{SelectFieldSync-DCrafdbx.js → SelectFieldSync-BPopU0om.js} +80 -169
  194. package/dist/SelectFieldSync-BPopU0om.js.map +1 -0
  195. package/dist/SelectMenu.d.ts +2 -0
  196. package/dist/SelectMenu.js +2 -0
  197. package/dist/SelectMenu.js.map +1 -0
  198. package/dist/SelectMenuSync-DeMYO1m_.js +327 -0
  199. package/dist/SelectMenuSync-DeMYO1m_.js.map +1 -0
  200. package/dist/SelectOptions-DBe5ZN_-.js +26 -0
  201. package/dist/SelectOptions-DBe5ZN_-.js.map +1 -0
  202. package/dist/{SelectTrigger-Cs5CGc4D.js → SelectTrigger-ObsnAKNp.js} +6 -9
  203. package/dist/SelectTrigger-ObsnAKNp.js.map +1 -0
  204. package/dist/SelectTrigger.js +1 -1
  205. package/dist/{SelectTriggerBase-Cs827tDp.js → SelectTriggerBase-DKfOL2RJ.js} +8 -8
  206. package/dist/{SelectTriggerBase-Cs827tDp.js.map → SelectTriggerBase-DKfOL2RJ.js.map} +1 -1
  207. package/dist/{SideNav-CbMGsIPM.js → SideNav-KksbSQn7.js} +4 -4
  208. package/dist/{SideNav-CbMGsIPM.js.map → SideNav-KksbSQn7.js.map} +1 -1
  209. package/dist/SideNav.js +1 -1
  210. package/dist/Skeleton.js +2 -2
  211. package/dist/{Spinner-CpEm3Lud.js → Spinner-BqmcE2pb.js} +2 -2
  212. package/dist/{Spinner-CpEm3Lud.js.map → Spinner-BqmcE2pb.js.map} +1 -1
  213. package/dist/Spinner.js +1 -1
  214. package/dist/{SrOnly-CrdBTl6E.js → SrOnly-eUpYGpAT.js} +2 -2
  215. package/dist/{SrOnly-CrdBTl6E.js.map → SrOnly-eUpYGpAT.js.map} +1 -1
  216. package/dist/SrOnly.js +1 -1
  217. package/dist/{Stepper-CzVKDg-N.js → Stepper-Dt8_ImvJ.js} +5 -5
  218. package/dist/{Stepper-CzVKDg-N.js.map → Stepper-Dt8_ImvJ.js.map} +1 -1
  219. package/dist/Stepper.js +1 -1
  220. package/dist/{Switch-CEmjmSiL.js → Switch-DpPHr3G3.js} +6 -6
  221. package/dist/{Switch-CEmjmSiL.js.map → Switch-DpPHr3G3.js.map} +1 -1
  222. package/dist/Switch.js +1 -1
  223. package/dist/{Tab-DXivEqur.js → Tab-DO7LaUbw.js} +4 -4
  224. package/dist/{Tab-DXivEqur.js.map → Tab-DO7LaUbw.js.map} +1 -1
  225. package/dist/Tab.js +1 -1
  226. package/dist/Table.js +1 -1
  227. package/dist/{Text-DhheKsns.js → Text-BJo4oMI2.js} +3 -3
  228. package/dist/{Text-DhheKsns.js.map → Text-BJo4oMI2.js.map} +1 -1
  229. package/dist/Text.js +1 -1
  230. package/dist/{TextField-D9VWORek.js → TextField--co7QJ4r.js} +2 -2
  231. package/dist/{TextField-D9VWORek.js.map → TextField--co7QJ4r.js.map} +1 -1
  232. package/dist/{TextField-atI4M79b.js → TextField-Cax4UeNl.js} +12 -16
  233. package/dist/TextField-Cax4UeNl.js.map +1 -0
  234. package/dist/TextField.js +1 -1
  235. package/dist/{Textarea-D-kPIsIN.js → Textarea-DyqdMTvQ.js} +11 -15
  236. package/dist/Textarea-DyqdMTvQ.js.map +1 -0
  237. package/dist/Textarea.js +1 -1
  238. package/dist/{ThemeProvider-BEt_iJgf.js → ThemeProvider-CaYW3RuA.js} +3 -3
  239. package/dist/{ThemeProvider-BEt_iJgf.js.map → ThemeProvider-CaYW3RuA.js.map} +1 -1
  240. package/dist/ThemeProvider.js +1 -1
  241. package/dist/{TimeField-DREFzFkw.js → TimeField-BfcLCWMG.js} +23 -13
  242. package/dist/TimeField-BfcLCWMG.js.map +1 -0
  243. package/dist/TimeField.js +1 -1
  244. package/dist/Toast.js +2 -2
  245. package/dist/{Toaster-Bisc1mlh.js → Toaster-DikGo_hR.js} +2 -2
  246. package/dist/{Toaster-Bisc1mlh.js.map → Toaster-DikGo_hR.js.map} +1 -1
  247. package/dist/{Toaster-B652KIzq.js → Toaster-b0-Ub3yt.js} +7 -7
  248. package/dist/{Toaster-B652KIzq.js.map → Toaster-b0-Ub3yt.js.map} +1 -1
  249. package/dist/{Toolbar-jfZ-CupZ.js → Toolbar-DqYMc_w8.js} +39 -126
  250. package/dist/Toolbar-DqYMc_w8.js.map +1 -0
  251. package/dist/Toolbar.js +1 -1
  252. package/dist/{Tooltip-Bt62hC5J.js → Tooltip-Bupqao9B.js} +13 -6
  253. package/dist/Tooltip-Bupqao9B.js.map +1 -0
  254. package/dist/Tooltip.js +1 -1
  255. package/dist/{YearlessDateInputWithPicker-mW5KykHZ.js → YearlessDateInputWithPicker-aq99rKJU.js} +14 -15
  256. package/dist/YearlessDateInputWithPicker-aq99rKJU.js.map +1 -0
  257. package/dist/YearlessDateInputWithPicker.css +33 -33
  258. package/dist/assets/icons/st/resize_window_alt.svg +1 -0
  259. package/dist/assets/icons/st.ts +1 -0
  260. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +2 -3
  261. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +8 -7
  262. package/dist/beta/components/MultiSelectField/internal/useSelectModeMultiple.d.ts +6 -4
  263. package/dist/beta/components/MultiSelectField/types.d.ts +2 -3
  264. package/dist/beta/components/MultiSelectMenu/MultiSelectMenu.d.ts +30 -0
  265. package/dist/beta/components/MultiSelectMenu/MultiSelectMenuSync.d.ts +54 -0
  266. package/dist/beta/components/MultiSelectMenu/index.d.ts +3 -0
  267. package/dist/beta/components/MultiSelectMenu/types.d.ts +170 -0
  268. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +2 -3
  269. package/dist/beta/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
  270. package/dist/beta/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
  271. package/dist/beta/components/SelectField/internal/useCombo.d.ts +7 -7
  272. package/dist/beta/components/SelectField/internal/useSelectMode.d.ts +7 -6
  273. package/dist/beta/components/SelectField/types.d.ts +2 -9
  274. package/dist/beta/components/SelectMenu/SelectMenu.d.ts +27 -0
  275. package/dist/beta/components/SelectMenu/SelectMenuSync.d.ts +41 -0
  276. package/dist/beta/components/SelectMenu/index.d.ts +3 -0
  277. package/dist/beta/components/SelectMenu/internal/useMenuInteraction.d.ts +72 -0
  278. package/dist/beta/components/SelectMenu/types.d.ts +153 -0
  279. package/dist/beta/components/Table/DataTable/internal/cells/CellFocusContext.d.ts +1 -1
  280. package/dist/beta/components/Table/DataTable/internal/cells/CellStatus.d.ts +12 -0
  281. package/dist/beta/components/Table/types.d.ts +14 -0
  282. package/dist/beta/components/Toolbar/ToolbarSelect.d.ts +3 -3
  283. package/dist/beta/components/index.d.ts +2 -0
  284. package/dist/beta.js +10 -8
  285. package/dist/beta.js.map +1 -1
  286. package/dist/components/Avatar/Avatar.figma.d.ts +1 -0
  287. package/dist/components/Breadcrumbs/Breadcrumbs.figma.d.ts +1 -0
  288. package/dist/components/Card/Card.figma.d.ts +1 -0
  289. package/dist/components/Checkbox/Checkbox.figma.d.ts +1 -0
  290. package/dist/components/Chip/Chip.figma.d.ts +1 -0
  291. package/dist/components/Combobox/ComboboxTypes.d.ts +1 -1
  292. package/dist/components/DateFieldYearless/internal/YearlessDateSelectionPopover.d.ts +1 -1
  293. package/dist/components/FieldLabel/FieldLabel.d.ts +3 -0
  294. package/dist/components/FieldLabel/internal/FieldLabelButton.d.ts +22 -0
  295. package/dist/components/FieldLabel/internal/FieldLabelMoreInfoIcon.d.ts +4 -6
  296. package/dist/components/Link/Link.figma.d.ts +1 -0
  297. package/dist/components/ProgressBar/ProgressBar.figma.d.ts +1 -0
  298. package/dist/components/SelectTrigger/SelectTrigger.d.ts +1 -1
  299. package/dist/components/Spinner/Spinner.figma.d.ts +1 -0
  300. package/dist/components/Textarea/Textarea.d.ts +1 -1
  301. package/dist/components/Toolbar/ToolbarSelect.d.ts +3 -3
  302. package/dist/components/Tooltip/Tooltip.figma.d.ts +1 -0
  303. package/dist/{match-sorter.esm-adzV1NDp.js → downshift.esm-xtSnQp44.js} +3 -907
  304. package/dist/downshift.esm-xtSnQp44.js.map +1 -0
  305. package/dist/floating-ui.react-aKYfs-aw.js +2374 -0
  306. package/dist/floating-ui.react-aKYfs-aw.js.map +1 -0
  307. package/dist/{floating-ui.react-dom-BZbDMh89.js → floating-ui.react-dom-imrk9N49.js} +237 -19
  308. package/dist/floating-ui.react-dom-imrk9N49.js.map +1 -0
  309. package/dist/hooks/useBreakpoint/useBreakpoint.d.ts +3 -3
  310. package/dist/{index-ClUtwV8V.js → index-D6ag_WQW.js} +4 -4
  311. package/dist/{index-ClUtwV8V.js.map → index-D6ag_WQW.js.map} +1 -1
  312. package/dist/{index-SvGbrGuT.js → index-De1g9FRV.js} +2 -2
  313. package/dist/{index-SvGbrGuT.js.map → index-De1g9FRV.js.map} +1 -1
  314. package/dist/index.js +73 -99
  315. package/dist/index.js.map +1 -1
  316. package/dist/internal/components/MultiSelectOptions.d.ts +23 -0
  317. package/dist/{beta/components/SelectField/internal/FieldDialog/FieldDialog.d.ts → internal/components/OptionsDialog/OptionsDialog.d.ts} +2 -2
  318. package/dist/internal/components/OptionsPanel.d.ts +26 -0
  319. package/dist/internal/components/OptionsPopover/OptionsPopover.d.ts +16 -0
  320. package/dist/internal/components/Popover/Popover.d.ts +267 -0
  321. package/dist/internal/components/Popover/PopoverButton.d.ts +24 -0
  322. package/dist/internal/components/Popover/PopoverClose.d.ts +24 -0
  323. package/dist/internal/components/Popover/PopoverContent.d.ts +34 -0
  324. package/dist/internal/components/Popover/PopoverTrigger.d.ts +46 -0
  325. package/dist/internal/components/Popover/index.d.ts +6 -0
  326. package/dist/internal/components/Popover/internal/PopoverContext.d.ts +45 -0
  327. package/dist/internal/components/Popover/internal/usePopoverContext.d.ts +6 -0
  328. package/dist/internal/components/SelectOption.d.ts +13 -0
  329. package/dist/internal/components/SelectOptions.d.ts +23 -0
  330. package/dist/internal/components/VirtualizedOptionsPanel.d.ts +2 -0
  331. package/dist/internal/functions/buildSelectItems.d.ts +22 -0
  332. package/dist/internal/functions/syncFilterUtils.d.ts +10 -0
  333. package/dist/{beta/components/SelectField/internal → internal/hooks}/useGroupedOptions.d.ts +4 -3
  334. package/dist/{beta/components/SelectField/internal/useFieldListSections.d.ts → internal/hooks/useOptionsSections.d.ts} +7 -8
  335. package/dist/{beta/components/SelectField/internal → internal/hooks}/usePinnedOptions.d.ts +1 -1
  336. package/dist/{beta/components/SelectField/internal → internal/hooks}/useProcessedOptions.d.ts +2 -2
  337. package/dist/internal/hooks/useSelectOrchestration.d.ts +38 -0
  338. package/dist/{beta/components/MultiSelectField/internal → internal/hooks}/useToggleSelection.d.ts +2 -2
  339. package/dist/{beta/components/SelectField/internal/types.d.ts → internal/types/selectFieldInternalTypes.d.ts} +11 -3
  340. package/dist/match-sorter.esm-CGAauEiU.js +908 -0
  341. package/dist/match-sorter.esm-CGAauEiU.js.map +1 -0
  342. package/dist/safePopover-BDso-xSH.js +17 -0
  343. package/dist/safePopover-BDso-xSH.js.map +1 -0
  344. package/dist/{FieldDialog-C5mwMjrr.js → syncFilterUtils-BRKjFwxk.js} +287 -146
  345. package/dist/syncFilterUtils-BRKjFwxk.js.map +1 -0
  346. package/dist/{FieldDialog.css → syncFilterUtils.css} +18 -11
  347. package/dist/{useBreakpoint-BP3HZXmh.js → useBreakpoint-okJ64T1D.js} +4 -3
  348. package/dist/useBreakpoint-okJ64T1D.js.map +1 -0
  349. package/dist/useBreakpoint.js +1 -1
  350. package/dist/{useDrilldown-hUxMOdnz.js → useDrilldown-CqBBB_r1.js} +5 -5
  351. package/dist/{useDrilldown-hUxMOdnz.js.map → useDrilldown-CqBBB_r1.js.map} +1 -1
  352. package/dist/{useLayoutPropsUtil-loxbyklF.js → useLayoutPropsUtil-DMDdfIah.js} +2 -2
  353. package/dist/{useLayoutPropsUtil-loxbyklF.js.map → useLayoutPropsUtil-DMDdfIah.js.map} +1 -1
  354. package/dist/useMenuInteraction-zR_78KQC.js +249 -0
  355. package/dist/useMenuInteraction-zR_78KQC.js.map +1 -0
  356. package/dist/usePopoverTransitionStates-CDIoNUuf.js +24 -0
  357. package/dist/usePopoverTransitionStates-CDIoNUuf.js.map +1 -0
  358. package/dist/useToggleSelection-JD62Jzqu.js +63 -0
  359. package/dist/useToggleSelection-JD62Jzqu.js.map +1 -0
  360. package/dist/{utils-pudAMGnO.js → utils-CM48ODEJ.js} +3 -13
  361. package/dist/utils-CM48ODEJ.js.map +1 -0
  362. package/dist/warnOnce-Y9PRHcU4.js +13 -0
  363. package/dist/warnOnce-Y9PRHcU4.js.map +1 -0
  364. package/package.json +1 -1
  365. package/dist/Button.module-DwCq9XU0.js +0 -26
  366. package/dist/Button.module-DwCq9XU0.js.map +0 -1
  367. package/dist/Checkbox-CxjZpzPp.js.map +0 -1
  368. package/dist/Checkbox.module-D4EgXL0i.js +0 -27
  369. package/dist/Checkbox.module-D4EgXL0i.js.map +0 -1
  370. package/dist/Combobox-Drqb3GVU.js.map +0 -1
  371. package/dist/DataTable-BLuJ4FtH.js.map +0 -1
  372. package/dist/DateFieldRange-CvlOeE4v.js.map +0 -1
  373. package/dist/DateFieldSingle-9UHxIxIA.js.map +0 -1
  374. package/dist/DateFieldYearless-HNydELvO.js.map +0 -1
  375. package/dist/DateFieldYearlessRange-COb8v2CG.js.map +0 -1
  376. package/dist/FieldDialog-C5mwMjrr.js.map +0 -1
  377. package/dist/FieldLabel-DL0D6fvc.js +0 -95
  378. package/dist/FieldLabel-DL0D6fvc.js.map +0 -1
  379. package/dist/Listbox.module-XuKszT3X.js +0 -18
  380. package/dist/Listbox.module-XuKszT3X.js.map +0 -1
  381. package/dist/MultiSelectFieldSync-BnPzYM72.js.map +0 -1
  382. package/dist/NumberField-ecubQsaf.js.map +0 -1
  383. package/dist/Popover-CYWYCj7l.js.map +0 -1
  384. package/dist/Radio-DtYoRq3m.js.map +0 -1
  385. package/dist/SelectFieldSync-DCrafdbx.js.map +0 -1
  386. package/dist/SelectTrigger-Cs5CGc4D.js.map +0 -1
  387. package/dist/TextField-atI4M79b.js.map +0 -1
  388. package/dist/Textarea-D-kPIsIN.js.map +0 -1
  389. package/dist/TimeField-DREFzFkw.js.map +0 -1
  390. package/dist/Toolbar-jfZ-CupZ.js.map +0 -1
  391. package/dist/Tooltip-Bt62hC5J.js.map +0 -1
  392. package/dist/YearlessDateInputWithPicker-mW5KykHZ.js.map +0 -1
  393. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +0 -24
  394. package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +0 -27
  395. package/dist/beta/components/SelectField/internal/FieldPopover/FieldPopover.d.ts +0 -9
  396. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +0 -26
  397. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +0 -14
  398. package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +0 -2
  399. package/dist/beta/components/SelectField/internal/buildDownshiftItems.d.ts +0 -22
  400. package/dist/beta/components/Table/DataTable/internal/cells/CellError.d.ts +0 -10
  401. package/dist/floating-ui.react-P5949bpO.js +0 -28
  402. package/dist/floating-ui.react-P5949bpO.js.map +0 -1
  403. package/dist/floating-ui.react-dom-BZbDMh89.js.map +0 -1
  404. package/dist/match-sorter.esm-adzV1NDp.js.map +0 -1
  405. package/dist/useBreakpoint-BP3HZXmh.js.map +0 -1
  406. package/dist/utils-pudAMGnO.js.map +0 -1
  407. /package/dist/{beta/components/SelectField/internal → internal/components}/InView.d.ts +0 -0
@@ -1,5 +1,5 @@
1
1
  import { useMemo } from 'react';
2
- import { u as useBreakpoint } from './useBreakpoint-BP3HZXmh.js';
2
+ import { u as useBreakpoint } from './useBreakpoint-okJ64T1D.js';
3
3
  import { p as primitive } from './primitive-C3RFDRA8.js';
4
4
 
5
5
  const sizeToToken = (value) => {
@@ -90,4 +90,4 @@ function useLayoutPropsUtil(props) {
90
90
  }
91
91
 
92
92
  export { sizeToToken as s, useLayoutPropsUtil as u };
93
- //# sourceMappingURL=useLayoutPropsUtil-loxbyklF.js.map
93
+ //# sourceMappingURL=useLayoutPropsUtil-DMDdfIah.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLayoutPropsUtil-loxbyklF.js","sources":["../src/internal/functions/sizeToToken.ts","../src/internal/hooks/useLayoutPropsUtil/useLayoutPropsUtil.ts"],"sourcesContent":["import { core } from \"@servicetitan/hammer-token\";\nimport { GapSize } from \"../../types\";\n\ntype PrimitiveSizes =\n | \"Size0\"\n | \"SizeHalf\"\n | \"Size1\"\n | \"Size2\"\n | \"Size3\"\n | \"Size4\"\n | \"Size5\"\n | \"Size6\"\n | \"Size7\"\n | \"Size8\"\n | \"Size9\"\n | \"Size10\"\n | \"Size11\"\n | \"Size12\"\n | \"Size13\"\n | \"Size14\";\n\nexport const sizeToToken = (value?: GapSize) => {\n if (typeof value === \"undefined\") return undefined;\n let gap = value;\n const stringifiedValue = String(value);\n if (stringifiedValue === \"half\") {\n gap =\n `${stringifiedValue[0].toUpperCase()}${stringifiedValue.slice(1)}` as GapSize;\n }\n\n return core.primitive?.[`Size${gap}` as PrimitiveSizes]?.value;\n};\n","import { CSSProperties, useMemo } from \"react\";\nimport { GapSize, LayoutUtilProps } from \"../../../types\";\nimport { useBreakpoint } from \"../../../hooks/useBreakpoint\";\nimport { sizeToToken } from \"../../functions/sizeToToken\";\n\nconst LAYOUT_PROP_ARR = [\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n \"gridTemplateAreas\",\n \"gridAutoColumns\",\n \"gridAutoRows\",\n \"gridArea\",\n \"gridColumn\",\n \"gridRow\",\n \"gridColumnStart\",\n \"gridColumnEnd\",\n \"gridRowStart\",\n \"gridRowEnd\",\n \"flex\",\n \"flexDirection\",\n \"flexGrow\",\n \"flexShrink\",\n \"flexBasis\",\n \"flexWrap\",\n \"order\",\n \"justifySelf\",\n \"justifyItems\",\n \"justifyContent\",\n \"alignSelf\",\n \"alignItems\",\n \"alignContent\",\n \"placeItems\",\n \"placeContent\",\n \"placeSelf\",\n \"wrap\",\n \"gap\",\n \"rowGap\",\n \"columnGap\",\n];\n\nconst RESPONSIVE_SIZES_ARR = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"];\n\n/**\n * Layout CSS variables type excluding responsive properties\n */\ntype LayoutCSSVariables = Omit<LayoutUtilProps, keyof ResponsiveLayout>;\n\n/**\n * Responsive layout configuration type\n */\ntype ResponsiveLayout = {\n /**\n * Base layout properties\n */\n base?: LayoutUtilProps;\n /**\n * Extra small breakpoint layout properties\n */\n xs?: LayoutUtilProps;\n /**\n * Small breakpoint layout properties\n */\n sm?: LayoutUtilProps;\n /**\n * Medium breakpoint layout properties\n */\n md?: LayoutUtilProps;\n /**\n * Large breakpoint layout properties\n */\n lg?: LayoutUtilProps;\n /**\n * Extra large breakpoint layout properties\n */\n xl?: LayoutUtilProps;\n /**\n * Extra extra large breakpoint layout properties\n */\n xxl?: LayoutUtilProps;\n};\n\n/**\n * Custom hook for managing responsive layout properties and CSS styles.\n *\n * Features:\n * - Separates layout properties from component properties\n * - Provides responsive breakpoint support for all layout properties\n * - Automatically converts gap sizes to CSS tokens\n * - Uses breakpoint cascade for responsive values\n * - Optimized with useMemo for performance\n * - Supports all CSS Grid and Flexbox properties\n * - Handles responsive size inheritance (larger breakpoints inherit from smaller ones)\n * - Returns both layout styles and filtered component props\n *\n * @param props - Object containing layout and component properties\n * @returns Object containing layout styles and filtered component props\n */\nexport function useLayoutPropsUtil<T extends ResponsiveLayout>(\n props: T,\n): { layoutStyles?: CSSProperties; componentProps: T } {\n const baseSizeProps = Object.fromEntries(\n Object.entries(props).filter(([key, _val]) =>\n LAYOUT_PROP_ARR.includes(key),\n ),\n );\n\n const responsiveSizeProps = Object.fromEntries(\n Object.entries(props).filter(([key, _val]) =>\n RESPONSIVE_SIZES_ARR.includes(key),\n ),\n );\n\n const sizeProps: ResponsiveLayout = useMemo(\n () => ({\n ...responsiveSizeProps,\n base: baseSizeProps,\n }),\n [baseSizeProps, responsiveSizeProps],\n );\n\n const componentProps = Object.fromEntries(\n Object.entries(props).filter(\n ([key, _val]) =>\n !RESPONSIVE_SIZES_ARR.includes(key) && !LAYOUT_PROP_ARR.includes(key),\n ),\n );\n\n const breakpoint = useBreakpoint();\n\n const getValue = (style: keyof LayoutCSSVariables) => {\n const value =\n (breakpoint?.xxl ? sizeProps.xxl?.[style] : undefined) ??\n (breakpoint?.xl ? sizeProps.xl?.[style] : undefined) ??\n (breakpoint?.lg ? sizeProps.lg?.[style] : undefined) ??\n (breakpoint?.md ? sizeProps.md?.[style] : undefined) ??\n (breakpoint?.sm ? sizeProps.sm?.[style] : undefined) ??\n (breakpoint?.xs ? sizeProps.xs?.[style] : undefined) ??\n sizeProps.base?.[style];\n\n // Convert gap sizes to design tokens\n if (style.toLowerCase().endsWith(\"gap\")) {\n return sizeToToken(value as GapSize);\n }\n\n return value;\n };\n\n const layoutStyleObject = LAYOUT_PROP_ARR.reduce((o, key) => {\n const value = getValue(key as keyof LayoutCSSVariables);\n\n if (typeof value === \"undefined\") return o;\n return { ...o, [key]: value };\n }, {});\n\n return {\n layoutStyles: layoutStyleObject,\n componentProps: componentProps as T,\n };\n}\n"],"names":["core.primitive"],"mappings":"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"}
1
+ {"version":3,"file":"useLayoutPropsUtil-DMDdfIah.js","sources":["../src/internal/functions/sizeToToken.ts","../src/internal/hooks/useLayoutPropsUtil/useLayoutPropsUtil.ts"],"sourcesContent":["import { core } from \"@servicetitan/hammer-token\";\nimport { GapSize } from \"../../types\";\n\ntype PrimitiveSizes =\n | \"Size0\"\n | \"SizeHalf\"\n | \"Size1\"\n | \"Size2\"\n | \"Size3\"\n | \"Size4\"\n | \"Size5\"\n | \"Size6\"\n | \"Size7\"\n | \"Size8\"\n | \"Size9\"\n | \"Size10\"\n | \"Size11\"\n | \"Size12\"\n | \"Size13\"\n | \"Size14\";\n\nexport const sizeToToken = (value?: GapSize) => {\n if (typeof value === \"undefined\") return undefined;\n let gap = value;\n const stringifiedValue = String(value);\n if (stringifiedValue === \"half\") {\n gap =\n `${stringifiedValue[0].toUpperCase()}${stringifiedValue.slice(1)}` as GapSize;\n }\n\n return core.primitive?.[`Size${gap}` as PrimitiveSizes]?.value;\n};\n","import { CSSProperties, useMemo } from \"react\";\nimport { GapSize, LayoutUtilProps } from \"../../../types\";\nimport { useBreakpoint } from \"../../../hooks/useBreakpoint\";\nimport { sizeToToken } from \"../../functions/sizeToToken\";\n\nconst LAYOUT_PROP_ARR = [\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n \"gridTemplateAreas\",\n \"gridAutoColumns\",\n \"gridAutoRows\",\n \"gridArea\",\n \"gridColumn\",\n \"gridRow\",\n \"gridColumnStart\",\n \"gridColumnEnd\",\n \"gridRowStart\",\n \"gridRowEnd\",\n \"flex\",\n \"flexDirection\",\n \"flexGrow\",\n \"flexShrink\",\n \"flexBasis\",\n \"flexWrap\",\n \"order\",\n \"justifySelf\",\n \"justifyItems\",\n \"justifyContent\",\n \"alignSelf\",\n \"alignItems\",\n \"alignContent\",\n \"placeItems\",\n \"placeContent\",\n \"placeSelf\",\n \"wrap\",\n \"gap\",\n \"rowGap\",\n \"columnGap\",\n];\n\nconst RESPONSIVE_SIZES_ARR = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"];\n\n/**\n * Layout CSS variables type excluding responsive properties\n */\ntype LayoutCSSVariables = Omit<LayoutUtilProps, keyof ResponsiveLayout>;\n\n/**\n * Responsive layout configuration type\n */\ntype ResponsiveLayout = {\n /**\n * Base layout properties\n */\n base?: LayoutUtilProps;\n /**\n * Extra small breakpoint layout properties\n */\n xs?: LayoutUtilProps;\n /**\n * Small breakpoint layout properties\n */\n sm?: LayoutUtilProps;\n /**\n * Medium breakpoint layout properties\n */\n md?: LayoutUtilProps;\n /**\n * Large breakpoint layout properties\n */\n lg?: LayoutUtilProps;\n /**\n * Extra large breakpoint layout properties\n */\n xl?: LayoutUtilProps;\n /**\n * Extra extra large breakpoint layout properties\n */\n xxl?: LayoutUtilProps;\n};\n\n/**\n * Custom hook for managing responsive layout properties and CSS styles.\n *\n * Features:\n * - Separates layout properties from component properties\n * - Provides responsive breakpoint support for all layout properties\n * - Automatically converts gap sizes to CSS tokens\n * - Uses breakpoint cascade for responsive values\n * - Optimized with useMemo for performance\n * - Supports all CSS Grid and Flexbox properties\n * - Handles responsive size inheritance (larger breakpoints inherit from smaller ones)\n * - Returns both layout styles and filtered component props\n *\n * @param props - Object containing layout and component properties\n * @returns Object containing layout styles and filtered component props\n */\nexport function useLayoutPropsUtil<T extends ResponsiveLayout>(\n props: T,\n): { layoutStyles?: CSSProperties; componentProps: T } {\n const baseSizeProps = Object.fromEntries(\n Object.entries(props).filter(([key, _val]) =>\n LAYOUT_PROP_ARR.includes(key),\n ),\n );\n\n const responsiveSizeProps = Object.fromEntries(\n Object.entries(props).filter(([key, _val]) =>\n RESPONSIVE_SIZES_ARR.includes(key),\n ),\n );\n\n const sizeProps: ResponsiveLayout = useMemo(\n () => ({\n ...responsiveSizeProps,\n base: baseSizeProps,\n }),\n [baseSizeProps, responsiveSizeProps],\n );\n\n const componentProps = Object.fromEntries(\n Object.entries(props).filter(\n ([key, _val]) =>\n !RESPONSIVE_SIZES_ARR.includes(key) && !LAYOUT_PROP_ARR.includes(key),\n ),\n );\n\n const breakpoint = useBreakpoint();\n\n const getValue = (style: keyof LayoutCSSVariables) => {\n const value =\n (breakpoint?.xxl ? sizeProps.xxl?.[style] : undefined) ??\n (breakpoint?.xl ? sizeProps.xl?.[style] : undefined) ??\n (breakpoint?.lg ? sizeProps.lg?.[style] : undefined) ??\n (breakpoint?.md ? sizeProps.md?.[style] : undefined) ??\n (breakpoint?.sm ? sizeProps.sm?.[style] : undefined) ??\n (breakpoint?.xs ? sizeProps.xs?.[style] : undefined) ??\n sizeProps.base?.[style];\n\n // Convert gap sizes to design tokens\n if (style.toLowerCase().endsWith(\"gap\")) {\n return sizeToToken(value as GapSize);\n }\n\n return value;\n };\n\n const layoutStyleObject = LAYOUT_PROP_ARR.reduce((o, key) => {\n const value = getValue(key as keyof LayoutCSSVariables);\n\n if (typeof value === \"undefined\") return o;\n return { ...o, [key]: value };\n }, {});\n\n return {\n layoutStyles: layoutStyleObject,\n componentProps: componentProps as T,\n };\n}\n"],"names":["core.primitive"],"mappings":"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"}
@@ -0,0 +1,249 @@
1
+ import { useState, useId, useRef, useCallback } from 'react';
2
+
3
+ const useMenuInteraction = ({
4
+ items,
5
+ sectionsMeta: _sectionsMeta,
6
+ onItemActivate,
7
+ selectedItemIds,
8
+ displayAs: _displayAs,
9
+ closeOnActivate,
10
+ disabled = false,
11
+ id,
12
+ triggerRef,
13
+ label
14
+ }) => {
15
+ const [isOpen, setIsOpen] = useState(false);
16
+ const [highlightedIndex, setHighlightedIndex] = useState(-1);
17
+ const generatedId = useId();
18
+ const menuId = `${id}-menu-${generatedId}`;
19
+ const menuContainerRef = useRef(null);
20
+ const listRef = useRef(null);
21
+ const isItemDisabled = useCallback(
22
+ (item) => {
23
+ return (disabled || item.disabled) ?? false;
24
+ },
25
+ [disabled]
26
+ );
27
+ const findNextEnabledIndex = useCallback(
28
+ (startIndex, direction, wrap = true) => {
29
+ if (items.length === 0) return -1;
30
+ const len = items.length;
31
+ let index = startIndex;
32
+ for (let i = 0; i < len; i++) {
33
+ index = wrap ? (index + direction + len) % len : Math.min(Math.max(index + direction, 0), len - 1);
34
+ if (!isItemDisabled(items[index])) return index;
35
+ if (!wrap && (index === 0 || index === len - 1)) return -1;
36
+ }
37
+ return -1;
38
+ },
39
+ [items, isItemDisabled]
40
+ );
41
+ const openMenu = useCallback(() => {
42
+ if (disabled) return;
43
+ setIsOpen(true);
44
+ }, [disabled]);
45
+ const closeMenu = useCallback(
46
+ (options) => {
47
+ setIsOpen(false);
48
+ setHighlightedIndex(-1);
49
+ if (options?.restoreFocus !== false) {
50
+ triggerRef.current?.focus();
51
+ }
52
+ },
53
+ [triggerRef]
54
+ );
55
+ const getItemId = useCallback(
56
+ (index) => `${menuId}-option-${index}`,
57
+ [menuId]
58
+ );
59
+ const handleKeyDown = useCallback(
60
+ (e) => {
61
+ if (!isOpen) return;
62
+ switch (e.key) {
63
+ case "ArrowDown": {
64
+ e.preventDefault();
65
+ const next = highlightedIndex < 0 ? findNextEnabledIndex(-1, 1) : findNextEnabledIndex(highlightedIndex, 1);
66
+ if (next >= 0) {
67
+ setHighlightedIndex(next);
68
+ listRef.current?.scrollToIndex(next);
69
+ }
70
+ break;
71
+ }
72
+ case "ArrowUp": {
73
+ e.preventDefault();
74
+ const prev = highlightedIndex < 0 ? findNextEnabledIndex(items.length, -1) : findNextEnabledIndex(highlightedIndex, -1);
75
+ if (prev >= 0) {
76
+ setHighlightedIndex(prev);
77
+ listRef.current?.scrollToIndex(prev);
78
+ }
79
+ break;
80
+ }
81
+ case "Home": {
82
+ e.preventDefault();
83
+ const first = findNextEnabledIndex(-1, 1, false);
84
+ if (first >= 0) {
85
+ setHighlightedIndex(first);
86
+ listRef.current?.scrollToIndex(first);
87
+ }
88
+ break;
89
+ }
90
+ case "End": {
91
+ e.preventDefault();
92
+ const last = findNextEnabledIndex(items.length, -1, false);
93
+ if (last >= 0) {
94
+ setHighlightedIndex(last);
95
+ listRef.current?.scrollToIndex(last);
96
+ }
97
+ break;
98
+ }
99
+ case "Enter": {
100
+ e.preventDefault();
101
+ if (highlightedIndex >= 0 && highlightedIndex < items.length) {
102
+ const item = items[highlightedIndex];
103
+ if (!isItemDisabled(item)) {
104
+ onItemActivate(item);
105
+ if (closeOnActivate) {
106
+ closeMenu();
107
+ }
108
+ }
109
+ }
110
+ break;
111
+ }
112
+ case " ": {
113
+ const target = e.target;
114
+ if (target.tagName === "INPUT") break;
115
+ e.preventDefault();
116
+ if (highlightedIndex >= 0 && highlightedIndex < items.length) {
117
+ const item = items[highlightedIndex];
118
+ if (!isItemDisabled(item)) {
119
+ onItemActivate(item);
120
+ if (closeOnActivate) {
121
+ closeMenu();
122
+ }
123
+ }
124
+ }
125
+ break;
126
+ }
127
+ case "Escape": {
128
+ e.preventDefault();
129
+ closeMenu();
130
+ break;
131
+ }
132
+ case "Tab": {
133
+ closeMenu({ restoreFocus: false });
134
+ break;
135
+ }
136
+ }
137
+ },
138
+ [
139
+ isOpen,
140
+ highlightedIndex,
141
+ items,
142
+ findNextEnabledIndex,
143
+ isItemDisabled,
144
+ onItemActivate,
145
+ closeOnActivate,
146
+ closeMenu
147
+ ]
148
+ );
149
+ const handleTriggerKeyDown = useCallback(
150
+ (e) => {
151
+ if (e.key === "ArrowDown" || e.key === "ArrowUp") {
152
+ e.preventDefault();
153
+ if (!isOpen) openMenu();
154
+ }
155
+ if (e.key === "Enter" || e.key === " ") {
156
+ e.preventDefault();
157
+ if (isOpen) {
158
+ closeMenu();
159
+ } else {
160
+ openMenu();
161
+ }
162
+ }
163
+ },
164
+ [isOpen, openMenu, closeMenu]
165
+ );
166
+ const getTriggerProps = useCallback(() => {
167
+ return {
168
+ ref: triggerRef,
169
+ onClick: () => {
170
+ if (isOpen) {
171
+ closeMenu();
172
+ } else {
173
+ openMenu();
174
+ }
175
+ },
176
+ onKeyDown: handleTriggerKeyDown,
177
+ "aria-haspopup": "listbox",
178
+ "aria-controls": menuId,
179
+ "aria-expanded": isOpen,
180
+ "data-state": isOpen ? "open" : "close"
181
+ };
182
+ }, [isOpen, openMenu, closeMenu, menuId, handleTriggerKeyDown, triggerRef]);
183
+ const getMenuProps = useCallback(
184
+ (opts) => {
185
+ return {
186
+ role: "listbox",
187
+ id: menuId,
188
+ "aria-label": label,
189
+ tabIndex: 0,
190
+ "aria-activedescendant": highlightedIndex >= 0 ? getItemId(highlightedIndex) : void 0,
191
+ ref: menuContainerRef,
192
+ onKeyDown: handleKeyDown,
193
+ className: opts?.className,
194
+ style: { outline: "none", ...opts?.style }
195
+ };
196
+ },
197
+ [menuId, label, highlightedIndex, getItemId, handleKeyDown]
198
+ );
199
+ const getItemProps = useCallback(
200
+ (opts) => {
201
+ const { item, index, className, "data-type": dataType } = opts;
202
+ return {
203
+ role: "option",
204
+ id: getItemId(index),
205
+ "aria-selected": selectedItemIds.has(item.original.id),
206
+ "aria-disabled": isItemDisabled(item) || void 0,
207
+ onClick: () => {
208
+ if (isItemDisabled(item)) return;
209
+ onItemActivate(item);
210
+ if (closeOnActivate) {
211
+ closeMenu();
212
+ }
213
+ },
214
+ onMouseMove: () => {
215
+ if (highlightedIndex !== index) {
216
+ setHighlightedIndex(index);
217
+ }
218
+ },
219
+ className,
220
+ "data-type": dataType
221
+ };
222
+ },
223
+ [
224
+ getItemId,
225
+ selectedItemIds,
226
+ isItemDisabled,
227
+ onItemActivate,
228
+ closeOnActivate,
229
+ closeMenu,
230
+ highlightedIndex
231
+ ]
232
+ );
233
+ return {
234
+ isOpen,
235
+ openMenu,
236
+ closeMenu,
237
+ highlightedIndex,
238
+ setHighlightedIndex,
239
+ getTriggerProps,
240
+ getMenuProps,
241
+ getItemProps,
242
+ listRef,
243
+ menuContainerRef,
244
+ handleKeyDown
245
+ };
246
+ };
247
+
248
+ export { useMenuInteraction as u };
249
+ //# sourceMappingURL=useMenuInteraction-zR_78KQC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMenuInteraction-zR_78KQC.js","sources":["../src/beta/components/SelectMenu/internal/useMenuInteraction.ts"],"sourcesContent":["import {\n CSSProperties,\n KeyboardEvent,\n RefObject,\n useCallback,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {\n SelectItem,\n SectionMeta,\n} from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\n\nexport type UseMenuInteractionConfig = {\n items: SelectItem[];\n sectionsMeta: SectionMeta[];\n onItemActivate: (item: SelectItem) => void;\n selectedItemIds: Set<string | number>;\n displayAs: \"popover\" | \"dialog\";\n closeOnActivate: boolean;\n disabled?: boolean;\n id: string;\n triggerRef: RefObject<HTMLButtonElement>;\n label: string;\n};\n\nexport type MenuTriggerProps = {\n ref: RefObject<HTMLButtonElement>;\n onClick: () => void;\n onKeyDown: (e: KeyboardEvent) => void;\n \"aria-haspopup\": \"listbox\";\n \"aria-controls\": string;\n \"aria-expanded\": boolean;\n \"data-state\": \"open\" | \"close\";\n};\n\ntype MenuPropsArg = {\n className?: string;\n style?: CSSProperties;\n};\n\ntype MenuReturnProps = MenuPropsArg & {\n role: \"listbox\";\n id: string;\n \"aria-label\": string;\n \"aria-labelledby\"?: string;\n tabIndex?: number;\n \"aria-activedescendant\"?: string;\n ref: RefObject<HTMLDivElement>;\n onKeyDown: (e: KeyboardEvent) => void;\n};\n\ntype ItemPropsArg = {\n item: SelectItem;\n index: number;\n className?: string;\n \"data-type\"?: string;\n};\n\ntype ItemReturnProps = {\n role: \"option\";\n id: string;\n \"aria-selected\": boolean;\n \"aria-disabled\"?: boolean;\n onClick: () => void;\n onMouseMove: () => void;\n className?: string;\n \"data-type\"?: string;\n};\n\nexport type GetMenuPropsFn = (opts?: MenuPropsArg) => MenuReturnProps;\nexport type GetItemPropsFn = (opts: ItemPropsArg) => ItemReturnProps;\n\nexport const useMenuInteraction = ({\n items,\n sectionsMeta: _sectionsMeta,\n onItemActivate,\n selectedItemIds,\n displayAs: _displayAs,\n closeOnActivate,\n disabled = false,\n id,\n triggerRef,\n label,\n}: UseMenuInteractionConfig) => {\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const generatedId = useId();\n const menuId = `${id}-menu-${generatedId}`;\n const menuContainerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const isItemDisabled = useCallback(\n (item: SelectItem) => {\n return (disabled || item.disabled) ?? false;\n },\n [disabled],\n );\n\n const findNextEnabledIndex = useCallback(\n (startIndex: number, direction: 1 | -1, wrap = true): number => {\n if (items.length === 0) return -1;\n const len = items.length;\n let index = startIndex;\n for (let i = 0; i < len; i++) {\n index = wrap\n ? (index + direction + len) % len\n : Math.min(Math.max(index + direction, 0), len - 1);\n if (!isItemDisabled(items[index])) return index;\n if (!wrap && (index === 0 || index === len - 1)) return -1;\n }\n return -1;\n },\n [items, isItemDisabled],\n );\n\n const openMenu = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n const closeMenu = useCallback(\n (options?: { restoreFocus?: boolean }) => {\n setIsOpen(false);\n setHighlightedIndex(-1);\n if (options?.restoreFocus !== false) {\n triggerRef.current?.focus();\n }\n },\n [triggerRef],\n );\n\n const getItemId = useCallback(\n (index: number) => `${menuId}-option-${index}`,\n [menuId],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen) return;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const next =\n highlightedIndex < 0\n ? findNextEnabledIndex(-1, 1)\n : findNextEnabledIndex(highlightedIndex, 1);\n if (next >= 0) {\n setHighlightedIndex(next);\n listRef.current?.scrollToIndex(next);\n }\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prev =\n highlightedIndex < 0\n ? findNextEnabledIndex(items.length, -1)\n : findNextEnabledIndex(highlightedIndex, -1);\n if (prev >= 0) {\n setHighlightedIndex(prev);\n listRef.current?.scrollToIndex(prev);\n }\n break;\n }\n case \"Home\": {\n e.preventDefault();\n const first = findNextEnabledIndex(-1, 1, false);\n if (first >= 0) {\n setHighlightedIndex(first);\n listRef.current?.scrollToIndex(first);\n }\n break;\n }\n case \"End\": {\n e.preventDefault();\n const last = findNextEnabledIndex(items.length, -1, false);\n if (last >= 0) {\n setHighlightedIndex(last);\n listRef.current?.scrollToIndex(last);\n }\n break;\n }\n case \"Enter\": {\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < items.length) {\n const item = items[highlightedIndex];\n if (!isItemDisabled(item)) {\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n }\n }\n break;\n }\n case \" \": {\n // Only activate on Space when the menu container itself has focus.\n // If a search input is focused, Space should type a space character.\n const target = e.target as HTMLElement;\n if (target.tagName === \"INPUT\") break;\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < items.length) {\n const item = items[highlightedIndex];\n if (!isItemDisabled(item)) {\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n }\n }\n break;\n }\n case \"Escape\": {\n e.preventDefault();\n closeMenu();\n break;\n }\n case \"Tab\": {\n closeMenu({ restoreFocus: false });\n break;\n }\n }\n },\n [\n isOpen,\n highlightedIndex,\n items,\n findNextEnabledIndex,\n isItemDisabled,\n onItemActivate,\n closeOnActivate,\n closeMenu,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n if (!isOpen) openMenu();\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n }\n },\n [isOpen, openMenu, closeMenu],\n );\n\n const getTriggerProps = useCallback((): MenuTriggerProps => {\n return {\n ref: triggerRef,\n onClick: () => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n },\n onKeyDown: handleTriggerKeyDown,\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": menuId,\n \"aria-expanded\": isOpen,\n \"data-state\": isOpen ? \"open\" : \"close\",\n };\n }, [isOpen, openMenu, closeMenu, menuId, handleTriggerKeyDown, triggerRef]);\n\n const getMenuProps: GetMenuPropsFn = useCallback(\n (opts?: MenuPropsArg): MenuReturnProps => {\n return {\n role: \"listbox\",\n id: menuId,\n \"aria-label\": label,\n tabIndex: 0,\n \"aria-activedescendant\":\n highlightedIndex >= 0 ? getItemId(highlightedIndex) : undefined,\n ref: menuContainerRef,\n onKeyDown: handleKeyDown,\n className: opts?.className,\n style: { outline: \"none\", ...opts?.style },\n };\n },\n [menuId, label, highlightedIndex, getItemId, handleKeyDown],\n );\n\n const getItemProps: GetItemPropsFn = useCallback(\n (opts: ItemPropsArg): ItemReturnProps => {\n const { item, index, className, \"data-type\": dataType } = opts;\n return {\n role: \"option\",\n id: getItemId(index),\n \"aria-selected\": selectedItemIds.has(item.original.id),\n \"aria-disabled\": isItemDisabled(item) || undefined,\n onClick: () => {\n if (isItemDisabled(item)) return;\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n },\n onMouseMove: () => {\n if (highlightedIndex !== index) {\n setHighlightedIndex(index);\n }\n },\n className,\n \"data-type\": dataType,\n };\n },\n [\n getItemId,\n selectedItemIds,\n isItemDisabled,\n onItemActivate,\n closeOnActivate,\n closeMenu,\n highlightedIndex,\n ],\n );\n\n return {\n isOpen,\n openMenu,\n closeMenu,\n highlightedIndex,\n setHighlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { u as useOpenCloseTransitionStates } from './useOpenCloseTransitionStates-CiTYrLGi.js';
2
+
3
+ const usePopoverTransitionStates = (popover, openProp, options = {}) => {
4
+ const { onOpenAnimationStart, onCloseAnimationComplete } = options;
5
+ return useOpenCloseTransitionStates(openProp, {
6
+ ...options,
7
+ onOpenAnimationStart: () => {
8
+ if (!popover) return;
9
+ onOpenAnimationStart?.();
10
+ },
11
+ onCloseAnimationComplete: () => {
12
+ if (!popover) return;
13
+ onCloseAnimationComplete?.();
14
+ },
15
+ durationMs: () => {
16
+ if (!popover || !window) return 0;
17
+ const duration = window.getComputedStyle(popover).animationDuration;
18
+ return parseFloat(duration) * 1e3;
19
+ }
20
+ });
21
+ };
22
+
23
+ export { usePopoverTransitionStates as u };
24
+ //# sourceMappingURL=usePopoverTransitionStates-CDIoNUuf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePopoverTransitionStates-CDIoNUuf.js","sources":["../src/internal/hooks/usePopoverTransitionStates/usePopoverTransitionStates.ts"],"sourcesContent":["import {\n useOpenCloseTransitionStates,\n type OpenCloseTransitionStateEffects,\n} from \"../useOpenCloseTransitionStates\";\n\n/**\n * Effects configuration for dialog transition states\n * @property {() => void} [onOpenAnimationStart] - Callback when opening animation starts\n * @property {() => void} [onCloseAnimationStart] - Callback when closing animation starts\n * @property {() => void} [onOpenAnimationComplete] - Callback when opening animation completes\n * @property {() => void} [onCloseAnimationComplete] - Callback when closing animation completes\n */\n\n/**\n * Custom hook for managing popover transition states and animations.\n *\n * Features:\n * - Manages popover open/close transition states\n * - Handles animation timing based on CSS animation duration\n * - Provides callbacks for animation lifecycle events\n * - Supports controlled popover state management\n * - Automatically handles showPopover() and closePopover() calls\n * - Provides utility flags for open/closed states\n *\n * @param popover - The popover element\n * @param openProp - The open prop controlling popover visibility\n * @param options - Additional, optional options including callbacks for animation start, complete, and initialization\n * @returns Object containing popover state, control functions, and utility flags\n */\nexport const usePopoverTransitionStates = (\n popover: HTMLElement | undefined,\n openProp: boolean | undefined,\n options: OpenCloseTransitionStateEffects = {},\n) => {\n const { onOpenAnimationStart, onCloseAnimationComplete } = options;\n return useOpenCloseTransitionStates(openProp, {\n ...options,\n onOpenAnimationStart: () => {\n if (!popover) return;\n onOpenAnimationStart?.();\n },\n onCloseAnimationComplete: () => {\n if (!popover) return;\n onCloseAnimationComplete?.();\n },\n durationMs: () => {\n if (!popover || !window) return 0;\n const duration = window.getComputedStyle(popover).animationDuration;\n return parseFloat(duration) * 1000;\n },\n });\n};\n"],"names":[],"mappings":";;AA6BO,MAAM,6BAA6B,CACxC,OAAA,EACA,QAAA,EACA,OAAA,GAA2C,EAAC,KACzC;AACH,EAAA,MAAM,EAAE,oBAAA,EAAsB,wBAAA,EAAyB,GAAI,OAAA;AAC3D,EAAA,OAAO,6BAA6B,QAAA,EAAU;AAAA,IAC5C,GAAG,OAAA;AAAA,IACH,sBAAsB,MAAM;AAC1B,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,oBAAA,IAAuB;AAAA,IACzB,CAAA;AAAA,IACA,0BAA0B,MAAM;AAC9B,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,wBAAA,IAA2B;AAAA,IAC7B,CAAA;AAAA,IACA,YAAY,MAAM;AAChB,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,EAAQ,OAAO,CAAA;AAChC,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,gBAAA,CAAiB,OAAO,CAAA,CAAE,iBAAA;AAClD,MAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,GAAI,GAAA;AAAA,IAChC;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1,63 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { forwardRef, useMemo, useCallback } from 'react';
3
+ import { V as VirtualizedOptionsPanel, O as OptionsPanel } from './syncFilterUtils-BRKjFwxk.js';
4
+
5
+ const MultiSelectOptions = forwardRef(({ selectedOptions, items, virtualize, ...rest }, ref) => {
6
+ const selectedIds = useMemo(
7
+ () => new Set(selectedOptions.map((opt) => opt.id)),
8
+ [selectedOptions]
9
+ );
10
+ const getCheckedState = useCallback(
11
+ (item) => {
12
+ if (item.type === "select-all" || item.type === "select-filtered") {
13
+ return item.checkState ?? "indeterminate";
14
+ }
15
+ const checkId = item.type === "pinned-option" ? item.original.id : item.id;
16
+ return selectedIds.has(checkId) ? "checked" : "unchecked";
17
+ },
18
+ [selectedIds]
19
+ );
20
+ const ListComponent = virtualize ? VirtualizedOptionsPanel : OptionsPanel;
21
+ return /* @__PURE__ */ jsx(
22
+ ListComponent,
23
+ {
24
+ ...rest,
25
+ ref,
26
+ items,
27
+ selectionType: "multiple",
28
+ getCheckedState
29
+ }
30
+ );
31
+ });
32
+ MultiSelectOptions.displayName = "MultiSelectOptions";
33
+
34
+ const useToggleSelection = ({
35
+ options,
36
+ pinnedSections,
37
+ selectedOptions,
38
+ onSelectedOptionsChange
39
+ }) => {
40
+ const allPinnedOptions = useMemo(() => {
41
+ return pinnedSections.flatMap((section) => section.options);
42
+ }, [pinnedSections]);
43
+ const handleItemClick = useCallback(
44
+ (option) => {
45
+ const isSelected = selectedOptions.some((opt) => opt.id === option.id);
46
+ if (isSelected) {
47
+ onSelectedOptionsChange(
48
+ selectedOptions.filter((opt) => opt.id !== option.id)
49
+ );
50
+ } else {
51
+ const fullOption = options.find((opt) => opt.id === option.id) || allPinnedOptions.find((opt) => opt.id === option.id);
52
+ if (fullOption) {
53
+ onSelectedOptionsChange([...selectedOptions, fullOption]);
54
+ }
55
+ }
56
+ },
57
+ [selectedOptions, onSelectedOptionsChange, options, allPinnedOptions]
58
+ );
59
+ return { handleItemClick, allPinnedOptions };
60
+ };
61
+
62
+ export { MultiSelectOptions as M, useToggleSelection as u };
63
+ //# sourceMappingURL=useToggleSelection-JD62Jzqu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToggleSelection-JD62Jzqu.js","sources":["../src/internal/components/MultiSelectOptions.tsx","../src/internal/hooks/useToggleSelection.ts"],"sourcesContent":["import { MultiSelectFieldOption } from \"../../beta/components/MultiSelectField/types\";\nimport { CheckState } from \"../../types\";\nimport { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { OptionsPanel, OptionsPanelHandle } from \"./OptionsPanel\";\nimport { VirtualizedOptionsPanel } from \"./VirtualizedOptionsPanel\";\nimport {\n GetItemPropsFn,\n GetMenuPropsFn,\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\n\nexport type MultiSelectOptionsProps = {\n isOpen: boolean;\n items: SelectItem[];\n getMenuProps: GetMenuPropsFn;\n getItemProps: GetItemPropsFn;\n highlightedIndex: number;\n selectedOptions: MultiSelectFieldOption[];\n hasMore: boolean;\n onLoadMore: () => void;\n loading: boolean;\n loadingMore: boolean;\n disableAutoLoadMore?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n sectionsMeta?: SectionMeta[];\n virtualize?: boolean;\n};\n\nexport const MultiSelectOptions = forwardRef<\n OptionsPanelHandle,\n MultiSelectOptionsProps\n>(({ selectedOptions, items, virtualize, ...rest }, ref) => {\n const selectedIds = useMemo(\n () => new Set(selectedOptions.map((opt) => opt.id)),\n [selectedOptions],\n );\n\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState => {\n if (item.type === \"select-all\" || item.type === \"select-filtered\") {\n return item.checkState ?? \"indeterminate\";\n }\n const checkId =\n item.type === \"pinned-option\" ? item.original.id : item.id;\n return selectedIds.has(checkId) ? \"checked\" : \"unchecked\";\n },\n [selectedIds],\n );\n\n const ListComponent = virtualize ? VirtualizedOptionsPanel : OptionsPanel;\n\n return (\n <ListComponent\n {...rest}\n ref={ref}\n items={items}\n selectionType=\"multiple\"\n getCheckedState={getCheckedState}\n />\n );\n});\n\nMultiSelectOptions.displayName = \"MultiSelectOptions\";\n","import { useCallback, useMemo } from \"react\";\nimport { SelectFieldOption } from \"../../beta/components/SelectField/types\";\nimport { NormalizedPinnedSection } from \"./usePinnedOptions\";\n\ntype UseToggleSelectionParams = {\n options: SelectFieldOption[];\n pinnedSections: NormalizedPinnedSection[];\n selectedOptions: SelectFieldOption[];\n onSelectedOptionsChange: (options: SelectFieldOption[]) => void;\n};\n\n/**\n * Shared multi-select toggle logic: computes allPinnedOptions and provides\n * handleItemClick to add/remove an option from the selection.\n * Used by both useComboMultiple and useSelectModeMultiple.\n */\nexport const useToggleSelection = ({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n}: UseToggleSelectionParams) => {\n const allPinnedOptions = useMemo(() => {\n return pinnedSections.flatMap((section) => section.options);\n }, [pinnedSections]);\n\n const handleItemClick = useCallback(\n (option: { id: string | number; label: string }) => {\n const isSelected = selectedOptions.some((opt) => opt.id === option.id);\n if (isSelected) {\n onSelectedOptionsChange(\n selectedOptions.filter((opt) => opt.id !== option.id),\n );\n } else {\n const fullOption =\n options.find((opt) => opt.id === option.id) ||\n allPinnedOptions.find((opt) => opt.id === option.id);\n if (fullOption) {\n onSelectedOptionsChange([...selectedOptions, fullOption]);\n }\n }\n },\n [selectedOptions, onSelectedOptionsChange, options, allPinnedOptions],\n );\n\n return { handleItemClick, allPinnedOptions };\n};\n"],"names":[],"mappings":";;;;AA+BO,MAAM,kBAAA,GAAqB,UAAA,CAGhC,CAAC,EAAE,eAAA,EAAiB,OAAO,UAAA,EAAY,GAAG,IAAA,EAAK,EAAG,GAAA,KAAQ;AAC1D,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MAAM,IAAI,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,IAClD,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,IAAA,KAAiC;AAChC,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,YAAA,IAAgB,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACjE,QAAA,OAAO,KAAK,UAAA,IAAc,eAAA;AAAA,MAC5B;AACA,MAAA,MAAM,UACJ,IAAA,CAAK,IAAA,KAAS,kBAAkB,IAAA,CAAK,QAAA,CAAS,KAAK,IAAA,CAAK,EAAA;AAC1D,MAAA,OAAO,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA,GAAI,SAAA,GAAY,WAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAa,uBAAA,GAA0B,YAAA;AAE7D,EAAA,uBACE,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,GAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA,EAAc,UAAA;AAAA,MACd;AAAA;AAAA,GACF;AAEJ,CAAC;AAED,kBAAA,CAAmB,WAAA,GAAc,oBAAA;;ACjD1B,MAAM,qBAAqB,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,CAAC,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,MAAA,KAAmD;AAClD,MAAA,MAAM,UAAA,GAAa,gBAAgB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACrE,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,uBAAA;AAAA,UACE,gBAAgB,MAAA,CAAO,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE;AAAA,SACtD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,aACJ,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,IAAI,EAAA,KAAO,MAAA,CAAO,EAAE,CAAA,IAC1C,iBAAiB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACrD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,uBAAA,CAAwB,CAAC,GAAG,eAAA,EAAiB,UAAU,CAAC,CAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,eAAA,EAAiB,uBAAA,EAAyB,OAAA,EAAS,gBAAgB;AAAA,GACtE;AAEA,EAAA,OAAO,EAAE,iBAAiB,gBAAA,EAAiB;AAC7C;;;;"}
@@ -1,15 +1,5 @@
1
1
  import { isValidElement } from 'react';
2
-
3
- const warned = /* @__PURE__ */ new Set();
4
- function warnOnce(message) {
5
- if (process.env.NODE_ENV === "production") {
6
- return;
7
- }
8
- if (!warned.has(message)) {
9
- warned.add(message);
10
- console.warn(message);
11
- }
12
- }
2
+ import { w as warnOnce } from './warnOnce-Y9PRHcU4.js';
13
3
 
14
4
  function warnDeprecatedErrorUsage(componentName, error) {
15
5
  if (error === void 0 || typeof error === "boolean") return;
@@ -21,5 +11,5 @@ function warnDeprecatedErrorUsage(componentName, error) {
21
11
  }
22
12
  }
23
13
 
24
- export { warnOnce as a, warnDeprecatedErrorUsage as w };
25
- //# sourceMappingURL=utils-pudAMGnO.js.map
14
+ export { warnDeprecatedErrorUsage as w };
15
+ //# sourceMappingURL=utils-CM48ODEJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-CM48ODEJ.js","sources":["../src/components/FieldMessage/utils.ts"],"sourcesContent":["import { isValidElement, type ReactElement } from \"react\";\nimport { warnOnce } from \"../../internal/functions\";\n\n/**\n * Logs a dev-only deprecation warning when `error` is passed as a `ReactElement`.\n * String values are the preferred type and are NOT deprecated.\n * Should be called in consumer components that accept the union `error` prop.\n */\nexport function warnDeprecatedErrorUsage(\n componentName: string,\n error: ReactElement | string | boolean | string[] | undefined,\n): void {\n if (error === undefined || typeof error === \"boolean\") return;\n if (typeof error === \"string\" || Array.isArray(error)) return;\n\n // At this point, error is a ReactElement\n if (isValidElement(error)) {\n warnOnce(\n `[Anvil2 ${componentName}] Passing a ReactElement to the \\`error\\` prop is deprecated. ` +\n `Use a string or string[] instead: \\`error=\"message\"\\` or \\`error={[\"msg1\", \"msg2\"]}\\`. ` +\n `See https://beta.anvil.servicetitan.com/docs/web/components/field-message/code`,\n );\n }\n}\n"],"names":[],"mappings":";;;AAQO,SAAS,wBAAA,CACd,eACA,KAAA,EACM;AACN,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,OAAO,KAAA,KAAU,SAAA,EAAW;AACvD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAGvD,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG;AACzB,IAAA,QAAA;AAAA,MACE,WAAW,aAAa,CAAA,mOAAA;AAAA,KAG1B;AAAA,EACF;AACF;;;;"}
@@ -0,0 +1,13 @@
1
+ const warned = /* @__PURE__ */ new Set();
2
+ function warnOnce(message) {
3
+ if (process.env.NODE_ENV === "production") {
4
+ return;
5
+ }
6
+ if (!warned.has(message)) {
7
+ warned.add(message);
8
+ console.warn(message);
9
+ }
10
+ }
11
+
12
+ export { warnOnce as w };
13
+ //# sourceMappingURL=warnOnce-Y9PRHcU4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warnOnce-Y9PRHcU4.js","sources":["../src/internal/functions/warnOnce.ts"],"sourcesContent":["const warned = new Set<string>();\n\n/**\n * Logs a console.warn in development only, and only once per unique message.\n * Tree-shaken in production builds via the `process.env.NODE_ENV` guard.\n */\nexport function warnOnce(message: string): void {\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n\n if (!warned.has(message)) {\n warned.add(message);\n console.warn(message);\n }\n}\n"],"names":[],"mappings":"AAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAMxB,SAAS,SAAS,OAAA,EAAuB;AAC9C,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,EAAG;AACxB,IAAA,MAAA,CAAO,IAAI,OAAO,CAAA;AAClB,IAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,EACtB;AACF;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/anvil2",
3
- "version": "2.5.1",
3
+ "version": "2.6.1",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",
@@ -1,26 +0,0 @@
1
- import './Button.css';const button = "_button_158ym_2";
2
- const icon = "_icon_158ym_62";
3
- const loading = "_loading_158ym_70";
4
- const styles = {
5
- button: button,
6
- "type-icon": "_type-icon_158ym_16",
7
- icon: icon,
8
- loading: loading,
9
- "loading-spinner": "_loading-spinner_158ym_73",
10
- "size-xsmall": "_size-xsmall_158ym_76",
11
- "size-small": "_size-small_158ym_85",
12
- "size-medium": "_size-medium_158ym_94",
13
- "size-large": "_size-large_158ym_102",
14
- "appearance-primary": "_appearance-primary_158ym_110",
15
- "appearance-secondary": "_appearance-secondary_158ym_125",
16
- "appearance-ghost": "_appearance-ghost_158ym_140",
17
- "danger-primary": "_danger-primary_158ym_155",
18
- "danger-secondary": "_danger-secondary_158ym_170",
19
- "button-compound": "_button-compound_158ym_241",
20
- "shape-rounded": "_shape-rounded_158ym_262",
21
- "shape-pill": "_shape-pill_158ym_265",
22
- "shape-circular": "_shape-circular_158ym_268",
23
- "button-toggle": "_button-toggle_158ym_273"};
24
-
25
- export { styles as s };
26
- //# sourceMappingURL=Button.module-DwCq9XU0.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Button.module-DwCq9XU0.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Checkbox-CxjZpzPp.js","sources":["../src/components/Checkbox/internal/CheckboxGroupContext.tsx","../src/components/Checkbox/CheckboxGroup.tsx","../src/components/Checkbox/internal/Checkbox.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\n/**\n * Context value for CheckboxGroup\n * @property {boolean} hasError - Whether the group has an error state\n */\nexport type CheckboxGroupContextValue = {\n /**\n * Whether the checkbox group has an error state\n */\n hasError: boolean;\n};\n\n/**\n * Context for sharing state between CheckboxGroup and child Checkbox components\n */\nexport const CheckboxGroupContext = createContext<\n CheckboxGroupContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access CheckboxGroup context from child Checkbox components\n * @returns CheckboxGroupContextValue if inside a CheckboxGroup, undefined otherwise\n */\nexport const useCheckboxGroupContext = () => {\n return useContext(CheckboxGroupContext);\n};\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n ReactElement,\n FocusEventHandler,\n useState,\n useId,\n useMemo,\n} from \"react\";\nimport styles from \"./Checkbox.module.scss\";\nimport cx from \"classnames\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { FieldLabel } from \"../FieldLabel\";\nimport { SrOnly } from \"../SrOnly\";\nimport { FieldLabelProps } from \"../../internal/types\";\nimport { HelperProps } from \"../../internal/components\";\nimport FieldMessage, { warnDeprecatedErrorUsage } from \"../FieldMessage\";\nimport { CheckboxGroupContext } from \"./internal/CheckboxGroupContext\";\n\n/**\n * Props for the CheckboxGroup component\n * @extends ComponentPropsWithoutRef<\"fieldset\">\n * @extends LayoutUtilProps\n * @extends Omit<FieldLabelProps, \"labelProps\">\n */\nexport type CheckboxGroupProps = ComponentPropsWithoutRef<\"fieldset\"> &\n LayoutUtilProps &\n Omit<FieldLabelProps, \"labelProps\"> & {\n /**\n * required flag for label\n * @accessibility This does not enforce error when nothing is selected.\n * @default false\n */\n required?: boolean;\n\n /**\n * legend for the fieldset\n */\n legend: string | ReactElement;\n /**\n * Error state for the field. Pass `true` to indicate error styling without a message.\n * Pass a string, string[], or ReactElement (deprecated) for error messages.\n */\n error?: boolean | string | ReactElement | string[];\n /**\n * @deprecated No longer used. Error messages always use `aria-live=\"assertive\"`.\n */\n errorAriaLive?: HelperProps[\"errorAriaLive\"];\n /**\n * Warning message(s) to display. Supports a single string or an array of strings.\n */\n warning?: string | string[];\n /**\n * Description text to display below the field.\n */\n description?: HelperProps[\"description\"];\n /**\n * Hint text to display below the field.\n */\n hint?: HelperProps[\"hint\"];\n };\n\n/**\n * CheckboxGroup component for grouping related checkboxes together.\n *\n * Features:\n * - Groups multiple checkboxes with a common legend\n * - Supports required field indication\n * - Optional helper text and descriptions\n * - Full accessibility support with fieldset/legend\n * - Focus management for keyboard navigation\n * - Layout utility props for positioning and spacing\n * - Flexible layout direction (row/column)\n * - Screen reader support with hidden labels\n *\n * @example\n * <CheckboxGroup legend=\"Select your interests\" required>\n * <Checkbox label=\"Technology\" />\n * <Checkbox label=\"Sports\" />\n * <Checkbox label=\"Music\" />\n * </CheckboxGroup>\n */\nexport const CheckboxGroup = forwardRef<\n HTMLFieldSetElement,\n CheckboxGroupProps\n>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n\n const {\n className,\n children,\n description,\n error,\n errorAriaLive: _errorAriaLive,\n hint,\n warning,\n legend,\n moreInfo,\n onBlur,\n onFocus,\n required,\n style,\n ...rest\n } = componentProps;\n\n const checkboxGroupClassNames = cx(styles[\"checkbox-group\"], className);\n const [openInfo, setOpenInfo] = useState<boolean>(false);\n const helperUid = useId();\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n alignItems:\n layoutStyles?.alignItems ??\n (layoutStyles?.flexDirection === \"row\" ? \"flex-start\" : undefined),\n };\n\n const focusHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onFocus?.(e);\n setOpenInfo(true);\n };\n\n const blurHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onBlur?.(e);\n setOpenInfo(false);\n };\n\n const labelClassNames = cx(styles[\"label\"], {\n [styles[\"direction-row\"]]: layoutStyles?.flexDirection === \"row\",\n });\n\n warnDeprecatedErrorUsage(\"CheckboxGroup\", error);\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n\n const hasHelperText = hint || errorMessages || warning || description;\n\n const contextValue = useMemo(\n () => ({\n hasError: !!error,\n }),\n [error],\n );\n\n return (\n <fieldset\n role=\"group\"\n data-anv=\"checkbox-group\"\n className={checkboxGroupClassNames}\n ref={ref}\n style={styleCombined}\n onFocus={focusHandler}\n onBlur={blurHandler}\n {...rest}\n aria-describedby={hasHelperText ? helperUid : undefined}\n >\n <legend className={styles[\"legend\"]}>\n {legend}\n {required && \", required\"}\n {moreInfo && <SrOnly>{moreInfo}</SrOnly>}\n </legend>\n <FieldLabel\n aria-hidden\n moreInfo={moreInfo}\n required={required}\n moreInfoOpen={openInfo}\n className={labelClassNames}\n >\n {legend}\n </FieldLabel>\n <CheckboxGroupContext.Provider value={contextValue}>\n <div\n className={styles[\"children\"]}\n style={{\n flexDirection: layoutStyles?.flexDirection,\n gap: layoutStyles?.gap,\n }}\n >\n {children}\n </div>\n </CheckboxGroupContext.Provider>\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n </fieldset>\n );\n});\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n","import {\n forwardRef,\n ChangeEvent,\n ComponentPropsWithoutRef,\n ReactElement,\n MouseEvent,\n useId,\n} from \"react\";\nimport cx from \"classnames\";\nimport { Icon } from \"../../Icon\";\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 CheckboxIndeterminate from \"@servicetitan/hammer-icon/mdi/round/indeterminate_check_box.svg\";\n\nimport styles from \"../Checkbox.module.scss\";\nimport { Svg, LayoutUtilProps } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport { Helper, HelperProps } from \"../../../internal/components\";\nimport { CheckboxState } from \"../types\";\nimport { useCheckboxGroupContext } from \"./CheckboxGroupContext\";\n\nexport type { CheckboxState };\n\n/**\n * Props for the Checkbox component\n * @extends LayoutUtilProps\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\" | \"onClick\" | \"indeterminate\">\n */\nexport type CheckboxProps = LayoutUtilProps &\n Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"onChange\" | \"onClick\" | \"indeterminate\"\n > & {\n /**\n * Controlled state\n * @default false\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state\n * @default false\n */\n defaultChecked?: boolean;\n\n /**\n * Indeterminate state of the checkbox\n * @accessibility Applies aria-checked=\"mixed\"\n * @default false\n */\n indeterminate?: boolean;\n\n /**\n * Callback when checkbox is changed\n */\n onChange?: (\n e: ChangeEvent<HTMLInputElement>,\n state?: CheckboxState,\n ) => void;\n\n /**\n * Callback when checkbox is clicked\n */\n onClick?: (e?: MouseEvent<HTMLInputElement>, state?: CheckboxState) => void;\n\n /**\n * label for checkbox\n * @accessibility This should either be a string or have text content inside for accessibility\n */\n label?: string | ReactElement;\n\n /**\n * Error state for the checkbox\n * @accessibility Applies aria-invalid=\"true\"\n * @default false\n */\n error?: boolean;\n\n /**\n * Icon overrides\n */\n icons?: {\n checked?: Svg;\n indeterminate?: Svg;\n unchecked?: Svg;\n };\n\n description?: HelperProps[\"description\"];\n\n /**\n * When `true`, hides the checkbox for visual users.\n * @default false\n */\n hideCheckbox?: boolean;\n };\n\nconst CheckboxElement = forwardRef<HTMLInputElement, CheckboxProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n indeterminate,\n onChange,\n onClick,\n value,\n className,\n disabled,\n error,\n icons,\n checked: checkedProp,\n defaultChecked,\n label,\n style,\n required,\n description,\n hideCheckbox = false,\n ...rest\n } = componentProps;\n\n const groupContext = useCheckboxGroupContext();\n const {\n checked: checkedIcon = CheckboxChecked,\n indeterminate: indeterminateIcon = CheckboxIndeterminate,\n unchecked: uncheckedIcon = CheckboxOutline,\n } = { ...icons };\n\n const isControlled = typeof checkedProp !== \"undefined\";\n\n const onChangeHandler = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e, { value, checked: checkedProp ?? e.target.checked });\n };\n\n const onClickHandler = (e: MouseEvent<HTMLInputElement>) => {\n onClick?.(e, {\n value,\n checked: checkedProp ?? (e.target as HTMLInputElement).checked,\n });\n };\n\n const helperUid = useId();\n\n // Combine local error state with group error state\n const hasError = error || groupContext?.hasError;\n\n const wrapperClassNames = cx(\n styles[\"wrapper\"],\n { [styles[\"focus\"]]: hideCheckbox },\n className,\n );\n\n const checkboxClassNames = cx(styles[\"checkbox\"], {\n [styles[\"error\"]]: hasError,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <div\n className={wrapperClassNames}\n style={styleCombined}\n data-anv=\"checkbox\"\n >\n <label className={checkboxClassNames}>\n <input\n type=\"checkbox\"\n disabled={disabled}\n value={value}\n onChange={onChangeHandler}\n onClick={onClickHandler}\n aria-checked={\n indeterminate ? \"mixed\" : (checkedProp ?? defaultChecked)\n }\n checked={isControlled ? checkedProp : undefined}\n defaultChecked={defaultChecked}\n aria-invalid={hasError}\n aria-describedby={description ? helperUid : undefined}\n ref={ref}\n {...rest}\n />\n\n <span\n className={cx(styles[\"icon-wrapper\"], {\n [styles[\"sr-only\"]]: hideCheckbox,\n })}\n aria-hidden\n >\n <Icon\n size=\"large\"\n svg={indeterminateIcon}\n className={styles[\"icon-indeterminate\"]}\n />\n\n <Icon\n size=\"large\"\n svg={checkedIcon}\n className={styles[\"icon-checked\"]}\n />\n\n <Icon\n size=\"large\"\n svg={uncheckedIcon}\n className={styles[\"icon-unchecked\"]}\n />\n </span>\n\n <span className={cx({ [styles[\"focus-label\"]]: hideCheckbox })}>\n {label}\n\n {required && (\n <span aria-hidden className={styles[\"required-asterisk\"]}>\n *\n </span>\n )}\n </span>\n </label>\n\n {description ? (\n <div className={styles[\"helper-wrapper\"]}>\n <Helper id={helperUid} description={description} />\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nCheckboxElement.displayName = \"Checkbox\";\n\n/**\n * Checkbox component for selecting one or more options from a list.\n *\n * Features:\n * - Controlled and uncontrolled state management\n * - Indeterminate state for partial selections\n * - Customizable icons for different states\n * - Error state with accessibility support\n * - Optional helper text and descriptions\n * - Hide checkbox option for visual-only interactions\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support\n * - Layout utility props for positioning and spacing\n *\n * @example\n * <Checkbox\n * label=\"Accept terms and conditions\"\n * onChange={(e, state) => console.log('Checked:', state.checked)}\n * required\n * />\n */\nexport const Checkbox = CheckboxElement;\n"],"names":["styles","CheckboxChecked","CheckboxIndeterminate","CheckboxOutline"],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import './Checkbox.css';const checkbox = "_checkbox_19qga_8";
2
- const wrapper = "_wrapper_19qga_23";
3
- const error = "_error_19qga_103";
4
- const label = "_label_19qga_215";
5
- const legend = "_legend_19qga_247";
6
- const children = "_children_19qga_259";
7
- const checkboxStyles = {
8
- checkbox: checkbox,
9
- wrapper: wrapper,
10
- "required-asterisk": "_required-asterisk_19qga_37",
11
- "focus-label": "_focus-label_19qga_41",
12
- "icon-wrapper": "_icon-wrapper_19qga_47",
13
- "helper-wrapper": "_helper-wrapper_19qga_80",
14
- "icon-indeterminate": "_icon-indeterminate_19qga_85",
15
- "icon-unchecked": "_icon-unchecked_19qga_86",
16
- "icon-checked": "_icon-checked_19qga_87",
17
- error: error,
18
- "sr-only": "_sr-only_19qga_201",
19
- "checkbox-group": "_checkbox-group_19qga_215",
20
- label: label,
21
- "direction-row": "_direction-row_19qga_215",
22
- legend: legend,
23
- children: children
24
- };
25
-
26
- export { checkboxStyles as c };
27
- //# sourceMappingURL=Checkbox.module-D4EgXL0i.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Checkbox.module-D4EgXL0i.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}