@servicetitan/anvil2 3.0.5 → 3.0.7

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 (300) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/{AiMark-DjOf60tj.js → AiMark-BXL0sWIV.js} +2 -2
  3. package/dist/{AiMark-DjOf60tj.js.map → AiMark-BXL0sWIV.js.map} +1 -1
  4. package/dist/AiMark.js +1 -1
  5. package/dist/{Alert-BTesdKK7.js → Alert-BNH0UD2s.js} +2 -2
  6. package/dist/{Alert-BTesdKK7.js.map → Alert-BNH0UD2s.js.map} +1 -1
  7. package/dist/Alert.js +1 -1
  8. package/dist/{Breadcrumbs-DTi5RqT-.js → Breadcrumbs-Bzxbdu-S.js} +2 -2
  9. package/dist/{Breadcrumbs-DTi5RqT-.js.map → Breadcrumbs-Bzxbdu-S.js.map} +1 -1
  10. package/dist/Breadcrumbs.js +1 -1
  11. package/dist/{Calendar-ddGQKSGU.js → Calendar-BYNFAWpZ.js} +2 -2
  12. package/dist/{Calendar-ddGQKSGU.js.map → Calendar-BYNFAWpZ.js.map} +1 -1
  13. package/dist/{Calendar-CpCRxcue.js → Calendar-DS5eWpGF.js} +2 -2
  14. package/dist/{Calendar-CpCRxcue.js.map → Calendar-DS5eWpGF.js.map} +1 -1
  15. package/dist/Calendar.js +2 -2
  16. package/dist/{Checkbox-CJ8eYejR.js → Checkbox-BB3BDJsK.js} +4 -4
  17. package/dist/{Checkbox-CJ8eYejR.js.map → Checkbox-BB3BDJsK.js.map} +1 -1
  18. package/dist/{Checkbox-CVidv1sO.js → Checkbox-BeIzx_ZX.js} +2 -2
  19. package/dist/{Checkbox-CVidv1sO.js.map → Checkbox-BeIzx_ZX.js.map} +1 -1
  20. package/dist/Checkbox.css +40 -37
  21. package/dist/Checkbox.js +1 -1
  22. package/dist/Checkbox.module-CURNX27M.js +28 -0
  23. package/dist/Checkbox.module-CURNX27M.js.map +1 -0
  24. package/dist/{Chip-0-Yx9SGX.js → Chip-D2k5X_wX.js} +2 -2
  25. package/dist/{Chip-0-Yx9SGX.js.map → Chip-D2k5X_wX.js.map} +1 -1
  26. package/dist/Chip.js +1 -1
  27. package/dist/Combobox.js +1 -2
  28. package/dist/Combobox.js.map +1 -1
  29. package/dist/{DataTable-BFzj8cZG.js → DataTable-E8z0H8c7.js} +144 -17
  30. package/dist/{DataTable-BFzj8cZG.js.map → DataTable-E8z0H8c7.js.map} +1 -1
  31. package/dist/DataTable.css +47 -5
  32. package/dist/{DateFieldRange-CO2C776E.js → DateFieldRange-BN_uIvHI.js} +27 -15
  33. package/dist/DateFieldRange-BN_uIvHI.js.map +1 -0
  34. package/dist/DateFieldRange.js +1 -1
  35. package/dist/{DateFieldSingle-DjmHpn1y.js → DateFieldSingle-h3YkdwPo.js} +5 -5
  36. package/dist/{DateFieldSingle-DjmHpn1y.js.map → DateFieldSingle-h3YkdwPo.js.map} +1 -1
  37. package/dist/DateFieldSingle.js +1 -1
  38. package/dist/{DateFieldYearless-CCJAopYd.js → DateFieldYearless-m_Hl2gMY.js} +5 -5
  39. package/dist/{DateFieldYearless-CCJAopYd.js.map → DateFieldYearless-m_Hl2gMY.js.map} +1 -1
  40. package/dist/DateFieldYearless.js +1 -1
  41. package/dist/{DateFieldYearlessRange-BUv1mGJg.js → DateFieldYearlessRange-DNqSTBDr.js} +4 -4
  42. package/dist/{DateFieldYearlessRange-BUv1mGJg.js.map → DateFieldYearlessRange-DNqSTBDr.js.map} +1 -1
  43. package/dist/DateFieldYearlessRange.js +1 -1
  44. package/dist/{DaysOfTheWeek-BihTU2No.js → DaysOfTheWeek-D58z_eF3.js} +10 -9
  45. package/dist/{DaysOfTheWeek-BihTU2No.js.map → DaysOfTheWeek-D58z_eF3.js.map} +1 -1
  46. package/dist/DaysOfTheWeek.css +10 -6
  47. package/dist/DaysOfTheWeek.js +1 -1
  48. package/dist/{Dialog-BZTo4hbX.js → Dialog-CvYSMvfD.js} +23 -21
  49. package/dist/{Dialog-BZTo4hbX.js.map → Dialog-CvYSMvfD.js.map} +1 -1
  50. package/dist/Dialog.css +43 -29
  51. package/dist/Dialog.js +1 -1
  52. package/dist/{Drawer-Dg35inxH.js → Drawer-s2y0xcgV.js} +3 -3
  53. package/dist/{Drawer-Dg35inxH.js.map → Drawer-s2y0xcgV.js.map} +1 -1
  54. package/dist/Drawer.js +1 -1
  55. package/dist/DrillDown.js +1 -1
  56. package/dist/{EditCard-BfNq-T8n.js → EditCard-B25pj0Jx.js} +2 -2
  57. package/dist/{EditCard-BfNq-T8n.js.map → EditCard-B25pj0Jx.js.map} +1 -1
  58. package/dist/EditCard.js +1 -1
  59. package/dist/{FieldLabel-xV6EdVwo.js → FieldLabel-D1qPAGtB.js} +3 -3
  60. package/dist/{FieldLabel-xV6EdVwo.js.map → FieldLabel-D1qPAGtB.js.map} +1 -1
  61. package/dist/FieldLabel.js +1 -1
  62. package/dist/FilterBar-B4ZAs73g.js +412 -0
  63. package/dist/FilterBar-B4ZAs73g.js.map +1 -0
  64. package/dist/FilterBar.js +1 -1
  65. package/dist/{InputMask-8rI6UIb8.js → InputMask-BDl09V4u.js} +3 -3
  66. package/dist/{InputMask-8rI6UIb8.js.map → InputMask-BDl09V4u.js.map} +1 -1
  67. package/dist/InputMask.js +1 -1
  68. package/dist/{ListView-CIa981KJ.js → ListView-DO5psxd4.js} +6 -6
  69. package/dist/{ListView-CIa981KJ.js.map → ListView-DO5psxd4.js.map} +1 -1
  70. package/dist/ListView.js +1 -1
  71. package/dist/{ListView.module-CKUQP3kf.js → ListView.module-DfqtCL3Q.js} +3 -3
  72. package/dist/ListView.module-DfqtCL3Q.js.map +1 -0
  73. package/dist/{Listbox-DRznPBCr.js → Listbox-CvQHBFWb.js} +2 -2
  74. package/dist/{Listbox-DRznPBCr.js.map → Listbox-CvQHBFWb.js.map} +1 -1
  75. package/dist/Listbox.js +1 -1
  76. package/dist/MultiSelectField.js +1 -1
  77. package/dist/{MultiSelectFieldSync-BxyQiVPQ.js → MultiSelectFieldSync-CXX2F0ru.js} +62 -32
  78. package/dist/MultiSelectFieldSync-CXX2F0ru.js.map +1 -0
  79. package/dist/MultiSelectFieldSync.css +72 -65
  80. package/dist/MultiSelectMenu.js +1 -1
  81. package/dist/{MultiSelectMenuSync-BJfvZGf3.js → MultiSelectMenuSync-EKtvlL62.js} +218 -47
  82. package/dist/MultiSelectMenuSync-EKtvlL62.js.map +1 -0
  83. package/dist/{NumberField-D7YYo4Rl.js → NumberField-BymFZhIJ.js} +4 -4
  84. package/dist/{NumberField-D7YYo4Rl.js.map → NumberField-BymFZhIJ.js.map} +1 -1
  85. package/dist/NumberField.js +1 -1
  86. package/dist/{Page-cELP59Hm.js → Page-C2_Hm27h.js} +8 -8
  87. package/dist/{Page-cELP59Hm.js.map → Page-C2_Hm27h.js.map} +1 -1
  88. package/dist/Page.js +1 -1
  89. package/dist/{Pagination-DTN4FovY.js → Pagination-Bmd4JORe.js} +3 -3
  90. package/dist/{Pagination-DTN4FovY.js.map → Pagination-Bmd4JORe.js.map} +1 -1
  91. package/dist/Pagination.js +1 -1
  92. package/dist/{Popover-B3Vw4lDW.js → Popover-8mTJoMy7.js} +2 -2
  93. package/dist/{Popover-B3Vw4lDW.js.map → Popover-8mTJoMy7.js.map} +1 -1
  94. package/dist/Popover.js +1 -1
  95. package/dist/{ProgressBar-kzCNhaCO.js → ProgressBar-C1CkQHV5.js} +2 -2
  96. package/dist/{ProgressBar-kzCNhaCO.js.map → ProgressBar-C1CkQHV5.js.map} +1 -1
  97. package/dist/ProgressBar.js +1 -1
  98. package/dist/{Radio-CSBetBV6.js → Radio-BcHMk8dD.js} +2 -2
  99. package/dist/{Radio-CSBetBV6.js.map → Radio-BcHMk8dD.js.map} +1 -1
  100. package/dist/{Radio-BDE1xGel.js → Radio-D5WyQN2i.js} +16 -16
  101. package/dist/{Radio-BDE1xGel.js.map → Radio-D5WyQN2i.js.map} +1 -1
  102. package/dist/Radio.css +40 -37
  103. package/dist/Radio.js +1 -1
  104. package/dist/{RichTextEditor-BFFXj0zS.js → RichTextEditor-DstVbYch.js} +8 -8
  105. package/dist/{RichTextEditor-BFFXj0zS.js.map → RichTextEditor-DstVbYch.js.map} +1 -1
  106. package/dist/RichTextEditor.js +1 -1
  107. package/dist/SavedFiltersButton-2qba2Cgu.js +650 -0
  108. package/dist/SavedFiltersButton-2qba2Cgu.js.map +1 -0
  109. package/dist/SavedFiltersButton.css +8 -0
  110. package/dist/SavedFiltersButton.d.ts +1 -0
  111. package/dist/SavedFiltersButton.js +2 -0
  112. package/dist/SavedFiltersButton.js.map +1 -0
  113. package/dist/{SearchField-Dl7sh_M4.js → SearchField-BMHJCVFu.js} +2 -2
  114. package/dist/{SearchField-Dl7sh_M4.js.map → SearchField-BMHJCVFu.js.map} +1 -1
  115. package/dist/{SearchField-CO9BHCYB.js → SearchField-fXc_vWEr.js} +3 -3
  116. package/dist/{SearchField-CO9BHCYB.js.map → SearchField-fXc_vWEr.js.map} +1 -1
  117. package/dist/SearchField.js +1 -1
  118. package/dist/{SelectCard-CLCLIBoq.js → SelectCard-BN-LI14f.js} +3 -3
  119. package/dist/{SelectCard-CLCLIBoq.js.map → SelectCard-BN-LI14f.js.map} +1 -1
  120. package/dist/SelectCard.js +1 -1
  121. package/dist/SelectField.js +1 -1
  122. package/dist/{SelectFieldLabel-Db9w6O6r.js → SelectFieldLabel-UbQT7fDD.js} +2 -2
  123. package/dist/{SelectFieldLabel-Db9w6O6r.js.map → SelectFieldLabel-UbQT7fDD.js.map} +1 -1
  124. package/dist/{SelectFieldSync-z8b41JZz.js → SelectFieldSync-DykGkR_w.js} +6 -6
  125. package/dist/SelectFieldSync-DykGkR_w.js.map +1 -0
  126. package/dist/SelectMenu.js +1 -1
  127. package/dist/{SelectMenuSync-Cf1Zradm.js → SelectMenuSync-DTQ8Ofoz.js} +21 -9
  128. package/dist/SelectMenuSync-DTQ8Ofoz.js.map +1 -0
  129. package/dist/{SelectOptions-BgT1V6qp.js → SelectOptions-DVSOJwRy.js} +2 -2
  130. package/dist/{SelectOptions-BgT1V6qp.js.map → SelectOptions-DVSOJwRy.js.map} +1 -1
  131. package/dist/{SelectTrigger-37HzF-VI.js → SelectTrigger-CHk0KO-P.js} +2 -2
  132. package/dist/{SelectTrigger-37HzF-VI.js.map → SelectTrigger-CHk0KO-P.js.map} +1 -1
  133. package/dist/SelectTrigger.js +1 -1
  134. package/dist/{SelectTriggerBase-4o1cqEbR.js → SelectTriggerBase-B2S5SOZr.js} +137 -41
  135. package/dist/SelectTriggerBase-B2S5SOZr.js.map +1 -0
  136. package/dist/SelectTriggerBase.css +46 -42
  137. package/dist/SelectTriggerBase.module-DsPvTQE7.js +37 -0
  138. package/dist/SelectTriggerBase.module-DsPvTQE7.js.map +1 -0
  139. package/dist/{Switch-p4yVJTNy.js → Switch-onmiKoRd.js} +2 -2
  140. package/dist/{Switch-p4yVJTNy.js.map → Switch-onmiKoRd.js.map} +1 -1
  141. package/dist/Switch.js +1 -1
  142. package/dist/Table.js +1 -1
  143. package/dist/{Text-BgPuOXJM.js → Text-BTzgTpqu.js} +2 -2
  144. package/dist/{Text-BgPuOXJM.js.map → Text-BTzgTpqu.js.map} +1 -1
  145. package/dist/Text.js +1 -1
  146. package/dist/{TextField-DzuM8vvd.js → TextField-WTYZJlX3.js} +2 -2
  147. package/dist/{TextField-DzuM8vvd.js.map → TextField-WTYZJlX3.js.map} +1 -1
  148. package/dist/{TextField-D7NyaKId.js → TextField-rVfctM1E.js} +4 -4
  149. package/dist/{TextField-D7NyaKId.js.map → TextField-rVfctM1E.js.map} +1 -1
  150. package/dist/TextField.css +22 -58
  151. package/dist/TextField.js +1 -1
  152. package/dist/TextField.module-C8FsjTpx.js +23 -0
  153. package/dist/TextField.module-C8FsjTpx.js.map +1 -0
  154. package/dist/{Textarea-Dks15Zt3.js → Textarea-PXjppEQ6.js} +3 -3
  155. package/dist/{Textarea-Dks15Zt3.js.map → Textarea-PXjppEQ6.js.map} +1 -1
  156. package/dist/Textarea.js +1 -1
  157. package/dist/{TimeField-lN_5V6-X.js → TimeField-BJPXIv6W.js} +4 -4
  158. package/dist/{TimeField-lN_5V6-X.js.map → TimeField-BJPXIv6W.js.map} +1 -1
  159. package/dist/TimeField.js +1 -1
  160. package/dist/Toast.js +2 -2
  161. package/dist/{Toaster-3GI_qJxj.js → Toaster-CoChsMD0.js} +3 -3
  162. package/dist/{Toaster-3GI_qJxj.js.map → Toaster-CoChsMD0.js.map} +1 -1
  163. package/dist/{Toaster-2pAMQXRk.js → Toaster-DXLc86VD.js} +2 -2
  164. package/dist/{Toaster-2pAMQXRk.js.map → Toaster-DXLc86VD.js.map} +1 -1
  165. package/dist/{Toolbar-BRQpvj9U.js → Toolbar-Bt3kShho.js} +4 -4
  166. package/dist/{Toolbar-BRQpvj9U.js.map → Toolbar-Bt3kShho.js.map} +1 -1
  167. package/dist/{Toolbar-B0WHsX9W.js → Toolbar-DaUKbbsL.js} +6 -6
  168. package/dist/{Toolbar-B0WHsX9W.js.map → Toolbar-DaUKbbsL.js.map} +1 -1
  169. package/dist/Toolbar.js +2 -2
  170. package/dist/{ToolbarButtonToggle-xvMWRxzC.js → ToolbarButtonToggle-BPu81Wuv.js} +5 -4
  171. package/dist/ToolbarButtonToggle-BPu81Wuv.js.map +1 -0
  172. package/dist/{Tooltip-DGo3OWqL.js → Tooltip-yr1D06BE.js} +5 -5
  173. package/dist/{Tooltip-DGo3OWqL.js.map → Tooltip-yr1D06BE.js.map} +1 -1
  174. package/dist/Tooltip.css +6 -7
  175. package/dist/Tooltip.js +1 -1
  176. package/dist/{YearlessDateInputWithPicker-BhbR5F22.js → YearlessDateInputWithPicker-BIcVgz-J.js} +3 -3
  177. package/dist/{YearlessDateInputWithPicker-BhbR5F22.js.map → YearlessDateInputWithPicker-BIcVgz-J.js.map} +1 -1
  178. package/dist/assets/icons/st/batch.svg +1 -1
  179. package/dist/assets/icons/st/call.svg +1 -1
  180. package/dist/assets/icons/st/customer.svg +1 -1
  181. package/dist/assets/icons/st/enterprise_hub.svg +1 -1
  182. package/dist/assets/icons/st/equipment.svg +1 -1
  183. package/dist/assets/icons/st/estimate.svg +1 -1
  184. package/dist/assets/icons/st/full_fluid.svg +1 -1
  185. package/dist/assets/icons/st/gnav_titan_advisor_active.svg +1 -1
  186. package/dist/assets/icons/st/gnav_titan_advisor_inactive.svg +1 -1
  187. package/dist/assets/icons/st/job.svg +1 -1
  188. package/dist/assets/icons/st/leads.svg +1 -1
  189. package/dist/assets/icons/st/proposal.svg +1 -1
  190. package/dist/assets/icons/st/roofing.svg +1 -1
  191. package/dist/beta.js +13 -12
  192. package/dist/beta.js.map +1 -1
  193. package/dist/filter-state-Bx3aYS1r.js +1627 -0
  194. package/dist/filter-state-Bx3aYS1r.js.map +1 -0
  195. package/dist/{FilterBar.css → filter-state.css} +19 -33
  196. package/dist/{index-B6Demgr-.js → index-DVYRUKtW.js} +2 -2
  197. package/dist/{index-B6Demgr-.js.map → index-DVYRUKtW.js.map} +1 -1
  198. package/dist/index.js +38 -39
  199. package/dist/index.js.map +1 -1
  200. package/dist/src/beta/components/FilterBar/FilterBar.d.ts +12 -10
  201. package/dist/src/beta/components/FilterBar/FilterDateList.d.ts +47 -0
  202. package/dist/src/beta/components/FilterBar/FilterDateRange.d.ts +34 -29
  203. package/dist/src/beta/components/FilterBar/FilterDateSingle.d.ts +31 -22
  204. package/dist/src/beta/components/FilterBar/FilterDrawer.d.ts +1 -1
  205. package/dist/src/beta/components/FilterBar/FilterItemWrapper.d.ts +4 -12
  206. package/dist/src/beta/components/FilterBar/FilterNumericRange.d.ts +29 -0
  207. package/dist/src/beta/components/FilterBar/FilterPopoverButton.d.ts +86 -0
  208. package/dist/src/beta/components/FilterBar/FilterToggleButton.d.ts +2 -2
  209. package/dist/src/beta/components/FilterBar/FilterTriggerButton.d.ts +50 -0
  210. package/dist/src/beta/components/FilterBar/index.d.ts +1 -1
  211. package/dist/src/beta/components/FilterBar/internal/FilterGroupContext.d.ts +5 -9
  212. package/dist/src/beta/components/FilterBar/internal/adapters/asyncMultiSelect.d.ts +6 -0
  213. package/dist/src/beta/components/FilterBar/internal/adapters/asyncSelect.d.ts +6 -0
  214. package/dist/src/beta/components/FilterBar/internal/adapters/boolean.d.ts +3 -0
  215. package/dist/src/beta/components/FilterBar/internal/adapters/custom.d.ts +3 -0
  216. package/dist/src/beta/components/FilterBar/internal/adapters/date.d.ts +5 -0
  217. package/dist/src/beta/components/FilterBar/internal/adapters/dateList.d.ts +5 -0
  218. package/dist/src/beta/components/FilterBar/internal/adapters/dateRange.d.ts +8 -0
  219. package/dist/src/beta/components/FilterBar/internal/adapters/index.d.ts +15 -0
  220. package/dist/src/beta/components/FilterBar/internal/adapters/multiSelect.d.ts +6 -0
  221. package/dist/src/beta/components/FilterBar/internal/adapters/numericRange.d.ts +3 -0
  222. package/dist/src/beta/components/FilterBar/internal/adapters/singleSelect.d.ts +6 -0
  223. package/dist/src/beta/components/FilterBar/internal/adapters/types.d.ts +78 -0
  224. package/dist/src/beta/components/FilterBar/internal/types.d.ts +204 -61
  225. package/dist/src/beta/components/FilterBar/internal/utils/dateListLibraryOptions.d.ts +29 -0
  226. package/dist/src/beta/components/FilterBar/internal/utils/filter-state.d.ts +2 -38
  227. package/dist/src/beta/components/FilterBar/internal/utils/test.d.ts +14 -28
  228. package/dist/src/beta/components/FilterBar/internal/utils/value-compare.d.ts +14 -0
  229. package/dist/src/beta/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
  230. package/dist/src/beta/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
  231. package/dist/src/beta/components/MultiSelectField/internal/types.d.ts +4 -2
  232. package/dist/src/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +7 -5
  233. package/dist/src/beta/components/MultiSelectField/internal/useSelectModeMultiple.d.ts +5 -2
  234. package/dist/src/beta/components/MultiSelectField/types.d.ts +21 -36
  235. package/dist/src/beta/components/MultiSelectMenu/MultiSelectMenu.d.ts +1 -0
  236. package/dist/src/beta/components/MultiSelectMenu/types.d.ts +52 -12
  237. package/dist/src/beta/components/SavedFiltersButton/SavedFiltersButton.d.ts +40 -0
  238. package/dist/src/beta/components/SavedFiltersButton/index.d.ts +2 -0
  239. package/dist/src/beta/components/SavedFiltersButton/internal/AddSavedFilterDrawer.d.ts +27 -0
  240. package/dist/src/beta/components/SavedFiltersButton/internal/EditSavedFiltersDrawer.d.ts +38 -0
  241. package/dist/src/beta/components/SavedFiltersButton/types.d.ts +147 -0
  242. package/dist/src/beta/components/SelectField/types.d.ts +7 -11
  243. package/dist/src/beta/components/SelectMenu/internal/useMenuInteraction.d.ts +8 -1
  244. package/dist/src/beta/components/SelectMenu/types.d.ts +21 -1
  245. package/dist/src/beta/components/Table/DataTable/internal/DataTablePagination.d.ts +6 -0
  246. package/dist/src/beta/components/Table/DataTable/types.d.ts +43 -10
  247. package/dist/src/beta/components/Toolbar/internal/ToolbarContext.d.ts +3 -2
  248. package/dist/src/beta/components/index.d.ts +1 -0
  249. package/dist/src/internal/components/MenuFooter/MenuFooter.d.ts +43 -0
  250. package/dist/src/internal/components/OptionCheckbox.d.ts +6 -0
  251. package/dist/src/internal/components/OptionContentArea.d.ts +8 -0
  252. package/dist/src/internal/components/OptionRow.d.ts +10 -0
  253. package/dist/src/internal/components/OptionsPopover/OptionsPopover.d.ts +4 -4
  254. package/dist/src/internal/hooks/index.d.ts +2 -0
  255. package/dist/src/internal/hooks/useBulkActionRunner.d.ts +41 -0
  256. package/dist/src/internal/hooks/useConfirmationDraft.d.ts +21 -0
  257. package/dist/src/internal/types/bulkActionTypes.d.ts +39 -0
  258. package/dist/src/internal/types/confirmationTypes.d.ts +19 -0
  259. package/dist/src/internal/types/optionContent.d.ts +19 -0
  260. package/dist/src/internal/types/selectFieldInternalTypes.d.ts +2 -0
  261. package/dist/{stripInlineMarkdown-D_eHogvh.js → stripInlineMarkdown-C5DNxxwf.js} +2 -2
  262. package/dist/{stripInlineMarkdown-D_eHogvh.js.map → stripInlineMarkdown-C5DNxxwf.js.map} +1 -1
  263. package/dist/{syncFilterUtils-Dpp7gt05.js → syncFilterUtils-BEKek64h.js} +497 -458
  264. package/dist/syncFilterUtils-BEKek64h.js.map +1 -0
  265. package/dist/syncFilterUtils.css +96 -59
  266. package/dist/{useDrilldown-bIRsbg1m.js → useDrilldown-KZ9rRsXQ.js} +2 -2
  267. package/dist/{useDrilldown-bIRsbg1m.js.map → useDrilldown-KZ9rRsXQ.js.map} +1 -1
  268. package/dist/{Combobox-BXQFOwX4.js → useInfiniteCombobox-CknXmqlQ.js} +188 -13
  269. package/dist/useInfiniteCombobox-CknXmqlQ.js.map +1 -0
  270. package/dist/{useMenuInteraction-C4RU5Fdq.js → useMenuInteraction-CpAOHSJu.js} +118 -5
  271. package/dist/useMenuInteraction-CpAOHSJu.js.map +1 -0
  272. package/dist/useMenuInteraction.css +28 -0
  273. package/dist/{useToggleSelection-DBqr4HwT.js → useToggleSelection-B-Z80gy2.js} +53 -4
  274. package/dist/useToggleSelection-B-Z80gy2.js.map +1 -0
  275. package/package.json +1 -1
  276. package/dist/Checkbox.module-DVbXNsaN.js +0 -28
  277. package/dist/Checkbox.module-DVbXNsaN.js.map +0 -1
  278. package/dist/Combobox-BXQFOwX4.js.map +0 -1
  279. package/dist/DateFieldRange-CO2C776E.js.map +0 -1
  280. package/dist/FilterBar-GjMlLOME.js +0 -1442
  281. package/dist/FilterBar-GjMlLOME.js.map +0 -1
  282. package/dist/ListView.module-CKUQP3kf.js.map +0 -1
  283. package/dist/MultiSelectFieldSync-BxyQiVPQ.js.map +0 -1
  284. package/dist/MultiSelectMenuSync-BJfvZGf3.js.map +0 -1
  285. package/dist/SelectFieldSync-z8b41JZz.js.map +0 -1
  286. package/dist/SelectMenuSync-Cf1Zradm.js.map +0 -1
  287. package/dist/SelectTriggerBase-4o1cqEbR.js.map +0 -1
  288. package/dist/SelectTriggerBase.module-BgZSNZfE.js +0 -37
  289. package/dist/SelectTriggerBase.module-BgZSNZfE.js.map +0 -1
  290. package/dist/TextField.module-DkZwywjf.js +0 -23
  291. package/dist/TextField.module-DkZwywjf.js.map +0 -1
  292. package/dist/ToolbarButtonToggle-xvMWRxzC.js.map +0 -1
  293. package/dist/src/beta/components/FilterBar/FilterButton.d.ts +0 -30
  294. package/dist/src/beta/components/FilterBar/FilterSelect.d.ts +0 -29
  295. package/dist/syncFilterUtils-Dpp7gt05.js.map +0 -1
  296. package/dist/useInfiniteCombobox-WcRgC9p6.js +0 -179
  297. package/dist/useInfiniteCombobox-WcRgC9p6.js.map +0 -1
  298. package/dist/useMenuInteraction-C4RU5Fdq.js.map +0 -1
  299. package/dist/useToggleSelection-DBqr4HwT.js.map +0 -1
  300. /package/dist/{Combobox.css → useInfiniteCombobox.css} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilterBar-GjMlLOME.js","sources":["../src/internal/hooks/useContainerQuery/useContainerQuery.ts","../src/beta/components/FilterBar/internal/FilterGroupContext.tsx","../src/beta/components/FilterBar/FilterItemWrapper.tsx","../src/beta/components/FilterBar/internal/utils/filter-state.ts","../src/beta/components/FilterBar/FilterToggleButton.tsx","../src/beta/components/FilterBar/FilterSelect.tsx","../src/beta/components/FilterBar/FilterDateSingle.tsx","../src/beta/components/FilterBar/FilterDateRange.tsx","../src/beta/components/FilterBar/FilterButton.tsx","../../hammer-icon/mdi/round/tune.svg","../src/beta/components/FilterBar/FilterDrawer.tsx","../src/beta/components/FilterBar/FilterBar.tsx"],"sourcesContent":["import { useEffect, useState, RefObject } from \"react\";\nimport { core } from \"@servicetitan/hammer-token\";\n\n/**\n * Return type for the useContainerQuery hook\n */\nexport type ContainerQueryReturnProps = {\n /**\n * The breakpoint name\n */\n name: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n /**\n * Minimum width for this breakpoint\n */\n min: number | undefined;\n /**\n * Maximum width for this breakpoint\n */\n max: number | undefined;\n /**\n * Current container width\n */\n containerWidth: number;\n /**\n * Current container height\n */\n containerHeight: number;\n};\n\n/**\n * Determines if the current container width matches a specific breakpoint\n * @param containerWidth - The container width\n * @param name - The breakpoint name\n * @param min - Minimum width for this breakpoint\n * @param max - Maximum width for this breakpoint\n * @returns Breakpoint information if matched, undefined otherwise\n */\nfunction containerBreakpoint(\n containerWidth: number,\n name: ContainerQueryReturnProps[\"name\"],\n min?: number,\n max?: number,\n): ContainerQueryReturnProps | undefined {\n if (\n (min == null || containerWidth >= min) &&\n (max == null || containerWidth < max)\n ) {\n return {\n name,\n min,\n max,\n containerWidth,\n containerHeight: 0, // Will be updated with actual height\n } as const;\n }\n return undefined;\n}\n\n/**\n * Determines the current breakpoint based on container width and hammer-token breakpoint values.\n *\n * Features:\n * - Validates that all required hammer-token breakpoint values are available\n * - Uses cascade logic to determine the appropriate breakpoint\n * - Returns the first matching breakpoint in order of preference\n * - Handles edge cases where breakpoint values are missing\n * - Uses container dimensions for accurate measurements\n * - Supports all standard breakpoints (xs, sm, md, lg, xl, xxl)\n *\n * @param containerWidth - The width of the container element\n * @param containerHeight - The height of the container element\n * @returns Current breakpoint information or undefined if breakpoint values are unavailable\n */\nconst getContainerBreakpoint = (\n containerWidth: number,\n containerHeight: number,\n) => {\n if (!core.primitive?.BreakpointSm) return;\n if (!core.primitive?.BreakpointMd) return;\n if (!core.primitive?.BreakpointLg) return;\n if (!core.primitive?.BreakpointXl) return;\n if (!core.primitive?.BreakpointXxl) return;\n\n const sm = parseInt(core.primitive?.BreakpointSm.value);\n const md = parseInt(core.primitive?.BreakpointMd.value);\n const lg = parseInt(core.primitive?.BreakpointLg.value);\n const xl = parseInt(core.primitive?.BreakpointXl.value);\n const xxl = parseInt(core.primitive?.BreakpointXxl.value);\n\n const result =\n containerBreakpoint(containerWidth, \"xs\", undefined, sm) ??\n containerBreakpoint(containerWidth, \"sm\", sm, md) ??\n containerBreakpoint(containerWidth, \"md\", md, lg) ??\n containerBreakpoint(containerWidth, \"lg\", lg, xl) ??\n containerBreakpoint(containerWidth, \"xl\", xl, xxl) ??\n containerBreakpoint(containerWidth, \"xxl\", xxl, undefined);\n\n return result ? { ...result, containerHeight } : undefined;\n};\n\n/**\n * Custom hook for detecting current breakpoint based on container dimensions.\n *\n * Features:\n * - Detects current breakpoint based on container width instead of viewport width\n * - Supports all standard breakpoints (xs, sm, md, lg, xl, xxl)\n * - Provides container dimensions information\n * - Uses hammer-token breakpoint values for consistency\n * - Listens for container resize events using ResizeObserver\n * - Supports optional disable functionality\n * - Uses container element dimensions for accurate measurements\n *\n * @param containerRef - React ref to the container element to observe\n * @param props - Optional configuration object\n * @param props.disable - Whether to disable the hook\n * @returns Current breakpoint information or undefined if disabled\n */\nexport const useContainerQuery = (\n containerRef: RefObject<HTMLElement>,\n props?: { disable?: boolean },\n) => {\n const [size, setSize] = useState<ContainerQueryReturnProps | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (props?.disable || !containerRef.current) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n const breakpoint = getContainerBreakpoint(width, height);\n setSize(breakpoint);\n }\n });\n\n resizeObserver.observe(containerRef.current);\n\n // Set initial size\n const rect = containerRef.current.getBoundingClientRect();\n setSize(getContainerBreakpoint(rect.width, rect.height));\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [containerRef, props?.disable]);\n\n if (props?.disable) return undefined;\n return size;\n};\n","import { createContext, RefObject } from \"react\";\nimport { FilterBarProps } from \"../FilterBar\";\nimport { Filter, FilterValue } from \"./types\";\n\n/**\n * Context for sharing filter state and operations between FilterBar and its children\n *\n * @extends FilterBarProps\n */\ntype FilterGroupContextProps = FilterBarProps & {\n /** Reference to the filter group DOM element\n * @default { current: null }\n */\n filterGroupRef: RefObject<HTMLDivElement>;\n /** Current filters array\n * @default []\n */\n filters: Filter[];\n /** Function to update a single filter and submit if needed\n * @default () => {}\n */\n updateFilter: (filterId: string, value: FilterValue, submit: boolean) => void;\n /** Array of filters that are currently hidden due to overflow\n * @default []\n */\n hiddenFilters: Filter[];\n /** Function to mark a filter as hidden\n * @default () => {}\n */\n addHiddenFilter: (filter: Filter) => void;\n /** Function to mark a filter as visible\n * @default () => {}\n */\n removeHiddenFilter: (filter: Filter) => void;\n};\n\n/**\n * Context provider for filter-related operations\n * Used to share filter state between FilterBar and FilterDrawer\n */\nexport const FilterGroupContext = createContext<FilterGroupContextProps>({\n filterGroupRef: { current: null },\n filters: [],\n updateFilter: () => {},\n onFilterChange: () => {},\n controlledFiltering: false,\n associatedContent: \"\",\n hiddenFilters: [],\n addHiddenFilter: () => {},\n removeHiddenFilter: () => {},\n});\n","import { useContext, useCallback, useMemo } from \"react\";\nimport { FilterGroupContext } from \"./internal/FilterGroupContext\";\nimport { Filter } from \"./internal/types\";\nimport {\n ToolbarItemWrapper,\n ToolbarItemWrapperProps,\n} from \"../Toolbar/internal/ToolbarItemWrapper\";\nimport { ToolbarButtonProps } from \"../Toolbar/ToolbarButton\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * Props for the FilterItemWrapper component\n */\ntype FilterItemWrapperProps = {\n /**\n * Optional filter object. If provided, visibility changes will be tracked in FilterGroupContext.\n * If not provided, only basic visibility tracking will be used.\n */\n filter?: Filter;\n /** The content to render inside the wrapper */\n children: React.ReactNode;\n};\n\n/**\n * FilterItemWrapper extends ToolbarItemWrapper to handle filter-specific visibility.\n * Uses FilterGroupContext to track hidden filters instead of overflow menu.\n * Built into FilterButton and other filter components for consistent overflow handling.\n *\n * Features:\n * - Wraps filter controls for consistent overflow and visibility handling\n * - Integrates with FilterGroupContext to track hidden filters\n */\nexport const FilterItemWrapper = ({\n filter,\n children,\n}: FilterItemWrapperProps) => {\n const { addHiddenFilter, removeHiddenFilter, filterGroupRef } =\n useContext(FilterGroupContext);\n\n const handleVisibilityChange = useCallback(\n (isVisible: boolean) => {\n // Only track in FilterGroupContext if a filter is provided\n if (filter) {\n if (isVisible) {\n removeHiddenFilter?.(filter);\n } else {\n addHiddenFilter?.(filter);\n }\n }\n },\n [filter, addHiddenFilter, removeHiddenFilter],\n );\n\n const props: ToolbarItemWrapperProps = useMemo(\n () => ({\n item: {\n itemType: \"button\",\n itemProps: {\n children: null,\n \"aria-hidden\": true,\n } as ToolbarButtonProps,\n },\n children,\n className: styles[\"filter-item\"],\n observerRoot: filterGroupRef.current,\n onVisibilityChange: handleVisibilityChange,\n rootMargin: \"0px -80px 0px 0px\",\n }),\n [children, filterGroupRef, handleVisibilityChange],\n );\n\n return <ToolbarItemWrapper {...props} />;\n};\n","import {\n BooleanFilter,\n CustomFilter,\n DateFilter,\n DateRangeFilter,\n Filter,\n FilterValue,\n MultiSelectFilter,\n SingleSelectFilter,\n} from \"../types\";\n\n/**\n * Returns an array of filters that are currently active (i.e., have a value set).\n *\n * @param {Filter[]} filters - Array of filter objects to check\n * @returns {Filter[]} Array of active filters\n */\nexport const getActiveFilters = (filters: Filter[]): Filter[] => {\n return filters.filter((filter) => {\n switch (filter.type) {\n case \"boolean\":\n return filter.checked;\n case \"custom\":\n return filter.value !== undefined;\n case \"singleSelect\":\n return filter.selectedItem !== undefined;\n case \"multiSelect\":\n return filter.selectedItems && filter.selectedItems.length > 0;\n case \"date\":\n return filter.value !== null && filter.value !== undefined;\n case \"dateRange\":\n return (\n filter.value !== null &&\n filter.value !== undefined &&\n filter.value.startDate !== null &&\n filter.value.endDate !== null\n );\n default:\n return false;\n }\n });\n};\n\n/**\n * Checks if any filters in the array have active values\n *\n * @param {Filter[]} filters - Array of filter objects to check\n * @returns {boolean} True if any filter has an active value\n */\nexport const checkActiveFilters = (filters: Filter[]): boolean => {\n return getActiveFilters(filters).length > 0;\n};\n\n/**\n * Resets all filters to their default state\n *\n * @param {Filter[]} filters - Array of filter objects to reset\n * @returns {Filter[]} New array with reset filters\n */\nexport const resetFilters = (filters: Filter[]): Filter[] => {\n return filters.map((filter) => {\n switch (filter.type) {\n case \"boolean\":\n return {\n ...filter,\n checked: false,\n };\n case \"custom\":\n return {\n ...filter,\n value: undefined,\n };\n case \"singleSelect\":\n return {\n ...filter,\n selectedItem: undefined,\n };\n case \"multiSelect\":\n return {\n ...filter,\n selectedItems: [],\n };\n case \"date\":\n case \"dateRange\":\n return {\n ...filter,\n value: null,\n };\n default:\n return filter;\n }\n });\n};\n\n/**\n * Updates a single filter in an array of filters\n *\n * @param {Filter[]} filters - Array of filter objects\n * @param {string} filterId - ID of the filter to update\n * @param {FilterValue} value - New value for the filter\n * @returns {Filter[]} New array with updated filter\n */\nexport const updateSingleFilter = (\n filters: Filter[],\n filterId: string,\n value: FilterValue,\n): Filter[] => {\n return filters.map((filter) => {\n if (filter.id !== filterId) return filter;\n\n switch (filter.type) {\n case \"boolean\":\n return {\n ...filter,\n checked: value as boolean,\n };\n case \"singleSelect\":\n return {\n ...filter,\n selectedItem: value,\n };\n case \"multiSelect\":\n return {\n ...filter,\n selectedItems: value as unknown[],\n };\n case \"date\":\n return {\n ...filter,\n value: value as string | null,\n };\n case \"dateRange\":\n return {\n ...filter,\n value: value as {\n startDate: string | null;\n endDate: string | null;\n } | null,\n };\n case \"custom\":\n return {\n ...filter,\n value,\n };\n default:\n return filter;\n }\n });\n};\n\n/**\n * Determines if two filter values are different.\n * For arrays (multiSelect), compares by id set (order-insensitive, avoids JSON serialization).\n * For singleSelect, compares by id if both are objects with id.\n *\n * @param {T} a - First value to compare\n * @param {T} b - Second value to compare\n * @returns {boolean} True if the values are different\n */\nexport const hasChangedFilter = <T>(a: T, b: T): boolean => {\n // For arrays (multiSelect), compare by id set to handle new array references with same items.\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return true;\n if (a.length === 0) return false;\n const aItems = a as Array<{ id?: unknown }>;\n const bItems = b as Array<{ id?: unknown }>;\n if (aItems[0] && \"id\" in aItems[0]) {\n const aIds = new Set(aItems.map((item) => item.id));\n return (bItems as Array<{ id: unknown }>).some(\n (item) => !aIds.has(item.id),\n );\n }\n return JSON.stringify(a) !== JSON.stringify(b);\n }\n // For singleSelect, compare by id if both are objects with id\n if (\n a &&\n b &&\n typeof a === \"object\" &&\n typeof b === \"object\" &&\n \"id\" in a &&\n \"id\" in b\n ) {\n return a.id !== b.id;\n }\n // Fallback to strict equality\n return a !== b;\n};\n\n/**\n * Gets the selection value from a filter based on its type.\n * Internal helper function used by hasFilterSelectionChanged.\n *\n * @param {Filter} filter - The filter to extract the selection value from\n * @returns {unknown} The selection value (checked, selectedItem, selectedItems, value)\n */\nconst getFilterSelectionValue = (filter: Filter): unknown => {\n switch (filter.type) {\n case \"boolean\":\n return filter.checked;\n case \"singleSelect\":\n return filter.selectedItem;\n case \"multiSelect\":\n return filter.selectedItems;\n case \"date\":\n case \"dateRange\":\n case \"custom\":\n return filter.value;\n default:\n return undefined;\n }\n};\n\n/**\n * Checks if the selection value of a filter has changed by comparing references.\n * Uses reference equality (===) to detect if the parent has provided a new value.\n *\n * @param {Filter} existingFilter - The current filter state\n * @param {Filter} newFilter - The incoming filter from props\n * @returns {boolean} True if the selection value reference has changed\n */\nexport const hasFilterSelectionChanged = (\n existingFilter: Filter,\n newFilter: Filter,\n): boolean => {\n const existingValue = getFilterSelectionValue(existingFilter);\n const newValue = getFilterSelectionValue(newFilter);\n\n // Reference equality check - returns true if references differ\n return existingValue !== newValue;\n};\n\n/**\n * Preserves the selection state from an existing filter into a new filter.\n * Used when filter configuration updates but the selection value reference hasn't changed,\n * allowing us to maintain user selections through configuration updates.\n *\n * @param {Filter} newFilter - The new filter configuration from props\n * @param {Filter} existingFilter - The existing filter with user's selections\n * @returns {Filter} New filter with configuration from newFilter and selection from existingFilter\n */\nexport const preserveFilterState = (\n newFilter: Filter,\n existingFilter: Filter,\n): Filter => {\n switch (newFilter.type) {\n case \"boolean\":\n return {\n ...newFilter,\n checked: (existingFilter as BooleanFilter).checked,\n };\n case \"singleSelect\":\n return {\n ...newFilter,\n selectedItem: (existingFilter as SingleSelectFilter<unknown>)\n .selectedItem,\n };\n case \"multiSelect\":\n return {\n ...newFilter,\n selectedItems: (existingFilter as MultiSelectFilter<unknown>)\n .selectedItems,\n };\n case \"date\":\n return {\n ...newFilter,\n value: (existingFilter as DateFilter).value,\n };\n case \"dateRange\":\n return {\n ...newFilter,\n value: (existingFilter as DateRangeFilter).value,\n };\n case \"custom\":\n return {\n ...newFilter,\n value: (existingFilter as CustomFilter<unknown>).value,\n };\n default:\n return newFilter;\n }\n};\n\n/**\n * Creates a deep clone of filters with updated item references.\n * Ensures that selected items reference the current items array for proper equality checks.\n * Used when initializing draft state to ensure selections use current item references.\n *\n * @param {Filter[]} filters - Array of filter objects to clone\n * @returns {Filter[]} New array with cloned filters and updated item references\n */\nexport const cloneFiltersWithItemRefs = (filters: Filter[]): Filter[] => {\n return filters.map((filter) => {\n switch (filter.type) {\n case \"singleSelect\":\n return {\n ...filter,\n selectedItem: filter.selectedItem\n ? filter.items.find(\n (item) => item.id === filter.selectedItem?.id,\n ) || filter.selectedItem\n : undefined,\n };\n case \"multiSelect\":\n return {\n ...filter,\n selectedItems: filter.selectedItems\n ? filter.selectedItems.map(\n (selectedItem) =>\n filter.items.find((item) => item.id === selectedItem.id) ||\n selectedItem,\n )\n : [],\n };\n case \"date\":\n return {\n ...filter,\n value: filter.value as string | null,\n };\n case \"dateRange\":\n return {\n ...filter,\n value: filter.value as {\n startDate: string | null;\n endDate: string | null;\n } | null,\n };\n case \"custom\": {\n const { value } = filter;\n\n if (value === undefined) {\n return { ...filter, value: undefined };\n }\n if (Array.isArray(value)) {\n return { ...filter, value: [...value] };\n }\n if (typeof value === \"object\" && value !== null) {\n return { ...filter, value: { ...value } };\n }\n return { ...filter, value };\n }\n default:\n return { ...filter };\n }\n });\n};\n","import {\n ToolbarButtonToggle,\n ToolbarButtonToggleProps,\n} from \"../Toolbar/ToolbarButtonToggle\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport { BooleanFilter } from \"./internal/types\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * Props for the FilterToggleButton component\n *\n * @extends Omit<ToolbarButtonToggleProps, \"checked\">\n */\nexport type FilterToggleButtonProps = Omit<\n ToolbarButtonToggleProps,\n \"checked\"\n> & {\n /** Unique identifier for the filter */\n id: string;\n /** Whether the toggle is checked */\n checked: boolean;\n /** The content to display inside the toggle button */\n children: React.ReactNode;\n};\n\n/**\n * FilterToggleButton wraps ToolbarButtonToggle in a FilterItemWrapper for consistent overflow behavior with other filter types.\n * Built into FilterGroup for boolean filter rendering.\n *\n * Features:\n * - Renders a toggle button for boolean filters\n * - Integrates with FilterGroup and FilterItemWrapper for overflow handling\n * - Supports accessibility and keyboard navigation\n */\nexport const FilterToggleButton = ({\n id,\n checked,\n children,\n ...props\n}: FilterToggleButtonProps) => {\n // Construct a BooleanFilter object from the props\n const filter: BooleanFilter = {\n id,\n type: \"boolean\",\n checked,\n label: typeof children === \"string\" ? children : id,\n };\n\n return (\n <FilterItemWrapper filter={filter}>\n <ToolbarButtonToggle\n checked={checked}\n isFilter\n {...props}\n className={styles[\"filter-button-trigger\"]}\n data-anv=\"toolbar-boolean-filter\"\n >\n {children}\n </ToolbarButtonToggle>\n </FilterItemWrapper>\n );\n};\n","import {\n useMemo,\n useCallback,\n useRef,\n useState,\n useEffect,\n KeyboardEvent,\n} from \"react\";\nimport { tabbable } from \"tabbable\";\nimport { MultiSelectFilter, SingleSelectFilter } from \"./internal/types\";\nimport Listbox from \"../../../components/Listbox\";\nimport ListView from \"../../../components/ListView\";\nimport { SearchField } from \"../../../components/SearchField\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * Props for the FilterSelect component\n */\ninterface FilterSelectProps<Item extends { id: string; label: string }> {\n /** The filter configuration object */\n filter: SingleSelectFilter<Item> | MultiSelectFilter<Item>;\n /** The current draft value for the filter */\n draftValue: Item | Item[] | undefined;\n /** Callback to update the draft value */\n onDraftChange: (value: Item | Item[] | undefined) => void;\n}\n\n/**\n * FilterSelect component renders a Listbox or ListView for single or multi-select filters.\n * Built into FilterButton and FilterDrawer for filter selection UI.\n *\n * Features:\n * - Renders a Listbox for single select filters\n * - Renders a ListView for multi select filters\n * - Supports search field for filtering options\n */\nexport const FilterSelect = <Item extends { id: string; label: string }>({\n filter,\n draftValue,\n onDraftChange,\n}: FilterSelectProps<Item>) => {\n const isMultiSelect = filter.type === \"multiSelect\";\n\n // Ref to track the list container for focus management\n const listRef = useRef<HTMLDivElement>(null);\n\n // For multi-select with search: keep a stable snapshot of items so that a selection\n // (which causes the consumer to re-render and potentially reset filter.items) does not\n // clear the search-filtered list while the search field still has a value.\n const shouldStabilizeItems = isMultiSelect && filter.hasSearch;\n const [stableItems, setStableItems] = useState(filter.items);\n const isSearchActiveRef = useRef(false);\n const expectingSearchUpdate = useRef(false);\n\n // displayItems is filter.items for all non-stabilized cases so items always stay\n // in sync with props without an extra render cycle via state.\n const displayItems = shouldStabilizeItems ? stableItems : filter.items;\n\n useEffect(() => {\n if (!shouldStabilizeItems) return;\n if (expectingSearchUpdate.current) {\n // This items update was triggered by a new search term — accept it\n setStableItems(filter.items);\n expectingSearchUpdate.current = false;\n } else if (!isSearchActiveRef.current) {\n // Search is not active — freely sync items (e.g. search cleared, initial load)\n setStableItems(filter.items);\n }\n // While search is active and this isn't a search-triggered update (i.e. a selection\n // update caused the consumer to re-render), preserve the current stableItems.\n }, [filter.items, shouldStabilizeItems]);\n\n const handleSearch = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n filter.onSearch?.(value);\n if (shouldStabilizeItems) {\n if (value.length > 0) {\n isSearchActiveRef.current = true;\n expectingSearchUpdate.current = true;\n } else {\n isSearchActiveRef.current = false;\n }\n }\n },\n [filter, shouldStabilizeItems],\n );\n\n const handleSearchClear = useCallback(() => {\n filter.onSearchClear?.();\n if (shouldStabilizeItems) {\n isSearchActiveRef.current = false;\n }\n }, [filter, shouldStabilizeItems]);\n\n const handleSearchKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\" && listRef.current) {\n e.preventDefault();\n // Find first focusable element in the list and focus it\n const focusableElements = tabbable(listRef.current);\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n }\n }\n },\n [],\n );\n\n const singleSelectList = useMemo(\n () => (\n <div ref={listRef}>\n <Listbox\n key={filter.id}\n items={filter.items}\n selected={draftValue as Item | undefined}\n onSelectionChange={(selected: Item | undefined) => {\n onDraftChange(selected);\n }}\n disableAutoSelectOnFocus\n style={{ paddingInline: \"1rem\", paddingBlockStart: \"1rem\" }}\n >\n {({ items }) =>\n items.map((item) => (\n <Listbox.Option\n key={item.id}\n item={item}\n disabled={item.disabled}\n >\n {item.label}\n </Listbox.Option>\n ))\n }\n </Listbox>\n </div>\n ),\n [filter.id, filter.items, draftValue, onDraftChange],\n );\n\n const multiSelectList = useMemo(\n () => (\n <div ref={listRef}>\n <ListView\n key={filter.id}\n items={displayItems}\n selected={Array.isArray(draftValue) ? draftValue : []}\n onSelectionChange={(selectedItems: unknown[]) => {\n const items = selectedItems as Item[];\n onDraftChange(items);\n }}\n style={{ paddingInline: \"1rem\", paddingBlockStart: \"1rem\" }}\n >\n {({ items }) =>\n items.map((item) => (\n <ListView.Option key={item.id} item={item}>\n {item.label}\n </ListView.Option>\n ))\n }\n </ListView>\n </div>\n ),\n [filter.id, displayItems, draftValue, onDraftChange],\n );\n\n return (\n <>\n {filter.hasSearch && (\n <SearchField\n size=\"small\"\n className={styles[\"filter-select-search\"]}\n onChange={handleSearch}\n onClear={handleSearchClear}\n onKeyDown={handleSearchKeyDown}\n data-anv=\"filter-select-search\"\n />\n )}\n {isMultiSelect ? multiSelectList : singleSelectList}\n </>\n );\n};\n","import { useRef } from \"react\";\nimport { DateFilter } from \"./internal/types\";\nimport Flex from \"../../../components/Flex\";\nimport {\n MaskedDateInput,\n MaskedDateInputRef,\n} from \"../../../components/DateFieldSingle/internal/MaskedDateInput\";\nimport { DateFieldSingleChange } from \"../../../components/DateFieldSingle\";\nimport { useDateFieldSingleConversion } from \"../../../components/DateFieldSingle/internal/useDateFieldSingleConversion\";\nimport { useDateFieldSingleState } from \"../../../components/DateFieldSingle/internal/useDateFieldSingleState\";\nimport { DateFieldSingleCalendar } from \"../../../components/DateFieldSingle/internal/DateFieldSingleCalendar\";\n\n/**\n * Props for the FilterDateSingle component\n */\ninterface FilterDateSingleProps {\n /**\n * The date filter configuration object containing mode and other settings\n */\n filter: DateFilter;\n /**\n * The current draft value for the date filter in ISO 8601 format\n */\n draftValue: string | null;\n /**\n * Callback function to update the draft value when the date changes\n */\n onDraftChange: (value: string | null) => void;\n}\n\n/**\n * FilterDateSingle component for selecting a single date in toolbar filters.\n *\n * Features:\n * - Renders a masked date input field with format validation\n * - Provides calendar popup for date selection\n * - Integrates with toolbar filter state management\n * - Supports controlled and uncontrolled date selection\n * - Maintains draft state for filter changes\n */\nexport const FilterDateSingle = ({\n filter,\n draftValue,\n onDraftChange,\n}: FilterDateSingleProps) => {\n const maskedDateInputRef = useRef<MaskedDateInputRef>(null);\n\n const handleChange = (change: DateFieldSingleChange) => {\n onDraftChange(change.date);\n };\n\n const { value, onChange } = useDateFieldSingleConversion({\n value: draftValue,\n onChange: handleChange,\n });\n\n const { handleInputChange, handleCalendarSelection } =\n useDateFieldSingleState({\n valueProp: value,\n onChange: (change) => onChange({ ...change, isDateValid: true }),\n });\n\n return (\n <Flex gap={4} direction=\"column\">\n <MaskedDateInput\n mode={filter.mode}\n ref={maskedDateInputRef}\n onChange={handleInputChange}\n lastValidDate={value ?? null}\n autoComplete=\"off\"\n />\n\n <DateFieldSingleCalendar\n value={value ?? null}\n onSelection={handleCalendarSelection}\n />\n </Flex>\n );\n};\n","import { useRef } from \"react\";\nimport { DateRangeFilter } from \"./internal/types\";\nimport {\n MaskedDateRangeInput,\n MaskedDateRangeInputRef,\n} from \"../../../components/DateFieldRange/internal/MaskedDateRangeInput\";\nimport { DateFieldRangeChange } from \"../../../components/DateFieldRange\";\nimport { useDateFieldRangeConversion } from \"../../../components/DateFieldRange/internal/useDateFieldRangeConversion\";\nimport { useDateFieldRangeState } from \"../../../components/DateFieldRange/internal/useDateFieldRangeState\";\nimport Flex from \"../../../components/Flex\";\nimport { DateFieldRangeCalendar } from \"../../../components/DateFieldRange/internal/DateFieldRangeCalendar\";\n\n/**\n * Props for the FilterDateRange component\n */\ninterface FilterDateRangeProps {\n /**\n * The date range filter configuration object containing mode and other settings\n */\n filter: DateRangeFilter;\n /**\n * The current draft value for the date range filter with start and end dates in ISO 8601 format\n */\n draftValue: { startDate: string | null; endDate: string | null } | null;\n /**\n * Callback function to update the draft value when the date range changes\n */\n onDraftChange: (\n value: { startDate: string | null; endDate: string | null } | null,\n ) => void;\n}\n\n/**\n * FilterDateRange component for selecting a date range in toolbar filters.\n *\n * Features:\n * - Renders a masked date range input field with format validation\n * - Provides calendar popup for date range selection\n * - Integrates with toolbar filter state management\n * - Supports controlled and uncontrolled date range selection\n * - Maintains draft state for filter changes\n * - Handles start and end date selection independently\n */\nexport const FilterDateRange = ({\n filter,\n draftValue,\n onDraftChange,\n}: FilterDateRangeProps) => {\n const maskedDateRangeInputRef = useRef<MaskedDateRangeInputRef>(null);\n\n const handleChange = (change: DateFieldRangeChange) => {\n // Only call onDraftChange when we have a complete date range (both start and end)\n // or when clearing the range (both null)\n const hasCompleteRange = change.startDate && change.endDate;\n const isClearingRange = !change.startDate && !change.endDate;\n\n if (hasCompleteRange || isClearingRange) {\n onDraftChange({\n startDate: change.startDate,\n endDate: change.endDate,\n });\n }\n };\n\n const { value, onChange } = useDateFieldRangeConversion({\n value: draftValue,\n onChange: handleChange,\n });\n\n const { handleInputChange, handleCalendarSelection } = useDateFieldRangeState(\n {\n valueProp: value,\n onChange: (change) => {\n // Only call handleChange if input is valid and we have a complete range, or if clearing\n const hasCompleteRange = change.startDate && change.endDate;\n const isClearingRange = change.isInputEmpty;\n\n if ((change.isInputValid && hasCompleteRange) || isClearingRange) {\n onChange({ ...change, isDateRangeValid: true });\n }\n },\n },\n );\n\n return (\n <Flex gap={4} direction=\"column\">\n <MaskedDateRangeInput\n mode={filter.mode}\n ref={maskedDateRangeInputRef}\n onChange={handleInputChange}\n startDate={value?.startDate ?? null}\n endDate={value?.endDate ?? null}\n autoComplete=\"off\"\n />\n\n <DateFieldRangeCalendar\n startDate={value?.startDate ?? null}\n endDate={value?.endDate ?? null}\n onSelection={handleCalendarSelection}\n />\n </Flex>\n );\n};\n","import {\n useContext,\n useState,\n ReactNode,\n useEffect,\n KeyboardEvent,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport ArrowDropDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport { DateTime } from \"luxon\";\nimport {\n CustomFilter,\n DateFilter,\n DateRangeFilter,\n Filter,\n MultiSelectFilter,\n SingleSelectFilter,\n} from \"./internal/types\";\nimport { FilterGroupContext } from \"./internal/FilterGroupContext\";\nimport {\n hasChangedFilter,\n hasFilterSelectionChanged,\n} from \"./internal/utils/filter-state\";\nimport Chip from \"../../../components/Chip\";\nimport { FilterSelect } from \"./FilterSelect\";\nimport { FilterDateSingle } from \"./FilterDateSingle\";\nimport { FilterDateRange } from \"./FilterDateRange\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport Popover from \"../../../internal/components/Popover\";\nimport Flex from \"../../../components/Flex\";\nimport Button from \"../../../components/Button\";\n\nimport { useToolbarSize } from \"../Toolbar/internal/ToolbarContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * Props for the FilterButton component\n */\ninterface FilterButtonProps {\n /** Filter configuration object */\n filter: Filter;\n /** Optional child content for non-custom filter types */\n children?: ReactNode;\n /** Optional class name for the popover content */\n className?: string;\n}\n\n/**\n * FilterButton component provides a popover interface for filter selection.\n * Handles both controlled and uncontrolled filter updates.\n * Built into FilterGroup for single-select, multi-select, date, and date range filter rendering.\n *\n * Features:\n * - Maintains draft state for controlled filters\n * - Updates immediately for uncontrolled filters\n * - Provides Apply and Cancel actions in controlled mode\n * - Supports keyboard navigation and accessibility\n * - Renders custom, single-select, multi-select, date, and date range filter types\n * - Integrates with FilterGroup context for state management\n * - Displays appropriate icons for date-based filters\n * - Shows formatted date values in button labels\n */\nexport const FilterButton = ({\n filter,\n children,\n className,\n}: FilterButtonProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const { updateFilter, controlledFiltering } = useContext(FilterGroupContext);\n const toolbarSize = useToolbarSize();\n\n // MultiSelect filters need to be initialized with an empty array\n const [draftValue, setDraftValue] = useState<unknown>(\n filter.type === \"multiSelect\" ? [] : undefined,\n );\n\n // Ref to track draftValue without causing handleChange to recreate\n const draftValueRef = useRef(draftValue);\n\n // Sync ref with state\n useEffect(() => {\n draftValueRef.current = draftValue;\n }, [draftValue]);\n\n /**\n * Returns the current value for the filter based on its type.\n * Used for resetting draft state and comparing changes.\n *\n * @returns The current filter value based on type:\n * - singleSelect: selectedItem\n * - multiSelect: selectedItems array\n * - date: date string value\n * - dateRange: { startDate, endDate } object\n * - custom: custom value\n */\n const getCurrentFilterValue = useCallback(() => {\n switch (filter.type) {\n case \"singleSelect\":\n return (filter as SingleSelectFilter<unknown>).selectedItem;\n case \"multiSelect\":\n return (filter as MultiSelectFilter<unknown>).selectedItems || [];\n case \"date\":\n case \"dateRange\":\n return filter.value;\n case \"custom\":\n return (filter as CustomFilter<unknown>).value;\n default:\n return undefined;\n }\n }, [filter]);\n\n // Track previous state to detect when to sync draft\n const prevIsOpenRef = useRef(isOpen);\n const prevFilterRef = useRef<Filter>(filter);\n\n // Initialize draft state when popover opens and sync when filter selection changes while open\n useEffect(() => {\n const justOpened = isOpen && !prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen) {\n // Sync draft state if:\n // 1. Popover just opened, OR\n // 2. Filter selection value changed while already open (race condition fix)\n // Don't sync when only items array changes (preserves selection during search)\n const shouldSync =\n justOpened ||\n (prevFilterRef.current &&\n hasFilterSelectionChanged(prevFilterRef.current, filter));\n\n if (shouldSync) {\n const currentValue = getCurrentFilterValue();\n setDraftValue(currentValue);\n }\n\n prevFilterRef.current = filter;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, filter]);\n\n const handleChange = useCallback(\n (value: unknown) => {\n if (hasChangedFilter(value, draftValueRef.current)) {\n // Sync ref immediately to guard against duplicate calls from ListView re-renders\n draftValueRef.current = value;\n // Always update draft state\n setDraftValue(value);\n\n // In uncontrolled mode, update immediately for all filter types\n // For multi-select, keep popover open to allow multiple selections\n // For all other types, close popover after updating\n if (!controlledFiltering) {\n updateFilter(filter.id, value, true);\n\n if (filter.type !== \"multiSelect\") {\n setIsOpen(false);\n }\n }\n }\n },\n [filter.id, filter.type, controlledFiltering, updateFilter],\n );\n\n const handleSubmit = useCallback(() => {\n const stateValue = getCurrentFilterValue();\n\n if (hasChangedFilter(draftValue, stateValue)) {\n updateFilter(filter.id, draftValue, true);\n }\n\n setIsOpen(false);\n }, [draftValue, getCurrentFilterValue, filter.id, updateFilter]);\n\n const handleCancel = useCallback(() => {\n // In uncontrolled mode, clicking outside should finalize changes, not cancel them\n if (!controlledFiltering) {\n setIsOpen(false);\n return;\n }\n\n const originalValue = getCurrentFilterValue();\n\n setDraftValue(originalValue);\n setIsOpen(false);\n }, [controlledFiltering, getCurrentFilterValue]);\n\n /**\n * Builds the button label text based on filter type and current selection.\n * Formats labels appropriately for each filter type to show current state.\n *\n * @returns Formatted label text:\n * - singleSelect: \"Label: Selected Item\" or just \"Label\"\n * - multiSelect: \"Label\" with selection count chip\n * - date: Full date string or \"Label\"\n * - dateRange: \"Label: Start - End\" or just \"Label\"\n * - custom: \"Label: Custom Value\" or just \"Label\"\n */\n const getButtonLabel = useMemo(() => {\n switch (filter.type) {\n case \"singleSelect\": {\n const singleSelectFilter = filter as SingleSelectFilter<{\n id: string;\n label: string;\n }>;\n if (singleSelectFilter.selectedItem) {\n return `${filter.label}: ${singleSelectFilter.selectedItem.label}`;\n }\n return filter.label;\n }\n case \"multiSelect\": {\n const multiSelectFilter = filter as MultiSelectFilter<{\n id: string;\n label: string;\n }>;\n if (\n multiSelectFilter.selectedItems &&\n multiSelectFilter.selectedItems.length > 0\n ) {\n const selectionCount =\n multiSelectFilter.selectedItems.length.toString();\n return (\n <>\n {filter.label}\n <Chip\n label={selectionCount}\n color=\"#0265DC\"\n size=\"small\"\n aria-label={`${selectionCount} selected items`}\n />\n </>\n );\n }\n return filter.label;\n }\n case \"date\":\n if (filter.value) {\n const date = DateTime.fromISO(filter.value, { zone: \"local\" });\n return `${filter.label}: ${date.monthShort} ${date.day}, ${date.year}`;\n }\n return filter.label;\n case \"dateRange\":\n if (filter.value?.startDate && filter.value?.endDate) {\n const start = DateTime.fromISO(filter.value.startDate as string, {\n zone: \"local\",\n });\n const end = DateTime.fromISO(filter.value.endDate as string, {\n zone: \"local\",\n });\n\n // If the start and end dates are in the same year, we don't shiw year in start date\n const isSameYear = start.year === end.year;\n const formattedStart = isSameYear\n ? `${start.monthShort} ${start.day}`\n : `${start.monthShort} ${start.day}, ${start.year}`;\n\n return `${filter.label}: ${formattedStart} – ${end.monthShort} ${end.day}, ${end.year}`;\n }\n return filter.label;\n case \"custom\":\n if (filter.labelChipCount) {\n return (\n <>\n {filter.label}\n <Chip\n label={filter.labelChipCount.toString()}\n color=\"#0265DC\"\n size=\"small\"\n aria-label={`${filter.labelChipCount} selected items`}\n />\n </>\n );\n }\n return filter.label;\n default:\n return filter.label;\n }\n }, [filter]);\n\n /**\n * Renders the appropriate filter content based on filter type.\n * Each filter type has its own specialized component for optimal UX.\n *\n * @returns React component for the filter type:\n * - custom: Custom render function\n * - singleSelect: FilterSelect with Listbox\n * - multiSelect: FilterSelect with ListView\n * - date: FilterDateSingle with calendar\n * - dateRange: FilterDateRange with range calendar\n */\n const getContent = useMemo(() => {\n switch (filter.type) {\n case \"custom\":\n return filter.buttonRender({\n value: draftValue,\n onChange: handleChange,\n });\n case \"singleSelect\":\n return (\n <FilterSelect\n filter={filter as SingleSelectFilter<{ id: string; label: string }>}\n draftValue={draftValue as { id: string; label: string } | undefined}\n onDraftChange={handleChange}\n />\n );\n case \"multiSelect\":\n return (\n <FilterSelect\n filter={filter as MultiSelectFilter<{ id: string; label: string }>}\n draftValue={\n draftValue as { id: string; label: string }[] | undefined\n }\n onDraftChange={handleChange}\n />\n );\n case \"date\":\n return (\n <FilterDateSingle\n filter={filter as DateFilter}\n draftValue={draftValue as string | null}\n onDraftChange={handleChange}\n />\n );\n case \"dateRange\":\n return (\n <FilterDateRange\n filter={filter as DateRangeFilter}\n draftValue={\n draftValue as {\n startDate: string | null;\n endDate: string | null;\n } | null\n }\n onDraftChange={handleChange}\n />\n );\n default:\n return children;\n }\n }, [filter, draftValue, handleChange, children]);\n\n const handleOutsidePress = () => {\n if (controlledFiltering) {\n handleCancel();\n } else if (filter.type === \"multiSelect\") {\n // Multi-select uncontrolled: update already called on each selection, just close\n setIsOpen(false);\n } else {\n // Other filter types uncontrolled: submit changes on close\n handleSubmit();\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n // In uncontrolled mode, Enter submits and closes for all filter types except multi-select\n // Multi-select updates on each selection, so Enter is a no-op to avoid re-submitting\n if (!controlledFiltering && filter.type !== \"multiSelect\") {\n handleSubmit();\n }\n }\n };\n\n const triggerClasses = cx(styles[\"filter-button-trigger\"], {\n [styles[\"filter-button-trigger--selected\"]]:\n (filter.type === \"custom\" && filter.value) ||\n (filter.type === \"singleSelect\" && filter.selectedItem) ||\n (filter.type === \"multiSelect\" &&\n filter.selectedItems &&\n filter.selectedItems.length > 0) ||\n (filter.type === \"date\" && filter.value) ||\n (filter.type === \"dateRange\" &&\n filter.value?.startDate &&\n filter.value?.endDate),\n });\n\n const contentClasses = cx(styles[\"filter-button-content\"], className);\n\n const iconOptions =\n filter.type === \"date\" || filter.type === \"dateRange\"\n ? { before: Event }\n : { after: ArrowDropDown };\n\n return (\n <FilterItemWrapper filter={filter}>\n <Popover\n open={isOpen}\n onClose={handleOutsidePress}\n placement=\"bottom-start\"\n modal\n noPadding={\n filter.type === \"multiSelect\" || filter.type === \"singleSelect\"\n }\n >\n <Popover.Button\n appearance=\"ghost\"\n size={toolbarSize}\n icon={iconOptions}\n data-id={filter.id}\n data-anv=\"toolbar-button\"\n className={triggerClasses}\n onClick={() => {\n setIsOpen(!isOpen);\n }}\n >\n {getButtonLabel}\n </Popover.Button>\n\n <Popover.Content onKeyDown={handleKeyDown} className={contentClasses}>\n {getContent}\n {controlledFiltering && (\n <Flex\n gap={2}\n justifyContent=\"flex-end\"\n className={styles[\"filter-button-buttons\"]}\n >\n <Popover.Close size=\"small\">Cancel</Popover.Close>\n <Button appearance=\"primary\" size=\"small\" onClick={handleSubmit}>\n Apply\n </Button>\n </Flex>\n )}\n </Popover.Content>\n </Popover>\n </FilterItemWrapper>\n );\n};\n","import * as React from \"react\";\nconst SvgTune = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M3 18c0 .55.45 1 1 1h5v-2H4c-.55 0-1 .45-1 1zM3 6c0 .55.45 1 1 1h9V5H4c-.55 0-1 .45-1 1zm10 14v-1h7c.55 0 1-.45 1-1s-.45-1-1-1h-7v-1c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1zM7 10v1H4c-.55 0-1 .45-1 1s.45 1 1 1h3v1c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1zm14 2c0-.55-.45-1-1-1h-9v2h9c.55 0 1-.45 1-1zm-5-3c.55 0 1-.45 1-1V7h3c.55 0 1-.45 1-1s-.45-1-1-1h-3V4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1z\" }));\nexport default SvgTune;\n","import {\n useContext,\n useEffect,\n useState,\n useMemo,\n useCallback,\n useRef,\n} from \"react\";\nimport IconTune from \"@servicetitan/hammer-icon/mdi/round/tune.svg\";\nimport IconClose from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Search from \"@servicetitan/hammer-icon/mdi/round/search.svg\";\nimport {\n CustomFilter,\n Filter,\n MultiSelectFilter,\n SingleSelectFilter,\n} from \"./internal/types\";\nimport { FilterGroupContext } from \"./internal/FilterGroupContext\";\nimport { Checkbox } from \"../../../components/Checkbox\";\nimport { Radio } from \"../../../components/Radio\";\nimport { Combobox } from \"../../../components/Combobox\";\nimport { Flex } from \"../../../components/Flex\";\nimport { useContainerQuery } from \"../../../internal/hooks\";\nimport {\n checkActiveFilters,\n getActiveFilters,\n resetFilters,\n updateSingleFilter,\n cloneFiltersWithItemRefs,\n hasFilterSelectionChanged,\n} from \"./internal/utils/filter-state\";\nimport { DateFieldSingle } from \"../../../components/DateFieldSingle\";\nimport { DateFieldRange } from \"../../../components/DateFieldRange\";\nimport ButtonToggle from \"../../../components/ButtonToggle\";\nimport Chip from \"../../../components/Chip\";\nimport Drawer from \"../../../components/Drawer\";\nimport Button from \"../../../components/Button\";\n\nimport { useToolbarSize } from \"../Toolbar/internal/ToolbarContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * FilterDrawer component provides a drawer interface for filter selection.\n * Always operates in controlled mode with batch updates.\n * Built into FilterGroup for mobile and overflow filter editing.\n *\n * Features:\n * - Shows all available filters in a side panel\n * - Maintains separate draft state for all filters\n * - Updates filters only when Apply is clicked\n * - Provides Clear All functionality\n * - Supports boolean, custom, single-select, multi-select, date, and date range filter types\n * - Integrates with FilterGroup context for state management\n * - Handles date and date range filters with appropriate input components\n */\nexport const FilterDrawer = () => {\n const [open, setOpen] = useState(false);\n\n // Get filter context from parent\n const {\n filters,\n updateFilter,\n onFilterChange,\n hiddenFilters,\n filterGroupRef,\n } = useContext(FilterGroupContext);\n const toolbarSize = useToolbarSize();\n\n const containerQuery = useContainerQuery(filterGroupRef);\n const showInlineFilters =\n containerQuery &&\n containerQuery.name !== \"xs\" &&\n containerQuery.name !== \"sm\";\n\n // Local draft state for filters within the drawer\n const [draftFilters, setDraftFilters] = useState<Filter[]>(filters);\n\n // Local search value state for combobox search fields\n const [searchValues, setSearchValues] = useState<Record<string, string>>({});\n\n // Count active filters based on view mode\n const activeFiltersCount = getActiveFilters(\n !showInlineFilters ? filters : hiddenFilters,\n ).length;\n\n // Track previous state to detect when to sync draft\n const prevOpenRef = useRef(open);\n const prevFiltersRef = useRef<Filter[]>(filters);\n\n /**\n * Reset draft filters when drawer opens and sync when filter selections change while open\n * Ensures drawer always shows current filter state\n */\n useEffect(() => {\n const justOpened = open && !prevOpenRef.current;\n prevOpenRef.current = open;\n\n if (open) {\n // Sync draft state if:\n // 1. Drawer just opened, OR\n // 2. Any filter selection value changed while already open (race condition fix)\n // Don't sync when only items arrays change (preserves selections during search)\n const anySelectionChanged = prevFiltersRef.current.some(\n (prevFilter, index) => {\n const newFilter = filters[index];\n return newFilter && hasFilterSelectionChanged(prevFilter, newFilter);\n },\n );\n\n const shouldSync = justOpened || anySelectionChanged;\n\n if (shouldSync) {\n setDraftFilters(cloneFiltersWithItemRefs(filters));\n }\n\n prevFiltersRef.current = filters;\n }\n }, [open, filters]);\n\n /**\n * Handles changing a draft filter value\n * Updates only the draft state, not the actual filters\n *\n * @param filterId - ID of the filter to update\n * @param value - New value for the filter\n */\n const handleDraftChange = useCallback(\n (filterId: string, value: unknown) => {\n setDraftFilters((draft) => updateSingleFilter(draft, filterId, value));\n\n // Reset search when selection is made for filters with search\n const filter = filters.find((f) => f.id === filterId);\n if (\n (filter?.type === \"singleSelect\" || filter?.type === \"multiSelect\") &&\n filter.hasSearch &&\n value\n ) {\n // Clear the search value\n setSearchValues((prev) => ({ ...prev, [filterId]: \"\" }));\n // Reset the items list\n requestAnimationFrame(() => {\n filter.onSearch?.(\"\");\n });\n }\n },\n [filters],\n );\n\n /**\n * Clears all draft filters in the drawer\n * Does not affect the actual filters until Apply is clicked\n */\n const clearDraftFilters = () => {\n setDraftFilters(resetFilters(draftFilters));\n };\n\n const hasActiveDraftFilters = checkActiveFilters(draftFilters);\n\n /**\n * Render filter form controls based on filter types\n * Delegates rendering to appropriate components based on filter type\n */\n const filterForm = useMemo(\n () =>\n draftFilters.map((draftFilter) => {\n // Find the original filter to get the render functions\n const originalFilter = filters.find((f) => f.id === draftFilter.id);\n if (!originalFilter) return null;\n\n switch (draftFilter.type) {\n case \"boolean\":\n return (\n <Checkbox\n key={draftFilter.id}\n label={draftFilter.label}\n checked={draftFilter.checked}\n onChange={(e) =>\n handleDraftChange(draftFilter.id, e?.target.checked ?? false)\n }\n />\n );\n case \"custom\": {\n const customFilter = originalFilter as CustomFilter;\n return (\n <div key={draftFilter.id}>\n {customFilter.drawerRender?.({\n value: draftFilter.value,\n onChange: (value) => handleDraftChange(draftFilter.id, value),\n })}\n </div>\n );\n }\n case \"singleSelect\": {\n const singleSelectFilter = originalFilter as SingleSelectFilter<{\n id: string;\n label: string;\n }>;\n const draftSingleSelectFilter = draftFilter as SingleSelectFilter<{\n id: string;\n label: string;\n }>;\n\n if (singleSelectFilter.simpleDrawerVariant) {\n // Simple variant: Radio group\n return (\n <div key={draftFilter.id}>\n <Radio.Group legend={singleSelectFilter.label}>\n {singleSelectFilter.items.map((item) => (\n <Radio\n key={item.id}\n name={`${singleSelectFilter.id}-radio`}\n value={item.id}\n label={item.label}\n checked={\n draftSingleSelectFilter.selectedItem?.id === item.id\n }\n onChange={(e) => {\n if (e?.target.checked) {\n const selected = singleSelectFilter.items.find(\n (opt) => opt.id === e.target.value,\n );\n handleDraftChange(draftFilter.id, selected);\n }\n }}\n />\n ))}\n </Radio.Group>\n </div>\n );\n } else {\n // Default variant: Combobox with search\n // Ensure selected item uses the reference from current items array\n const selectedItem = draftSingleSelectFilter.selectedItem\n ? (singleSelectFilter.items?.find(\n (item) =>\n item.id === draftSingleSelectFilter.selectedItem?.id,\n ) ?? null)\n : null;\n\n return (\n <Combobox\n key={draftFilter.id}\n items={singleSelectFilter.items}\n selectedItem={selectedItem}\n onChange={(\n selectedItem: { id: string; label: string } | null,\n ) => {\n handleDraftChange(draftFilter.id, selectedItem);\n }}\n itemToString={(item) => item?.label ?? \"\"}\n disableFilter={singleSelectFilter.hasSearch}\n >\n {singleSelectFilter.hasSearch ? (\n <Combobox.SearchField\n label={draftSingleSelectFilter.label}\n prefix={{ icon: { svg: Search } }}\n placeholder=\"Search...\"\n size=\"medium\"\n value={\n draftSingleSelectFilter.selectedItem?.label ||\n searchValues[draftFilter.id] ||\n \"\"\n }\n onChange={(e) => {\n const searchValue = e.target.value;\n setSearchValues((prev) => ({\n ...prev,\n [draftFilter.id]: searchValue,\n }));\n singleSelectFilter.onSearch?.(searchValue);\n }}\n onClear={() => {\n // Clear our controlled search value\n setSearchValues((prev) => ({\n ...prev,\n [draftFilter.id]: \"\",\n }));\n // Clear the selection\n handleDraftChange(draftFilter.id, undefined);\n // Reset the parent's items list\n singleSelectFilter.onSearchClear?.();\n }}\n data-anv=\"filter-drawer-combobox-search\"\n />\n ) : (\n <Combobox.SelectTrigger\n label={singleSelectFilter.label}\n placeholder=\"Select an option...\"\n size=\"medium\"\n />\n )}\n <Combobox.Content>\n {({ items }) => (\n <Combobox.List style={{ padding: 0 }}>\n {items.map((item, i) => (\n <Combobox.Item key={item.id} item={item} index={i}>\n {item.label}\n </Combobox.Item>\n ))}\n </Combobox.List>\n )}\n </Combobox.Content>\n </Combobox>\n );\n }\n }\n case \"multiSelect\": {\n const multiSelectFilter = originalFilter as MultiSelectFilter<{\n id: string;\n label: string;\n }>;\n const draftMultiSelectFilter = draftFilter as MultiSelectFilter<{\n id: string;\n label: string;\n }>;\n\n if (multiSelectFilter.simpleDrawerVariant) {\n // Simple variant: ListView\n return (\n <Checkbox.Group\n key={draftFilter.id}\n legend={multiSelectFilter.label}\n >\n {multiSelectFilter.items.map((item) => (\n <Checkbox\n key={item.id}\n label={item.label}\n checked={\n draftMultiSelectFilter.selectedItems?.some(\n (selected) => selected.id === item.id,\n ) ?? false\n }\n onChange={(e) => {\n const currentSelected =\n draftMultiSelectFilter.selectedItems || [];\n if (e?.target.checked) {\n // Add item to selection\n handleDraftChange(draftFilter.id, [\n ...currentSelected,\n item,\n ]);\n } else {\n // Remove item from selection\n handleDraftChange(\n draftFilter.id,\n currentSelected.filter(\n (selected) => selected.id !== item.id,\n ),\n );\n }\n }}\n />\n ))}\n </Checkbox.Group>\n );\n } else {\n // Default variant: Combobox with multiple selection\n const hasActiveSearch =\n searchValues[draftFilter.id] &&\n searchValues[draftFilter.id].length > 0;\n\n return (\n <Combobox\n key={draftFilter.id}\n items={multiSelectFilter.items}\n selectedItems={draftMultiSelectFilter.selectedItems || []}\n onChange={(\n selectedItems: { id: string; label: string }[] | null,\n ) => handleDraftChange(draftFilter.id, selectedItems)}\n itemToString={(item) => item?.label ?? \"\"}\n itemToKey={(item) => item?.id ?? \"\"}\n disableFilter={multiSelectFilter.hasSearch}\n multiple\n disableCloseOnSelectItem={!hasActiveSearch}\n >\n {multiSelectFilter.hasSearch ? (\n <Combobox.SearchField\n label={multiSelectFilter.label}\n prefix={{ icon: { svg: Search } }}\n placeholder=\"Search...\"\n size=\"medium\"\n value={searchValues[draftFilter.id] || \"\"}\n onChange={(e) => {\n const searchValue = e.target.value;\n setSearchValues((prev) => ({\n ...prev,\n [draftFilter.id]: searchValue,\n }));\n multiSelectFilter.onSearch?.(searchValue);\n }}\n onClear={() => {\n // Clear our controlled search value\n setSearchValues((prev) => ({\n ...prev,\n [draftFilter.id]: \"\",\n }));\n handleDraftChange(draftFilter.id, []);\n multiSelectFilter.onSearchClear?.();\n }}\n data-anv=\"filter-drawer-combobox-search\"\n />\n ) : (\n <Combobox.SelectTrigger\n label={multiSelectFilter.label}\n placeholder=\"Select options...\"\n size=\"medium\"\n />\n )}\n <Combobox.Content>\n {({ items }) => (\n <Combobox.List style={{ padding: 0 }}>\n {items.map((item, i) => (\n <Combobox.Item key={item.id} item={item} index={i}>\n {item.label}\n </Combobox.Item>\n ))}\n </Combobox.List>\n )}\n </Combobox.Content>\n </Combobox>\n );\n }\n }\n case \"date\": {\n return (\n <DateFieldSingle\n key={draftFilter.id}\n label={draftFilter.label}\n value={draftFilter.value as string | null}\n onChange={(change) => {\n handleDraftChange(draftFilter.id, change.date);\n }}\n mode={draftFilter.mode}\n />\n );\n }\n case \"dateRange\": {\n return (\n <DateFieldRange\n key={draftFilter.id}\n label={draftFilter.label}\n value={\n draftFilter.value as {\n startDate: string | null;\n endDate: string | null;\n } | null\n }\n onChange={(change) => {\n handleDraftChange(draftFilter.id, {\n startDate: change.startDate,\n endDate: change.endDate,\n });\n }}\n mode={draftFilter.mode}\n />\n );\n }\n default:\n return null;\n }\n }),\n [draftFilters, filters, searchValues, handleDraftChange],\n );\n\n /**\n * Applies all draft filter changes to the actual filters\n * Updates filters individually then triggers batch update\n */\n const applyFiltering = () => {\n // Update all filters with their current draft values\n draftFilters.forEach((draftFilter) => {\n switch (draftFilter.type) {\n case \"boolean\":\n updateFilter(draftFilter.id, draftFilter.checked, false);\n break;\n case \"singleSelect\":\n updateFilter(\n draftFilter.id,\n (draftFilter as SingleSelectFilter).selectedItem,\n false,\n );\n break;\n case \"multiSelect\":\n updateFilter(\n draftFilter.id,\n (draftFilter as MultiSelectFilter).selectedItems,\n false,\n );\n break;\n case \"date\":\n case \"dateRange\":\n case \"custom\":\n updateFilter(draftFilter.id, draftFilter.value, false);\n break;\n }\n });\n\n // Submit all filters at once after updates\n onFilterChange?.(draftFilters);\n setOpen(false);\n };\n\n const handleCancel = () => {\n setOpen(false);\n };\n\n const hasHiddenActiveFilters = activeFiltersCount > 0;\n\n const triggerClasses = cx(\n styles[\"filter-button-trigger\"],\n styles[\"filter-drawer-trigger\"],\n {\n [styles[\"filter-drawer-trigger--chipped\"]]: hasHiddenActiveFilters,\n },\n );\n\n return (\n <>\n <ButtonToggle\n data-anv=\"filter-group-drawer-trigger\"\n icon={{ before: IconTune }}\n onClick={() => setOpen(true)}\n className={triggerClasses}\n checked={open}\n size={toolbarSize}\n >\n Filters\n {hasHiddenActiveFilters && (\n <Chip\n size=\"small\"\n color=\"#0265DC\"\n label={activeFiltersCount.toString()}\n />\n )}\n </ButtonToggle>\n\n <Drawer\n data-anv=\"filter-group-drawer\"\n data-testid=\"filter-group-drawer\"\n open={open}\n onClose={() => setOpen(false)}\n >\n <Drawer.Content>\n <Flex direction=\"column\" gap={6} grow={1}>\n {filterForm}\n </Flex>\n </Drawer.Content>\n\n <Drawer.Footer>\n <Flex\n justifyContent={\n hasActiveDraftFilters ? \"space-between\" : \"flex-end\"\n }\n grow={1}\n >\n {hasActiveDraftFilters && (\n <Button\n appearance=\"ghost\"\n icon={{ before: IconClose }}\n onClick={clearDraftFilters}\n >\n Clear All Filters\n </Button>\n )}\n\n <Flex gap=\"3\">\n <Button onClick={handleCancel}>Cancel</Button>\n <Button appearance=\"primary\" onClick={applyFiltering}>\n Apply\n </Button>\n </Flex>\n </Flex>\n </Drawer.Footer>\n </Drawer>\n </>\n );\n};\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n useCallback,\n} from \"react\";\nimport { useMergeRefs } from \"../../../hooks\";\nimport CloseIcon from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { Filter } from \"./internal/types\";\nimport { FilterItemWrapper } from \"./FilterItemWrapper\";\nimport Button from \"../../../components/Button\";\nimport { LayoutUtilProps } from \"../../../types\";\nimport { useContainerQuery, useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport {\n checkActiveFilters,\n resetFilters,\n updateSingleFilter,\n hasFilterSelectionChanged,\n preserveFilterState,\n} from \"./internal/utils/filter-state\";\nimport { FilterToggleButton } from \"./FilterToggleButton\";\nimport { FilterButton } from \"./FilterButton\";\nimport { FilterGroupContext } from \"./internal/FilterGroupContext\";\nimport { FilterDrawer } from \"./FilterDrawer\";\nimport { ToolbarContext } from \"../Toolbar/internal/ToolbarContext\";\nimport { ToolbarOverflowTypes, ToolbarSize } from \"../Toolbar/types\";\nimport {\n handleToolbarKeyDown,\n updateToolbarItemsTabIndex,\n} from \"../Toolbar/internal/utils/accessibility\";\nimport { Flex } from \"../../../components/Flex\";\n\nimport styles from \"./FilterBar.module.scss\";\n\n/**\n * Props for the FilterBar component\n *\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type FilterBarProps = ComponentPropsWithoutRef<\"div\"> &\n LayoutUtilProps & {\n /** Array of filter objects */\n filters: Filter[];\n /** Description of the content this filter bar is associated with, used for accessibility */\n associatedContent: string;\n /** Callback function when filters change */\n onFilterChange: (filters: Filter[]) => void;\n /** Whether the filters submission is controlled via an apply button */\n controlledFiltering?: boolean;\n /**\n * Size of filter controls\n * @default xsmall\n */\n size?: ToolbarSize;\n /**\n * How to handle overflow when items don't fit\n * @default wrap\n */\n overflow?: ToolbarOverflowTypes;\n };\n\n/**\n * FilterBar component for displaying a standalone group of filters with toggles and a clear button.\n *\n * Features:\n * - Standalone component with `role=\"toolbar\"` and keyboard navigation\n * - Renders filter toggles and popovers for all filter types\n * - Supports controlled and uncontrolled filtering\n * - Integrates with FilterDrawer for batch filter editing\n * - Provides a clear all filters button\n * - Handles overflow and hidden filters\n * - Shares filter state via context for child components\n * - Supports boolean, custom, single-select, multi-select, date, and date range filter types\n * - Preserves filter state when filter configuration changes\n * - Responsive: condenses to drawer-only at small container sizes\n * - Can be composed alongside Toolbar as a sibling using Flex layout\n *\n * @example\n * <FilterBar\n * associatedContent=\"invoices\"\n * filters={filters}\n * onFilterChange={handleFilter}\n * controlledFiltering={true}\n * />\n *\n * @example\n * // With Toolbar as sibling\n * <Flex alignItems=\"center\" justifyContent=\"space-between\">\n * <Toolbar associatedContent=\"invoice actions\">\n * <Toolbar.Button icon={SaveIcon} aria-label=\"Save\" />\n * </Toolbar>\n * <FilterBar\n * associatedContent=\"invoices\"\n * filters={filters}\n * onFilterChange={handleFilter}\n * />\n * </Flex>\n */\nexport const FilterBar = forwardRef<HTMLDivElement, FilterBarProps>(\n function FilterBarInner(props, ref) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n filters: initialFilters,\n onFilterChange,\n controlledFiltering = false,\n associatedContent,\n size = \"xsmall\",\n overflow = \"wrap\",\n className,\n style,\n onKeyDown,\n ...rest\n } = componentProps;\n\n const [filters, setFilters] = useState<Filter[]>(initialFilters);\n const [hiddenFilters, setHiddenFilters] = useState<Filter[]>([]);\n const filterBarRef = useRef<HTMLDivElement>(null);\n const containerQuery = useContainerQuery(filterBarRef);\n\n const showInlineFilters =\n containerQuery &&\n containerQuery.name !== \"xs\" &&\n containerQuery.name !== \"sm\";\n\n // Update filters when props change\n useEffect(() => {\n setFilters((prevFilters) => {\n const existingFiltersMap = new Map(prevFilters.map((f) => [f.id, f]));\n\n return initialFilters.map((newFilter: Filter) => {\n const existingFilter = existingFiltersMap.get(newFilter.id);\n\n if (!existingFilter) {\n return newFilter;\n }\n\n if (!hasFilterSelectionChanged(existingFilter, newFilter)) {\n return preserveFilterState(newFilter, existingFilter);\n }\n\n return newFilter;\n });\n });\n }, [initialFilters]);\n\n /**\n * Updates filter state when a filter is changed\n *\n * @param filterId - ID of the filter to update\n * @param value - New value for the filter\n * @param submit - Whether to submit the filter change\n */\n const updateFilter = useCallback(\n (filterId: string, value: unknown, submit: boolean) => {\n setFilters((prevFilters) => {\n const updatedFilters = updateSingleFilter(\n prevFilters,\n filterId,\n value,\n );\n\n if (submit) {\n onFilterChange?.(updatedFilters);\n }\n\n return updatedFilters;\n });\n },\n [onFilterChange],\n );\n\n /**\n * Adds a filter to the list of hidden filters.\n *\n * @param filter - The filter to add to the hidden filters array\n */\n const addHiddenFilter = useCallback((filter: Filter) => {\n setHiddenFilters((prev) => [...prev, filter]);\n }, []);\n\n /**\n * Removes a filter from the list of hidden filters.\n *\n * @param filter - The filter to remove from the hidden filters array\n */\n const removeHiddenFilter = useCallback((filter: Filter) => {\n setHiddenFilters((prev) => prev.filter((f) => f.id !== filter.id));\n }, []);\n\n /**\n * Clears all active filters\n */\n const clearAllFilters = () => {\n const resetAllFilters = resetFilters(filters);\n setFilters(resetAllFilters);\n onFilterChange?.(resetAllFilters);\n\n requestAnimationFrame(() => {\n if (filterBarRef.current) {\n const firstFocusable = filterBarRef.current.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) as HTMLElement;\n\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n });\n };\n\n const hasActiveFilters = checkActiveFilters(filters);\n\n const filterGroupControls = filters.map((filter) => {\n switch (filter.type) {\n case \"boolean\":\n return (\n <FilterToggleButton\n key={filter.id}\n id={filter.id}\n checked={filter.checked}\n onClick={() => {\n updateFilter(filter.id, !filter.checked, true);\n }}\n >\n {filter.label}\n </FilterToggleButton>\n );\n case \"singleSelect\":\n case \"multiSelect\":\n return (\n <FilterButton\n key={filter.id}\n filter={filter}\n className={styles[\"filter-select-content\"]}\n />\n );\n case \"custom\":\n case \"date\":\n case \"dateRange\":\n return <FilterButton key={filter.id} filter={filter} />;\n default:\n return null;\n }\n });\n\n // Provide ToolbarContext so filter sub-components (FilterButton, FilterDrawer,\n // FilterToggleButton, FilterItemWrapper) read size/overflow from FilterBar\n const toolbarContextValue = useMemo(\n () => ({\n overflowItems: [],\n addItem: () => {},\n removeItem: () => {},\n toolbarRef: filterBarRef,\n overflow,\n size,\n }),\n [overflow, size],\n );\n\n const filterGroupContextValue = useMemo(\n () => ({\n filterGroupRef: filterBarRef,\n filters,\n updateFilter,\n onFilterChange,\n controlledFiltering,\n associatedContent,\n hiddenFilters,\n addHiddenFilter,\n removeHiddenFilter,\n }),\n [\n filterBarRef,\n filters,\n updateFilter,\n onFilterChange,\n controlledFiltering,\n associatedContent,\n hiddenFilters,\n addHiddenFilter,\n removeHiddenFilter,\n ],\n );\n\n // Initialize tabindex values for keyboard navigation\n useEffect(() => {\n if (filterBarRef.current) {\n updateToolbarItemsTabIndex(filterBarRef.current);\n }\n }, [filters]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (filterBarRef.current) {\n handleToolbarKeyDown(event, filterBarRef.current);\n }\n onKeyDown?.(event);\n },\n [onKeyDown],\n );\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <ToolbarContext.Provider value={toolbarContextValue}>\n <FilterGroupContext.Provider value={filterGroupContextValue}>\n <Flex\n ref={useMergeRefs([filterBarRef, ref])}\n role=\"toolbar\"\n aria-label={`Filters for ${associatedContent}. Use arrow keys to navigate through filter controls.`}\n aria-orientation=\"horizontal\"\n onKeyDown={handleKeyDown}\n alignItems=\"center\"\n gap={1}\n wrap={overflow === \"collapse\" ? \"nowrap\" : \"wrap\"}\n className={className}\n style={styleCombined}\n data-anv=\"filter-bar\"\n {...rest}\n >\n <Flex\n alignItems=\"center\"\n gap={1}\n wrap={overflow === \"collapse\" ? \"nowrap\" : \"wrap\"}\n grow={1}\n data-anv=\"toolbar-content\"\n >\n {showInlineFilters && filterGroupControls}\n <FilterDrawer />\n\n {showInlineFilters && hasActiveFilters && (\n <FilterItemWrapper>\n <Button\n appearance=\"ghost\"\n size={size}\n className={styles[\"filter-button-trigger\"]}\n icon={{\n before: CloseIcon,\n }}\n onClick={clearAllFilters}\n >\n Clear Filters\n </Button>\n </FilterItemWrapper>\n )}\n </Flex>\n </Flex>\n </FilterGroupContext.Provider>\n </ToolbarContext.Provider>\n );\n },\n);\n\nFilterBar.displayName = \"FilterBar\";\n"],"names":["core.primitive?.BreakpointSm","core.primitive?.BreakpointMd","core.primitive?.BreakpointLg","core.primitive?.BreakpointXl","core.primitive?.BreakpointXxl","Event","ArrowDropDown","selectedItem","Search","IconTune","IconClose","CloseIcon"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView.module-CKUQP3kf.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultiSelectFieldSync-BxyQiVPQ.js","sources":["../src/beta/components/MultiSelectField/internal/useChipLayout.ts","../src/beta/components/MultiSelectField/internal/MultiSelectFieldInput.tsx","../src/beta/components/MultiSelectField/internal/useComboMultiple.tsx","../src/beta/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.tsx","../src/beta/components/MultiSelectField/internal/MultiSelectFieldTrigger.tsx","../src/beta/components/MultiSelectField/internal/useSelectModeMultiple.ts","../src/beta/components/MultiSelectField/internal/MultiSelectFieldSelectMode.tsx","../src/beta/components/MultiSelectField/MultiSelectField.tsx","../src/beta/components/MultiSelectField/MultiSelectFieldSync.tsx"],"sourcesContent":["import { useState, useLayoutEffect, useRef, RefObject } from \"react\";\n\nconst hasMultipleRows = (container: HTMLElement) => {\n const children = Array.from(container.children);\n if (children.length <= 1) return false;\n const firstTop = children[0].getBoundingClientRect().top;\n return children.some(\n (child) => child.getBoundingClientRect().top !== firstTop,\n );\n};\n\ntype UseChipLayoutOptions = {\n selectedOptionsLength: number;\n singleRow?: boolean;\n maxChips?: number;\n};\n\n/**\n * Manages chip layout calculations shared between MultiSelectFieldInput and\n * MultiSelectFieldTrigger. Handles single-row overflow detection, visible chip\n * count, and the \"+N\" hidden chip indicator.\n * @param options - Configuration for chip layout behaviour\n * @returns rowsRef to attach to the chip container, plus computed display/hidden counts\n */\nexport function useChipLayout({\n selectedOptionsLength,\n singleRow,\n maxChips,\n}: UseChipLayoutOptions): {\n rowsRef: RefObject<HTMLDivElement>;\n displayCount: number;\n hiddenCount: number;\n} {\n const rowsRef = useRef<HTMLDivElement>(null);\n const [visibleCount, setVisibleCount] = useState<number | null>(null);\n\n const prevSelectedLengthRef = useRef(selectedOptionsLength);\n useLayoutEffect(() => {\n if (prevSelectedLengthRef.current !== selectedOptionsLength) {\n prevSelectedLengthRef.current = selectedOptionsLength;\n setVisibleCount(null);\n }\n }, [selectedOptionsLength]);\n\n useLayoutEffect(() => {\n if (!singleRow || !rowsRef.current) {\n setVisibleCount(null);\n return;\n }\n\n if (visibleCount === null) {\n if (hasMultipleRows(rowsRef.current)) {\n const firstRowTop =\n rowsRef.current.children[0]?.getBoundingClientRect().top;\n const firstRowCount = Array.from(rowsRef.current.children).filter(\n (c) => c.getBoundingClientRect().top === firstRowTop,\n ).length;\n setVisibleCount(Math.max(firstRowCount - 1, 0));\n }\n return;\n }\n\n if (hasMultipleRows(rowsRef.current) && visibleCount > 0) {\n setVisibleCount(visibleCount - 1);\n }\n }, [singleRow, selectedOptionsLength, visibleCount]);\n\n const maxAllowed = maxChips ?? 10;\n const displayCount =\n singleRow && visibleCount !== null\n ? Math.min(visibleCount, maxAllowed)\n : Math.min(selectedOptionsLength, maxAllowed);\n const hiddenCount = selectedOptionsLength - displayCount;\n\n return { rowsRef, displayCount, hiddenCount };\n}\n","import styles from \"./MultiSelectFieldInput.module.scss\";\nimport cx from \"classnames\";\nimport { PassThroughProps, Size } from \"../../../../types\";\nimport { Button } from \"../../../../components/Button\";\nimport { Chip } from \"../../../../components/Chip\";\nimport { Flex } from \"../../../../components/Flex\";\nimport { mergeRefs } from \"../../../../hooks/useMergeRefs/useMergeRefs\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport {\n ReactElement,\n RefObject,\n useRef,\n KeyboardEvent,\n MouseEvent,\n} from \"react\";\nimport { MultiSelectFieldChipProps, MultiSelectFieldOption } from \"../types\";\nimport { useChipLayout } from \"./useChipLayout\";\n\n/**\n * Props for the MultiSelectFieldInput component\n * @property {string} [placeholder] - Placeholder text displayed when input is empty\n * @property {Extract<Size, \"small\" | \"medium\" | \"large\">} [size] - Size variant of the input\n * @property {boolean} [disableClearButton] - Hides the clear button when true\n * @property {boolean} [disableToggleButton] - Hides the toggle button when true\n * @property {boolean} [disabled] - Disables the input entirely\n * @property {boolean} [readOnly] - Cannot be modified but remains interactive\n * @property {boolean} [error] - Shows error styling on the input when true\n * @property {() => void} [onClear] - Callback fired when the clear button is clicked\n * @property {string} [id] - HTML id attribute for the input element\n * @property {RefObject<HTMLDivElement>} [inputWrapperRef] - Ref for the input wrapper div element\n * @property {PassThroughProps<\"div\">} [htmlInputWrapperProps] - Additional props passed to the wrapper div\n * @property {PassThroughProps<\"input\">} [inputProps] - Additional props passed to the input element\n * @property {PassThroughProps<\"button\">} [toggleButtonProps] - Additional props passed to the toggle button\n * @property {string | ReactElement} [prefix] - Content to display before the input\n * @property {string | ReactElement} [suffix] - Content to display after the input\n * @property {MultiSelectFieldOption[]} [selectedOptions] - Array of selected options to display as chips\n * @property {(option: MultiSelectFieldOption) => void} [onRemoveOption] - Callback when a chip is removed\n * @property {boolean} [singleRow] - When true, restricts the field to a single row height\n * @property {number} [maxChips] - Maximum number of chips to display before showing +N indicator (default: 10)\n */\nexport type MultiSelectFieldInputProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disableToggleButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n error?: boolean;\n onClear?: () => void;\n id?: string;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n htmlInputWrapperProps?: PassThroughProps<\"div\">;\n inputProps?: PassThroughProps<\"input\">;\n toggleButtonProps?: PassThroughProps<\"button\">;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n selectedOptions?: MultiSelectFieldOption[];\n onRemoveOption?: (option: MultiSelectFieldOption) => void;\n singleRow?: boolean;\n maxChips?: number;\n getChipProps?: (option: MultiSelectFieldOption) => MultiSelectFieldChipProps;\n onWrapperClick?: (e: MouseEvent<HTMLDivElement>) => void;\n};\n\n/**\n * Internal input component for the MultiSelectField that provides the text input,\n * chip display for selected options, and action buttons.\n *\n * Features:\n * - Text input for filtering options\n * - Chip display for selected options with remove functionality\n * - Optional clear button for removing all selections\n * - Optional toggle button for opening/closing the dropdown menu\n * - Supports multiple size variants (small, medium, large)\n * - Fully accessible with proper ARIA labels on buttons\n * - Supports pass-through props for customization of internal elements\n * - Optional prefix and suffix content\n * - Error state styling\n * - Single row mode with singleRow prop\n * - Chip count limiting with maxChips prop\n *\n * @example\n * <MultiSelectFieldInput\n * placeholder=\"Search...\"\n * size=\"medium\"\n * selectedOptions={[{ id: 1, label: \"Option 1\" }]}\n * onRemoveOption={(option) => handleRemove(option)}\n * onClear={() => handleClearAll()}\n * />\n */\nexport const MultiSelectFieldInput = ({\n placeholder,\n size,\n disableClearButton,\n disableToggleButton,\n disabled,\n readOnly,\n error,\n onClear,\n id,\n inputWrapperRef,\n htmlInputWrapperProps,\n inputProps,\n toggleButtonProps,\n prefix,\n suffix,\n selectedOptions = [],\n onRemoveOption,\n singleRow,\n maxChips,\n getChipProps,\n onWrapperClick,\n}: MultiSelectFieldInputProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const externalRef = (inputProps as { ref?: React.Ref<HTMLInputElement> })\n ?.ref;\n const mergedInputRef = mergeRefs([inputRef, externalRef]);\n\n const { rowsRef, displayCount, hiddenCount } = useChipLayout({\n selectedOptionsLength: selectedOptions.length,\n singleRow,\n maxChips,\n });\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: disableClearButton,\n [styles[\"no-toggle-button\"]]: disableToggleButton,\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n const handleInputKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n // Handle backspace to remove the last chip when input is empty\n if (\n e.key === \"Backspace\" &&\n !inputProps?.value &&\n selectedOptions.length > 0 &&\n onRemoveOption &&\n !disabled &&\n !readOnly\n ) {\n onRemoveOption(selectedOptions[selectedOptions.length - 1]);\n }\n\n // Call the original onKeyDown if provided\n if (inputProps?.onKeyDown) {\n (inputProps.onKeyDown as (e: KeyboardEvent<HTMLInputElement>) => void)(e);\n }\n };\n\n const handleWrapperClick = (e: MouseEvent<HTMLDivElement>) => {\n // Skip if clicking on interactive elements (buttons) or input\n const target = e.target as HTMLElement;\n if (target.closest(\"button\") || target.tagName === \"INPUT\") {\n return;\n }\n onWrapperClick?.(e);\n inputRef.current?.focus();\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events -- Click-to-focus container; Despite the disabled rules, this remains accessible. Keyboard interaction is provided by the input and nested buttons are filtered out in the handler.\n <div\n ref={inputWrapperRef}\n {...htmlInputWrapperProps}\n className={cx(inputWrapperClassNames, htmlInputWrapperProps?.className)}\n onClick={handleWrapperClick}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div className={styles[\"rows-wrapper\"]} ref={rowsRef}>\n {selectedOptions.length > 0 && onRemoveOption\n ? selectedOptions.slice(0, displayCount).map((option, index) => (\n <div\n key={`selected-item-${option.id}-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...getChipProps?.(option)}\n label={option.label}\n onClose={\n disabled || readOnly\n ? undefined\n : () => onRemoveOption(option)\n }\n className={styles[\"chip\"]}\n title={option.label}\n />\n </div>\n ))\n : null}\n\n {hiddenCount > 0 ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${hiddenCount}`}\n className={styles[\"chip\"]}\n title={selectedOptions\n .slice(displayCount)\n .map((option) => option.label)\n .join(\", \")}\n />\n </div>\n ) : null}\n\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <input\n id={id}\n type=\"text\"\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n {...inputProps}\n ref={mergedInputRef}\n onKeyDown={handleInputKeyDown}\n className={cx(styles[\"input\"], inputProps?.className, {\n [styles[\"error\"]]: error,\n })}\n />\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n </div>\n\n <div className={styles[\"buttons-wrapper\"]}>\n {disableClearButton ? null : (\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n icon={Close}\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n className={styles[\"close-button\"]}\n onClick={() => {\n onClear?.();\n }}\n />\n </div>\n )}\n {disableToggleButton ? null : (\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n {...toggleButtonProps}\n className={cx(\n styles[\"toggle-button\"],\n toggleButtonProps?.className,\n )}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nMultiSelectFieldInput.displayName = \"MultiSelectFieldInput\";\n","import {\n useCombobox,\n UseComboboxProps,\n UseComboboxState,\n UseComboboxStateChangeOptions,\n} from \"downshift\";\nimport {\n MultiSelectFieldGroupByValue,\n MultiSelectFieldOption,\n MultiSelectFieldPinnedOptions,\n} from \"../types\";\nimport { SelectItem } from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { CheckState } from \"../../../../types\";\nimport { useMemo, useState } from \"react\";\nimport { useDownshiftEnvironment } from \"../../../../internal/hooks\";\nimport { useProcessedOptions } from \"../../../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../../../internal/functions/buildSelectItems\";\nimport { useToggleSelection } from \"../../../../internal/hooks/useToggleSelection\";\n\nexport type UseComboMultipleOptions = {\n /** An array of currently loaded options */\n options: MultiSelectFieldOption[];\n /** Options to pin to the top of the list */\n pinned?: MultiSelectFieldPinnedOptions;\n /** Function to convert a group value to a display label */\n groupToString?: (groupValue: MultiSelectFieldGroupByValue) => string;\n /** Function to sort group sections */\n groupSorter?: (\n a: MultiSelectFieldGroupByValue,\n b: MultiSelectFieldGroupByValue,\n ) => number;\n /** Configuration for the \"Select All\" option (shown when search is empty) */\n selectAll?: {\n label: string;\n onClick: () => void;\n checkState: CheckState;\n };\n /** Function that receives the search value and returns config for \"Select Filtered\" */\n selectFiltered?: (searchValue: string) => {\n label?: string;\n onClick: () => void;\n checkState: CheckState;\n };\n /** The currently selected options (controlled from outside) */\n selectedOptions: MultiSelectFieldOption[];\n onSelectedOptionsChange: (options: MultiSelectFieldOption[]) => void;\n displayAs: \"popover\" | \"dialog\";\n disabled: boolean;\n /** Whether options are currently loading (hides select-filtered to prevent stale selections) */\n loading?: boolean;\n /** Whether the list is virtualized (disables built-in scroll behavior) */\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n} & Pick<UseComboboxProps<SelectItem>, \"onInputValueChange\" | \"onIsOpenChange\">;\n\n/**\n * Hook that wraps downshift's useCombobox for multi-select behavior.\n * Unlike useCombo, this hook:\n * - Keeps the menu open after item selection\n * - Does not track internal selection state (controlled externally)\n * - Preserves input value on item selection for continued filtering\n * @param options - Configuration options for the hook\n * @returns Downshift combobox props and state\n */\nexport const useComboMultiple = ({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectAll,\n selectFiltered,\n selectedOptions,\n onSelectedOptionsChange,\n onInputValueChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disabled,\n loading = false,\n virtualize = false,\n onScrollToHighlight,\n}: UseComboMultipleOptions) => {\n const [inputValue, setInputValue] = useState(\"\");\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: inputValue,\n groupToString,\n groupSorter,\n },\n );\n\n // Compute bulk action items (select-all or select-filtered, mutually exclusive)\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n const hasSearchTerm = inputValue.trim().length > 0;\n const hasResults =\n ungroupedItems.length > 0 ||\n groupSections.some((s) => s.options.length > 0) ||\n pinnedSections.some((s) => s.options.length > 0);\n\n if (hasSearchTerm && selectFiltered && hasResults && !loading) {\n const config = selectFiltered(inputValue);\n items.push({\n id: \"select-filtered\",\n type: \"select-filtered\",\n original: {\n id: \"select-filtered\",\n label: config.label ?? `Select items matching \"${inputValue}\"`,\n },\n checkState: config.checkState,\n });\n } else if (!hasSearchTerm && selectAll) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: {\n id: \"select-all\",\n label: selectAll.label ?? \"Select All\",\n },\n checkState: selectAll.checkState,\n });\n }\n return items;\n }, [\n inputValue,\n ungroupedItems,\n groupSections,\n pinnedSections,\n selectFiltered,\n selectAll,\n loading,\n ]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n });\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n inputValue: downshiftInputValue,\n closeMenu,\n openMenu,\n toggleMenu,\n } = useCombobox({\n isItemDisabled: (item, _index) => {\n if (!item) {\n return false; // Downshift passes -1 index with an undefined item. Ignore it.\n }\n return (disabled || item.disabled) ?? false;\n },\n environment: environment,\n // For multi-select, we don't track a single selected item\n selectedItem: null,\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem | null;\n }) => {\n if (si) {\n if (si.type === \"select-all\") {\n selectAll?.onClick();\n } else if (si.type === \"select-filtered\") {\n selectFiltered?.(inputValue).onClick();\n } else if (\n si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\"\n ) {\n handleItemClick(si.original);\n }\n }\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useCombobox.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onInputValueChange: (changes) => {\n // Update local input value for pinned options search\n setInputValue(changes.inputValue ?? \"\");\n // Call the external handler\n onInputValueChange?.(changes);\n },\n scrollIntoView: virtualize\n ? () => {}\n : (node, menuNode) => {\n if (!node || !menuNode) return;\n\n const firstItem = items[0];\n const hasBulkAction =\n firstItem?.type === \"select-all\" ||\n firstItem?.type === \"select-filtered\";\n\n if (!hasBulkAction) {\n const nodeRect = node.getBoundingClientRect();\n const menuRect = menuNode.getBoundingClientRect();\n if (\n nodeRect.bottom > menuRect.bottom ||\n nodeRect.top < menuRect.top\n ) {\n node.scrollIntoView({ block: \"nearest\" });\n }\n return;\n }\n\n const bulkActionEl = menuNode.querySelector(\n '[data-type=\"select-all\"], [data-type=\"select-filtered\"]',\n );\n if (node === bulkActionEl) {\n menuNode.scrollTop = 0;\n return;\n }\n\n const stickyHeight =\n bulkActionEl?.getBoundingClientRect().height ?? 0;\n const nodeRect = node.getBoundingClientRect();\n const menuRect = menuNode.getBoundingClientRect();\n const visibleTop = menuRect.top + stickyHeight;\n\n if (nodeRect.top < visibleTop) {\n menuNode.scrollTop -= visibleTop - nodeRect.top;\n } else if (nodeRect.bottom > menuRect.bottom) {\n menuNode.scrollTop += nodeRect.bottom - menuRect.bottom;\n }\n },\n onIsOpenChange,\n items: items,\n itemToString(item: SelectItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n });\n\n return {\n inputValue: downshiftInputValue,\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n items,\n sectionsMeta,\n closeMenu,\n openMenu,\n toggleMenu,\n selectedOptions,\n };\n};\n\nfunction stateReducer(\n state: UseComboboxState<SelectItem>,\n actionAndChanges: UseComboboxStateChangeOptions<SelectItem>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n\n switch (type) {\n case useCombobox.stateChangeTypes.InputBlur:\n // keep the dialog open if the user blurs the input while the dialog is open\n if (displayAs === \"dialog\" && state.isOpen) {\n return {\n ...changes,\n isOpen: state.isOpen,\n // Preserve input value for multi-select\n inputValue: state.inputValue,\n };\n }\n return {\n ...changes,\n // For multi-select, preserve the input value on blur\n inputValue: state.inputValue,\n };\n case useCombobox.stateChangeTypes.InputKeyDownEscape:\n case useCombobox.stateChangeTypes.FunctionCloseMenu:\n return {\n ...changes,\n // Clear input value when menu is closed\n inputValue: \"\",\n };\n case useCombobox.stateChangeTypes.InputClick:\n if (displayAs === \"dialog\" && state.isOpen) {\n // keep the dialog open if the user clicks the input while the dialog is open\n return {\n ...changes,\n isOpen: state.isOpen,\n };\n }\n return changes;\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n // Optimize for continuing to select items based on the input value\n return {\n ...changes,\n isOpen: state.isOpen, // Keep menu open\n highlightedIndex: state.highlightedIndex, // Preserve highlight position\n inputValue: state.inputValue, // Preserve input value for continued filtering\n };\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n return {\n ...changes,\n inputValue: state.inputValue,\n };\n default:\n return changes;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { MultiSelectOptions } from \"../../../../internal/components/MultiSelectOptions\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\nimport { MultiSelectFieldInput } from \"./MultiSelectFieldInput\";\nimport { SelectFieldLabel } from \"../../SelectField/internal/SelectFieldLabel\";\nimport { useDebouncedCallback } from \"../../../../internal/hooks/useDebouncedCallback\";\nimport styles from \"../../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useComboMultiple } from \"./useComboMultiple\";\nimport { OptionsPopover } from \"../../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../../internal/components/AddNewItemButton\";\nimport { FieldMessage } from \"../../../../components/FieldMessage\";\nimport { MultiSelectFieldComboboxInternalProps } from \"./types\";\n\n/**\n * Combobox mode: searchable multi-select using useCombobox.\n */\nexport const MultiSelectFieldComboboxMode = ({\n labelAiMark,\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n debounceMs,\n selectAll,\n selectFiltered,\n singleRow,\n maxChips,\n getChipProps,\n onSearchChange,\n addItemLabel,\n onAddNewItem,\n handleRemoveOption,\n handleClear,\n}: MultiSelectFieldComboboxInternalProps) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const debouncedOptionLoader = useDebouncedCallback((inputValue: string) => {\n loadOptions(inputValue, { initial: true });\n }, debounceMs);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n inputValue,\n items,\n sectionsMeta,\n closeMenu,\n toggleMenu,\n } = useComboMultiple({\n displayAs,\n onSelectedOptionsChange,\n disabled: isDisabledOrReadOnly,\n options,\n loading,\n pinned,\n virtualize,\n groupToString,\n groupSorter,\n selectedOptions,\n selectAll,\n selectFiltered,\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n },\n onInputValueChange: ({ inputValue: iv }) => {\n debouncedOptionLoader(iv ?? \"\");\n onSearchChange?.(iv ?? \"\");\n },\n onScrollToHighlight: (i) => listRef.current?.scrollToIndex(i),\n });\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const handleLoadMore = async () => {\n await loadMore(inputValue);\n };\n\n const addNewItemButton = onAddNewItem ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={closeMenu}\n />\n ) : null;\n\n if (displayAs === \"dialog\") {\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n ref={wrapperDivRef}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <MultiSelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={getToggleButtonProps()}\n onClear={handleClear}\n id={`${id}-input`}\n inputProps={getInputProps({\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n onWrapperClick={toggleMenu}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n initialFocusResolver={(elements) => {\n return (\n elements.find((element) => element.tagName === \"INPUT\") ||\n elements[0]\n );\n }}\n field={\n <MultiSelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n inputProps={getInputProps()}\n disableToggleButton\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={handleClear}\n id={`${id}-dialog-input`}\n inputWrapperRef={inputWrapperRef}\n size=\"medium\"\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow\n maxChips={20}\n getChipProps={getChipProps}\n />\n }\n footer={addNewItemButton ?? undefined}\n >\n <MultiSelectOptions\n isOpen\n items={items}\n getMenuProps={getMenuProps}\n ref={listRef}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n sectionsMeta={sectionsMeta}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </div>\n );\n }\n\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <MultiSelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n inputProps={getInputProps({\n popovertarget: `${id}-popover`,\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n toggleButtonProps={getToggleButtonProps()}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={handleClear}\n id={`${id}-input`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n onWrapperClick={toggleMenu}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={closeMenu}\n width=\"reference\"\n footer={addNewItemButton ?? undefined}\n >\n <MultiSelectOptions\n isOpen={isOpen}\n items={items}\n getMenuProps={getMenuProps}\n ref={listRef}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n sectionsMeta={sectionsMeta}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import styles from \"./MultiSelectFieldInput.module.scss\";\nimport cx from \"classnames\";\nimport { Size } from \"../../../../types\";\nimport { Button } from \"../../../../components/Button\";\nimport { Chip } from \"../../../../components/Chip\";\nimport { Flex } from \"../../../../components/Flex\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { ReactElement, RefObject, useRef } from \"react\";\nimport { useMergeRefs } from \"../../../../hooks/useMergeRefs/useMergeRefs\";\nimport { MultiSelectFieldChipProps, MultiSelectFieldOption } from \"../types\";\nimport { useChipLayout } from \"./useChipLayout\";\n\nexport type MultiSelectFieldTriggerProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n error?: boolean;\n onClear?: () => void;\n id?: string;\n popoverTarget?: string;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toggleButtonProps?: Record<string, any>;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n selectedOptions?: MultiSelectFieldOption[];\n onRemoveOption?: (option: MultiSelectFieldOption) => void;\n singleRow?: boolean;\n maxChips?: number;\n getChipProps?: (option: MultiSelectFieldOption) => MultiSelectFieldChipProps;\n};\n\n/**\n * Non-searchable trigger for MultiSelectField when disableSearch is true.\n * Renders chips for selected items in a div-based trigger (no input element).\n */\nexport const MultiSelectFieldTrigger = ({\n placeholder,\n size,\n disableClearButton,\n disabled,\n readOnly,\n error,\n onClear,\n id,\n inputWrapperRef,\n toggleButtonProps,\n prefix,\n suffix,\n selectedOptions = [],\n onRemoveOption,\n singleRow,\n maxChips,\n getChipProps,\n popoverTarget,\n}: MultiSelectFieldTriggerProps) => {\n const { ref: downshiftRef, ...restToggleButtonProps } =\n toggleButtonProps ?? {};\n const triggerRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([inputWrapperRef, downshiftRef, triggerRef]);\n\n const { rowsRef, displayCount, hiddenCount } = useChipLayout({\n selectedOptionsLength: selectedOptions.length,\n singleRow,\n maxChips,\n });\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: disableClearButton,\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n ref={mergedRef}\n {...restToggleButtonProps}\n // @ts-expect-error: popovertarget is a valid HTML attribute\n popovertarget={popoverTarget}\n id={id}\n className={cx(inputWrapperClassNames, restToggleButtonProps?.className)}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n\n <div className={styles[\"rows-wrapper\"]} ref={rowsRef}>\n {selectedOptions.length > 0 && onRemoveOption\n ? selectedOptions.slice(0, displayCount).map((option, index) => (\n <div\n key={`selected-item-${option.id}-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...getChipProps?.(option)}\n label={option.label}\n onClose={\n disabled || readOnly\n ? undefined\n : (e) => {\n e.stopPropagation();\n onRemoveOption(option);\n triggerRef.current?.focus();\n }\n }\n className={styles[\"chip\"]}\n title={option.label}\n />\n </div>\n ))\n : null}\n\n {hiddenCount > 0 ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${hiddenCount}`}\n className={styles[\"chip\"]}\n title={selectedOptions\n .slice(displayCount)\n .map((option) => option.label)\n .join(\", \")}\n />\n </div>\n ) : null}\n\n {selectedOptions.length === 0 ? (\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n <div\n className={cx(styles[\"input\"], {\n [styles[\"error\"]]: error,\n })}\n >\n {placeholder}\n </div>\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n ) : null}\n </div>\n\n <div className={styles[\"buttons-wrapper\"]}>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n tabIndex={-1}\n className={styles[\"toggle-button\"]}\n />\n </div>\n </div>\n </div>\n {disableClearButton ? null : (\n <div\n className={styles[\"buttons-wrapper\"]}\n style={{ insetInlineEnd: \"2rem\" }}\n >\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n icon={Close}\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n className={styles[\"close-button\"]}\n onClick={(e) => {\n e.stopPropagation();\n onClear?.();\n }}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n\nMultiSelectFieldTrigger.displayName = \"MultiSelectFieldTrigger\";\n","import {\n useSelect,\n UseSelectState,\n UseSelectStateChangeOptions,\n} from \"downshift\";\nimport {\n MultiSelectFieldGroupByValue,\n MultiSelectFieldOption,\n MultiSelectFieldPinnedOptions,\n} from \"../types\";\nimport { SelectItem } from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { CheckState } from \"../../../../types\";\nimport { useMemo } from \"react\";\nimport { useDownshiftEnvironment } from \"../../../../internal/hooks\";\nimport { useProcessedOptions } from \"../../../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../../../internal/functions/buildSelectItems\";\nimport { useToggleSelection } from \"../../../../internal/hooks/useToggleSelection\";\n\nexport type UseSelectModeMultipleOptions = {\n options: MultiSelectFieldOption[];\n pinned?: MultiSelectFieldPinnedOptions;\n groupToString?: (groupValue: MultiSelectFieldGroupByValue) => string;\n groupSorter?: (\n a: MultiSelectFieldGroupByValue,\n b: MultiSelectFieldGroupByValue,\n ) => number;\n selectAll?: {\n label: string;\n onClick: () => void;\n checkState: CheckState;\n };\n selectedOptions: MultiSelectFieldOption[];\n onSelectedOptionsChange: (options: MultiSelectFieldOption[]) => void;\n onIsOpenChange?: (changes: { isOpen?: boolean }) => void;\n displayAs: \"popover\" | \"dialog\";\n disabled: boolean;\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n};\n\n/**\n * Wraps downshift's useSelect for non-searchable multi-select fields.\n * Keeps menu open after selection and handles bulk actions.\n */\nexport const useSelectModeMultiple = ({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectAll,\n selectedOptions,\n onSelectedOptionsChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseSelectModeMultipleOptions) => {\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: \"\",\n groupToString,\n groupSorter,\n },\n );\n\n // Compute bulk action items for non-searchable mode (only select-all)\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n if (selectAll) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: {\n id: \"select-all\",\n label: selectAll.label ?? \"Select All\",\n },\n checkState: selectAll.checkState,\n });\n }\n return items;\n }, [selectAll]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n });\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n closeMenu,\n openMenu,\n } = useSelect({\n isItemDisabled: (item) => {\n if (!item) return false;\n return (disabled || item.disabled) ?? false;\n },\n environment,\n selectedItem: null,\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem | null;\n }) => {\n if (si) {\n if (si.type === \"select-all\") {\n selectAll?.onClick();\n } else if (\n si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\"\n ) {\n handleItemClick(si.original);\n }\n }\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useSelect.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onIsOpenChange,\n items: items,\n itemToString(item: SelectItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n ...(virtualize && { scrollIntoView: () => {} }),\n });\n\n return {\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n items,\n sectionsMeta,\n closeMenu,\n openMenu,\n toggleMenu: () => (isOpen ? closeMenu() : openMenu()),\n selectedOptions,\n };\n};\n\nfunction stateReducer(\n state: UseSelectState<SelectItem>,\n actionAndChanges: UseSelectStateChangeOptions<SelectItem>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n if (displayAs === \"dialog\" && state.isOpen) {\n return { ...changes, isOpen: state.isOpen, selectedItem: null };\n }\n return { ...changes, selectedItem: null };\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: state.isOpen,\n highlightedIndex: state.highlightedIndex,\n };\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEscape:\n case useSelect.stateChangeTypes.FunctionCloseMenu:\n return changes;\n case useSelect.stateChangeTypes.ToggleButtonClick:\n if (displayAs === \"dialog\" && state.isOpen) {\n return { ...changes, isOpen: state.isOpen };\n }\n return changes;\n default:\n return changes;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { MultiSelectOptions } from \"../../../../internal/components/MultiSelectOptions\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\nimport { MultiSelectFieldTrigger } from \"./MultiSelectFieldTrigger\";\nimport { SelectFieldLabel } from \"../../SelectField/internal/SelectFieldLabel\";\nimport styles from \"../../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useSelectModeMultiple } from \"./useSelectModeMultiple\";\nimport { OptionsPopover } from \"../../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../../internal/components/AddNewItemButton\";\nimport { FieldMessage } from \"../../../../components/FieldMessage\";\nimport { MultiSelectFieldBaseInternalProps } from \"./types\";\n\n/**\n * Select mode: non-searchable multi-select using useSelect.\n * Active when disableSearch is true.\n */\nexport const MultiSelectFieldSelectMode = ({\n labelAiMark,\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n selectAll,\n singleRow,\n maxChips,\n getChipProps,\n addItemLabel,\n onAddNewItem,\n handleRemoveOption,\n handleClear,\n}: MultiSelectFieldBaseInternalProps) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n items,\n sectionsMeta,\n closeMenu,\n } = useSelectModeMultiple({\n displayAs,\n onSelectedOptionsChange,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n virtualize,\n groupToString,\n groupSorter,\n selectedOptions,\n selectAll,\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n },\n onScrollToHighlight: (i) => listRef.current?.scrollToIndex(i),\n });\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const handleLoadMore = async () => {\n await loadMore(\"\");\n };\n\n const addNewItemButton = onAddNewItem ? (\n <AddNewItemButton\n searchText=\"\"\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={closeMenu}\n />\n ) : null;\n\n const toggleButtonProps = getToggleButtonProps({\n disabled: !!disabled,\n \"aria-required\": required ? true : undefined,\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n } as Record<string, unknown>);\n\n if (displayAs === \"dialog\") {\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n ref={wrapperDivRef}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <MultiSelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={handleClear}\n id={`${id}-trigger`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n footer={addNewItemButton ?? undefined}\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen\n items={items}\n getMenuProps={(opts) =>\n getMenuProps({\n ...opts,\n style: { ...opts?.style, outline: \"none\" },\n onKeyDown: toggleButtonProps.onKeyDown,\n tabIndex: 0,\n \"aria-activedescendant\":\n toggleButtonProps[\"aria-activedescendant\"],\n })\n }\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n sectionsMeta={sectionsMeta}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </div>\n );\n }\n\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <MultiSelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={handleClear}\n id={`${id}-trigger`}\n popoverTarget={`${id}-popover`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n selectedOptions={selectedOptions}\n onRemoveOption={handleRemoveOption}\n singleRow={singleRow}\n maxChips={maxChips}\n getChipProps={getChipProps}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={closeMenu}\n width=\"reference\"\n footer={addNewItemButton ?? undefined}\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n sectionsMeta={sectionsMeta}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import { MultiSelectFieldHandle, MultiSelectFieldProps } from \"./types\";\nimport { forwardRef, useCallback, useId, useRef } from \"react\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../../components/FieldMessage\";\nimport { warnOnce } from \"../../../internal/functions\";\nimport { CheckState } from \"../../../types\";\nimport { MultiSelectFieldComboboxMode } from \"./internal/MultiSelectFieldComboboxMode\";\nimport { MultiSelectFieldSelectMode } from \"./internal/MultiSelectFieldSelectMode\";\nimport {\n MultiSelectFieldBaseInternalProps,\n MultiSelectFieldComboboxInternalProps,\n} from \"./internal/types\";\nimport { useSelectOrchestration } from \"../../../internal/hooks/useSelectOrchestration\";\n\n/**\n * MultiSelectField component for selecting multiple options from a searchable dropdown.\n *\n * Features:\n * - Multiple selection with chip display\n * - Search and filtering capabilities (disable with `disableSearch`)\n * - Lazy loading with pagination (page, offset, or group modes)\n * - Optional \"Select All\" functionality\n * - Optional \"Select Filtered\" functionality (selects options matching current search)\n * - Sticky positioning for Select All / Select Filtered items\n * - Supports both popover and dialog display modes\n * - Adaptive display based on device (mobile uses dialog)\n * - Cache support for loadOptions results\n * - Single row mode to restrict height (singleRow prop)\n * - Chip count limiting (maxChips prop)\n * - Full accessibility support with ARIA attributes\n * - Controlled selection state\n * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n */\nexport const MultiSelectField = forwardRef<\n MultiSelectFieldHandle,\n MultiSelectFieldProps\n>((propsWithLayout, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);\n\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n\n const {\n id: idProp,\n value: selectedOptions,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n hideLabel,\n placeholder,\n debounceMs = 200,\n onSelectedOptionsChange,\n cache,\n size,\n error,\n hint,\n moreInfo,\n description,\n required,\n labelAiMark,\n disabled,\n readOnly,\n prefix,\n suffix,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n singleRow,\n maxChips,\n warning,\n pinned,\n onSearchChange,\n className,\n style,\n virtualize,\n disableSearch,\n getChipProps,\n addItemLabel,\n onAddNewItem,\n } = componentProps;\n\n const groupToString =\n \"groupToString\" in componentProps\n ? componentProps.groupToString\n : undefined;\n const groupSorter =\n \"groupSorter\" in componentProps ? componentProps.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperUid = useId();\n const moreInfoUid = useId();\n\n warnDeprecatedErrorUsage(\"MultiSelectField\", error);\n\n if (disableSearch && selectFilteredProp) {\n warnOnce(\n \"MultiSelectField: `selectFiltered` has no effect when `disableSearch` is true because there is no search input to produce filtered results.\",\n );\n }\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n const hasHelperText = !!(hint || errorMessages || warning || description);\n const isDisabledOrReadOnly = (disabled || readOnly) ?? false;\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions:\n \"lazyOptions\" in componentProps ? componentProps.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const handleRemoveOption = useCallback(\n (option: { id: string | number }) => {\n onSelectedOptionsChange(\n selectedOptions.filter((opt) => opt.id !== option.id),\n );\n },\n [selectedOptions, onSelectedOptionsChange],\n );\n\n const handleClear = useCallback(() => {\n onSelectedOptionsChange([]);\n }, [onSelectedOptionsChange]);\n\n const disableClearButton =\n selectedOptions.length === 0 || isDisabledOrReadOnly;\n\n const selectAll = selectAllProp\n ? {\n label: selectAllProp.label ?? \"Select All\",\n onClick: selectAllProp.onClick,\n checkState: (selectAllProp.checkState === true\n ? \"checked\"\n : selectAllProp.checkState === false\n ? \"unchecked\"\n : (selectAllProp.checkState ?? \"indeterminate\")) as CheckState,\n }\n : undefined;\n\n const selectFiltered = selectFilteredProp\n ? (searchValue: string) => {\n const config = selectFilteredProp(searchValue);\n return {\n label: config.label,\n onClick: config.onClick,\n checkState: (config.checkState === true\n ? \"checked\"\n : config.checkState === false\n ? \"unchecked\"\n : (config.checkState ?? \"indeterminate\")) as CheckState,\n };\n }\n : undefined;\n\n const baseProps: MultiSelectFieldBaseInternalProps = {\n id,\n helperUid,\n selectedOptions,\n onSelectedOptionsChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId: moreInfo ? moreInfoUid : undefined,\n labelAiMark,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n selectAll,\n singleRow,\n maxChips,\n getChipProps,\n addItemLabel,\n onAddNewItem,\n handleRemoveOption,\n handleClear,\n };\n\n if (disableSearch) {\n return <MultiSelectFieldSelectMode {...baseProps} />;\n }\n\n const comboboxProps: MultiSelectFieldComboboxInternalProps = {\n ...baseProps,\n debounceMs,\n selectFiltered,\n onSearchChange,\n };\n\n return <MultiSelectFieldComboboxMode {...comboboxProps} />;\n});\n\nMultiSelectField.displayName = \"MultiSelectField\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { MatchSorterOptions } from \"match-sorter\";\nimport { MultiSelectField } from \"./MultiSelectField\";\nimport {\n MultiSelectFieldHandle,\n MultiSelectFieldProps,\n MultiSelectFieldOption,\n} from \"./types\";\nimport { CheckState } from \"../../../types\";\nimport {\n SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n} from \"../../../internal/functions/syncFilterUtils\";\n\nexport type MultiSelectFieldSyncProps = Omit<\n MultiSelectFieldProps,\n | \"loadOptions\"\n | \"lazy\"\n | \"debounceMs\"\n | \"cache\"\n | \"initialLoad\"\n | \"selectAll\"\n | \"selectFiltered\"\n> & {\n /**\n * The options to display in the multi-select field.\n */\n options: MultiSelectFieldOption[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * Before any search is performed, options appear in the order they are supplied.\n * By default, options are filtered by `label` and `searchText` using match-sorter,\n * which also ranks results by match quality (best matches first).\n *\n * @example\n * <MultiSelectFieldSync\n * options={options}\n * filter={(options, searchValue) => {\n * return options.filter((option) => {\n * return option.label?.toLowerCase().includes(searchValue.toLowerCase());\n * });\n * }}\n * />\n *\n * @example\n * <MultiSelectFieldSync\n * options={options}\n * filter={{ keys: [\"label\"] }}\n * />\n */\n filter?:\n | SyncFilterFn<MultiSelectFieldOption>\n | MatchSorterOptions<MultiSelectFieldOption>;\n /**\n * Enables the \"Select All\" option at the top of the list.\n * Can be a boolean to enable with default label, or an object to customize the label.\n * Click handling and check state are managed automatically based on the options and value.\n *\n * Select All and Select Filtered are mutually exclusive:\n * - Select All is shown when the search input is empty.\n * - Select Filtered (if enabled) is shown when a search term is active.\n *\n * The label can be a string or a function that receives a boolean indicating whether all options are selected.\n *\n * @example\n * <MultiSelectFieldSync selectAll options={options} {...props} />\n *\n * @example\n * <MultiSelectFieldSync selectAll={{ label: \"Select All Items\" }} options={options} {...props} />\n *\n * @example\n * <MultiSelectFieldSync\n * selectAll={{ label: (checked) => checked ? \"Deselect All\" : \"Select All\" }}\n * options={options}\n * {...props}\n * />\n */\n selectAll?: boolean | { label?: string | ((checked: boolean) => string) };\n /**\n * Enables the \"Select Filtered\" option when a search term is active.\n * Can be a boolean to enable with default label, or a function that receives the\n * search value and returns a config object with a custom label.\n * Click handling and check state are managed automatically based on the filtered options and value.\n *\n * When clicked, all enabled options matching the current search term are selected (or deselected if all are already selected).\n *\n * Select All and Select Filtered are mutually exclusive:\n * - Select All (if enabled) is shown when the search input is empty.\n * - Select Filtered is shown when a search term is active.\n *\n * @example\n * <MultiSelectFieldSync selectAll selectFiltered options={options} {...props} />\n *\n * @example\n * <MultiSelectFieldSync\n * selectFiltered={(searchValue) => ({\n * label: `Select items matching \"${searchValue}\"`,\n * })}\n * options={options}\n * {...props}\n * />\n */\n selectFiltered?: boolean | ((searchValue: string) => { label?: string });\n};\n\n/**\n * MultiSelectFieldSync is a simplified version of MultiSelectField that is used to display a list of options in a multi-select field.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`.\n * - Performs client-side filtering of the options.\n * - Optionally accepts a function to filter the options, or a MatchSorterOptions object to customize the default filtering.\n * - Simplified `selectAll` prop that automatically handles click and check state.\n * - Simplified `selectFiltered` prop that automatically selects/deselects filtered options.\n * - Supports all the other props of MultiSelectField.\n */\nexport const MultiSelectFieldSync = (props: MultiSelectFieldSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n value,\n onSelectedOptionsChange,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const selectAllConfig = useMemo(() => {\n if (!selectAllProp) return undefined;\n\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledIds = new Set(enabledOptions.map((opt) => opt.id));\n const selectedCount = value.filter((v) => enabledIds.has(v.id)).length;\n const allSelected = selectedCount === enabledOptions.length;\n\n const labelProp =\n typeof selectAllProp === \"object\" ? selectAllProp.label : undefined;\n const label =\n typeof labelProp === \"function\" ? labelProp(allSelected) : labelProp;\n\n const checkState: CheckState = allSelected\n ? \"checked\"\n : selectedCount > 0\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allSelected) {\n onSelectedOptionsChange([]);\n } else {\n onSelectedOptionsChange(enabledOptions);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n }, [selectAllProp, options, value, onSelectedOptionsChange]);\n\n const selectFilteredConfig = useMemo(() => {\n if (!selectFilteredProp) return undefined;\n\n return (searchValue: string) => {\n const filteredOptions = filter(options, searchValue);\n const enabledFilteredOptions = filteredOptions.filter(\n (opt) => !opt.disabled,\n );\n const selectedIds = new Set(value.map((v) => v.id));\n const allFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((opt) => selectedIds.has(opt.id));\n const someFilteredSelected = enabledFilteredOptions.some((opt) =>\n selectedIds.has(opt.id),\n );\n\n const label =\n typeof selectFilteredProp === \"function\"\n ? selectFilteredProp(searchValue).label\n : undefined;\n\n const checkState: CheckState = allFilteredSelected\n ? \"checked\"\n : someFilteredSelected\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allFilteredSelected) {\n const filteredIds = new Set(enabledFilteredOptions.map((o) => o.id));\n onSelectedOptionsChange(value.filter((v) => !filteredIds.has(v.id)));\n } else {\n const currentIds = new Set(value.map((v) => v.id));\n const newSelections = enabledFilteredOptions.filter(\n (opt) => !currentIds.has(opt.id),\n );\n onSelectedOptionsChange([...value, ...newSelections]);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n };\n }, [selectFilteredProp, options, value, onSelectedOptionsChange, filter]);\n\n const fieldRef = useRef<MultiSelectFieldHandle>(null);\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (prevOptionsRef.current !== options) {\n prevOptionsRef.current = options;\n fieldRef.current?.invalidate();\n }\n }, [options]);\n\n return (\n <MultiSelectField\n ref={fieldRef}\n lazy={false}\n loadOptions={(searchValue) => filter(options, searchValue)}\n debounceMs={0}\n value={value}\n onSelectedOptionsChange={onSelectedOptionsChange}\n selectAll={selectAllConfig}\n selectFiltered={selectFilteredConfig}\n {...rest}\n />\n );\n};\n"],"names":["Close","Chevron_Right","items","nodeRect","menuRect","stateReducer","inputValue","styles"],"mappings":"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"}