@servicetitan/anvil2 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{Alert-DREZhnU9.js → Alert-DXoEusod.js} +4 -4
  3. package/dist/{Alert-DREZhnU9.js.map → Alert-DXoEusod.js.map} +1 -1
  4. package/dist/Alert.js +1 -1
  5. package/dist/{Announcement-CRaUI73J.js → Announcement-SAypScAu.js} +4 -4
  6. package/dist/{Announcement-CRaUI73J.js.map → Announcement-SAypScAu.js.map} +1 -1
  7. package/dist/Announcement.js +1 -1
  8. package/dist/{AnvilProvider-bEeSKwNj.js → AnvilProvider-C3pjoStP.js} +4 -4
  9. package/dist/{AnvilProvider-bEeSKwNj.js.map → AnvilProvider-C3pjoStP.js.map} +1 -1
  10. package/dist/AnvilProvider.js +1 -1
  11. package/dist/{Avatar-DQN2dNgB.js → Avatar-COMPK7Ym.js} +2 -2
  12. package/dist/{Avatar-DQN2dNgB.js.map → Avatar-COMPK7Ym.js.map} +1 -1
  13. package/dist/{Avatar-B4RLfLCS.js → Avatar-DShevhcs.js} +2 -2
  14. package/dist/{Avatar-B4RLfLCS.js.map → Avatar-DShevhcs.js.map} +1 -1
  15. package/dist/Avatar.js +2 -2
  16. package/dist/{Badge-BrysDYfx.js → Badge-CS-CwcOQ.js} +2 -2
  17. package/dist/{Badge-BrysDYfx.js.map → Badge-CS-CwcOQ.js.map} +1 -1
  18. package/dist/Badge.js +1 -1
  19. package/dist/{Breadcrumbs-CsVxbt4N.js → Breadcrumbs-CEVH4s23.js} +5 -5
  20. package/dist/{Breadcrumbs-CsVxbt4N.js.map → Breadcrumbs-CEVH4s23.js.map} +1 -1
  21. package/dist/Breadcrumbs.js +1 -1
  22. package/dist/{Button-B__Q1BA5.js → Button-l7pTJdPc.js} +3 -3
  23. package/dist/{Button-B__Q1BA5.js.map → Button-l7pTJdPc.js.map} +1 -1
  24. package/dist/Button.js +1 -1
  25. package/dist/{ButtonCompound-BB_WRzP4.js → ButtonCompound-CX2kHgWe.js} +2 -2
  26. package/dist/{ButtonCompound-BB_WRzP4.js.map → ButtonCompound-CX2kHgWe.js.map} +1 -1
  27. package/dist/ButtonCompound.js +1 -1
  28. package/dist/{ButtonLink-Dy0nfK_C.js → ButtonLink-CRlyK750.js} +3 -3
  29. package/dist/{ButtonLink-Dy0nfK_C.js.map → ButtonLink-CRlyK750.js.map} +1 -1
  30. package/dist/ButtonLink.js +1 -1
  31. package/dist/{ButtonToggle-DVwe4l6m.js → ButtonToggle-BOVP_jEN.js} +3 -3
  32. package/dist/{ButtonToggle-DVwe4l6m.js.map → ButtonToggle-BOVP_jEN.js.map} +1 -1
  33. package/dist/ButtonToggle.js +1 -1
  34. package/dist/{Calendar-BO9QiBJG.js → Calendar-BTr5I3t-.js} +2 -2
  35. package/dist/{Calendar-BO9QiBJG.js.map → Calendar-BTr5I3t-.js.map} +1 -1
  36. package/dist/{Calendar-BFWJ7Rlq.js → Calendar-DUGQQkga.js} +5 -5
  37. package/dist/{Calendar-BFWJ7Rlq.js.map → Calendar-DUGQQkga.js.map} +1 -1
  38. package/dist/Calendar.js +2 -2
  39. package/dist/{Card-TovA8Io5.js → Card-DDH7gI8m.js} +2 -2
  40. package/dist/{Card-TovA8Io5.js.map → Card-DDH7gI8m.js.map} +1 -1
  41. package/dist/Card.js +1 -1
  42. package/dist/{Checkbox-BrIThtCS.js → Checkbox-9VbydUcM.js} +6 -6
  43. package/dist/{Checkbox-BrIThtCS.js.map → Checkbox-9VbydUcM.js.map} +1 -1
  44. package/dist/{Checkbox-Igz3R72o.js → Checkbox-ZXftLNwB.js} +2 -2
  45. package/dist/{Checkbox-Igz3R72o.js.map → Checkbox-ZXftLNwB.js.map} +1 -1
  46. package/dist/Checkbox.js +1 -1
  47. package/dist/{Chip-U9Ly2Ykq.js → Chip-Bc7jiIJ1.js} +4 -4
  48. package/dist/{Chip-U9Ly2Ykq.js.map → Chip-Bc7jiIJ1.js.map} +1 -1
  49. package/dist/Chip.js +1 -1
  50. package/dist/{Combobox-Bb79Jl9I.js → Combobox-CNObHLjp.js} +9 -9
  51. package/dist/{Combobox-Bb79Jl9I.js.map → Combobox-CNObHLjp.js.map} +1 -1
  52. package/dist/Combobox.js +1 -1
  53. package/dist/{DataTable-CLr0j95O.js → DataTable-CQpySyDq.js} +159 -34
  54. package/dist/DataTable-CQpySyDq.js.map +1 -0
  55. package/dist/{DateFieldRange-BlpxUPPk.js → DateFieldRange-Cfnw1Chk.js} +5 -5
  56. package/dist/{DateFieldRange-BlpxUPPk.js.map → DateFieldRange-Cfnw1Chk.js.map} +1 -1
  57. package/dist/DateFieldRange.js +1 -1
  58. package/dist/{DateFieldSingle-DanvgyeQ.js → DateFieldSingle-BRuERJAl.js} +5 -5
  59. package/dist/{DateFieldSingle-DanvgyeQ.js.map → DateFieldSingle-BRuERJAl.js.map} +1 -1
  60. package/dist/DateFieldSingle.js +1 -1
  61. package/dist/{DateFieldYearless-rUMXjN0L.js → DateFieldYearless-Dw1k3_PY.js} +5 -5
  62. package/dist/{DateFieldYearless-rUMXjN0L.js.map → DateFieldYearless-Dw1k3_PY.js.map} +1 -1
  63. package/dist/DateFieldYearless.js +1 -1
  64. package/dist/{DateFieldYearlessRange-Cw71mA-Q.js → DateFieldYearlessRange--plyld10.js} +6 -6
  65. package/dist/{DateFieldYearlessRange-Cw71mA-Q.js.map → DateFieldYearlessRange--plyld10.js.map} +1 -1
  66. package/dist/DateFieldYearlessRange.js +1 -1
  67. package/dist/{DaysOfTheWeek-DOsJyEdk.js → DaysOfTheWeek-vE310Rjp.js} +6 -6
  68. package/dist/{DaysOfTheWeek-DOsJyEdk.js.map → DaysOfTheWeek-vE310Rjp.js.map} +1 -1
  69. package/dist/DaysOfTheWeek.js +1 -1
  70. package/dist/{Details-D_Iil6qI.js → Details-BF0-a1by.js} +3 -3
  71. package/dist/{Details-D_Iil6qI.js.map → Details-BF0-a1by.js.map} +1 -1
  72. package/dist/Details.js +1 -1
  73. package/dist/{Dialog-3pjJJiED.js → Dialog-DZPaz84r.js} +7 -6
  74. package/dist/{Dialog-3pjJJiED.js.map → Dialog-DZPaz84r.js.map} +1 -1
  75. package/dist/Dialog.js +1 -1
  76. package/dist/{DialogCancelButton-D0r_OFKS.js → DialogCancelButton-GuN5lgR-.js} +2 -2
  77. package/dist/{DialogCancelButton-D0r_OFKS.js.map → DialogCancelButton-GuN5lgR-.js.map} +1 -1
  78. package/dist/DialogContext-DBgtApl9.js.map +1 -1
  79. package/dist/{Divider-CJvAnDYV.js → Divider-De04mOU6.js} +2 -2
  80. package/dist/{Divider-CJvAnDYV.js.map → Divider-De04mOU6.js.map} +1 -1
  81. package/dist/Divider.js +1 -1
  82. package/dist/Dnd.js +1 -1
  83. package/dist/DndSort.js +17 -7
  84. package/dist/DndSort.js.map +1 -1
  85. package/dist/{Drawer-BPPWM11Z.js → Drawer-pMQOa2jH.js} +9 -10
  86. package/dist/Drawer-pMQOa2jH.js.map +1 -0
  87. package/dist/Drawer.js +1 -1
  88. package/dist/DrawerContext-BSpnzXVZ.js +6 -0
  89. package/dist/DrawerContext-BSpnzXVZ.js.map +1 -0
  90. package/dist/DrillDown.js +1 -1
  91. package/dist/{EditCard-DgHXddkx.js → EditCard-DAiE-Hsc.js} +6 -6
  92. package/dist/{EditCard-DgHXddkx.js.map → EditCard-DAiE-Hsc.js.map} +1 -1
  93. package/dist/EditCard.js +1 -1
  94. package/dist/{FieldDialog-NcMR2ATl.js → FieldDialog-Be54L3E-.js} +381 -18
  95. package/dist/FieldDialog-Be54L3E-.js.map +1 -0
  96. package/dist/FieldDialog.css +22 -5
  97. package/dist/{FieldLabel-EjKzPf0f.js → FieldLabel-DSrHbw9U.js} +3 -3
  98. package/dist/{FieldLabel-EjKzPf0f.js.map → FieldLabel-DSrHbw9U.js.map} +1 -1
  99. package/dist/FieldLabel.js +1 -1
  100. package/dist/{FieldMessage-CRNo4fd5.js → FieldMessage-tEr6rWXS.js} +2 -2
  101. package/dist/{FieldMessage-CRNo4fd5.js.map → FieldMessage-tEr6rWXS.js.map} +1 -1
  102. package/dist/FieldMessage.js +1 -1
  103. package/dist/{Flex-DKS51qTf.js → Flex-CUtXN-C0.js} +2 -2
  104. package/dist/{Flex-DKS51qTf.js.map → Flex-CUtXN-C0.js.map} +1 -1
  105. package/dist/Flex.js +1 -1
  106. package/dist/{Grid-BUmKiLhz.js → Grid-CatFkT0X.js} +2 -2
  107. package/dist/{Grid-BUmKiLhz.js.map → Grid-CatFkT0X.js.map} +1 -1
  108. package/dist/Grid.js +1 -1
  109. package/dist/{Helper-xZuAxaI0.js → Helper-CK-XjpR3.js} +2 -2
  110. package/dist/{Helper-xZuAxaI0.js.map → Helper-CK-XjpR3.js.map} +1 -1
  111. package/dist/{Icon-BckjFkbw.js → Icon-Bcil6aBo.js} +2 -2
  112. package/dist/{Icon-BckjFkbw.js.map → Icon-Bcil6aBo.js.map} +1 -1
  113. package/dist/Icon.js +1 -1
  114. package/dist/{InputMask-DS9TWqfO.js → InputMask-DoqWRi3t.js} +2 -2
  115. package/dist/{InputMask-DS9TWqfO.js.map → InputMask-DoqWRi3t.js.map} +1 -1
  116. package/dist/InputMask.js +1 -1
  117. package/dist/{InteractiveCard-CvX95yR4.js → InteractiveCard-OszQGxGw.js} +2 -2
  118. package/dist/{InteractiveCard-CvX95yR4.js.map → InteractiveCard-OszQGxGw.js.map} +1 -1
  119. package/dist/InteractiveCard.js +1 -1
  120. package/dist/{Link-DT8scNJ-.js → Link-B3reiL5f.js} +3 -3
  121. package/dist/{Link-DT8scNJ-.js.map → Link-B3reiL5f.js.map} +1 -1
  122. package/dist/Link.js +1 -1
  123. package/dist/{LinkButton-BMce3lWm.js → LinkButton-D62f2os3.js} +2 -2
  124. package/dist/{LinkButton-BMce3lWm.js.map → LinkButton-D62f2os3.js.map} +1 -1
  125. package/dist/LinkButton.js +1 -1
  126. package/dist/{ListView-CBmaHOY-.js → ListView-CtRhYAls.js} +13 -11
  127. package/dist/ListView-CtRhYAls.js.map +1 -0
  128. package/dist/ListView.js +1 -1
  129. package/dist/{Listbox-BFT6SBf3.js → Listbox-DMyxIokT.js} +5 -5
  130. package/dist/{Listbox-BFT6SBf3.js.map → Listbox-DMyxIokT.js.map} +1 -1
  131. package/dist/Listbox.js +1 -1
  132. package/dist/{LocalizationProvider-u6xdKCBi.js → LocalizationProvider-ay-XWdlo.js} +2 -2
  133. package/dist/{LocalizationProvider-u6xdKCBi.js.map → LocalizationProvider-ay-XWdlo.js.map} +1 -1
  134. package/dist/LocalizationProvider.js +1 -1
  135. package/dist/{Menu-Dh0q__vE.js → Menu-3LIfRdTk.js} +3 -3
  136. package/dist/{Menu-Dh0q__vE.js.map → Menu-3LIfRdTk.js.map} +1 -1
  137. package/dist/Menu.js +1 -1
  138. package/dist/MultiSelectField.js +1 -1
  139. package/dist/{MultiSelectFieldSync-7nxS5Fdi.js → MultiSelectFieldSync-xj7jXas-.js} +120 -94
  140. package/dist/MultiSelectFieldSync-xj7jXas-.js.map +1 -0
  141. package/dist/{NumberField-Dmm1YQNn.js → NumberField-W1k8V5Qq.js} +6 -6
  142. package/dist/{NumberField-Dmm1YQNn.js.map → NumberField-W1k8V5Qq.js.map} +1 -1
  143. package/dist/NumberField.js +1 -1
  144. package/dist/Overflow.js +2 -2
  145. package/dist/{Page-CjuKnpSO.js → Page-vc7zs4tn.js} +16 -16
  146. package/dist/{Page-CjuKnpSO.js.map → Page-vc7zs4tn.js.map} +1 -1
  147. package/dist/Page.js +1 -1
  148. package/dist/{Pagination-CimQTC7M.js → Pagination-DIatYUXX.js} +7 -7
  149. package/dist/{Pagination-CimQTC7M.js.map → Pagination-DIatYUXX.js.map} +1 -1
  150. package/dist/Pagination.js +1 -1
  151. package/dist/{Popover-U2Eu7v1Q.js → Popover-OOLK0hUz.js} +10 -9
  152. package/dist/Popover-OOLK0hUz.js.map +1 -0
  153. package/dist/Popover.js +1 -1
  154. package/dist/{ProgressBar-CSkAu2F4.js → ProgressBar-HA9RPZfC.js} +6 -6
  155. package/dist/{ProgressBar-CSkAu2F4.js.map → ProgressBar-HA9RPZfC.js.map} +1 -1
  156. package/dist/ProgressBar.js +1 -1
  157. package/dist/{Radio-CRv09Kbt.js → Radio-31wKzlZ4.js} +6 -6
  158. package/dist/{Radio-CRv09Kbt.js.map → Radio-31wKzlZ4.js.map} +1 -1
  159. package/dist/{Radio-D_8PAnkC.js → Radio-BwWDJuLF.js} +2 -2
  160. package/dist/{Radio-D_8PAnkC.js.map → Radio-BwWDJuLF.js.map} +1 -1
  161. package/dist/Radio.js +1 -1
  162. package/dist/{SearchField-0DZvPwPZ.js → SearchField-CoeaOip5.js} +3 -3
  163. package/dist/{SearchField-0DZvPwPZ.js.map → SearchField-CoeaOip5.js.map} +1 -1
  164. package/dist/SearchField.js +1 -1
  165. package/dist/{SegmentedControl-CMBQf7uo.js → SegmentedControl-CzTtiYS9.js} +3 -3
  166. package/dist/{SegmentedControl-CMBQf7uo.js.map → SegmentedControl-CzTtiYS9.js.map} +1 -1
  167. package/dist/SegmentedControl.js +1 -1
  168. package/dist/{SelectCard-B9RLpwtX.js → SelectCard-C91twG1S.js} +5 -5
  169. package/dist/{SelectCard-B9RLpwtX.js.map → SelectCard-C91twG1S.js.map} +1 -1
  170. package/dist/SelectCard.js +1 -1
  171. package/dist/SelectField.js +1 -1
  172. package/dist/{SelectFieldSync-BsDUUM84.js → SelectFieldSync-BFsJssdD.js} +163 -96
  173. package/dist/SelectFieldSync-BFsJssdD.js.map +1 -0
  174. package/dist/{SelectTrigger-DVLdDbfd.js → SelectTrigger-Cxhx9IVo.js} +5 -5
  175. package/dist/{SelectTrigger-DVLdDbfd.js.map → SelectTrigger-Cxhx9IVo.js.map} +1 -1
  176. package/dist/SelectTrigger.js +1 -1
  177. package/dist/{SelectTriggerBase-B3vw_qnJ.js → SelectTriggerBase-aaOWep-V.js} +6 -6
  178. package/dist/{SelectTriggerBase-B3vw_qnJ.js.map → SelectTriggerBase-aaOWep-V.js.map} +1 -1
  179. package/dist/{SideNav-DzcESFKB.js → SideNav-CbMGsIPM.js} +3 -3
  180. package/dist/{SideNav-DzcESFKB.js.map → SideNav-CbMGsIPM.js.map} +1 -1
  181. package/dist/SideNav.js +1 -1
  182. package/dist/Skeleton.js +1 -1
  183. package/dist/{Stepper-DXL6Ikux.js → Stepper-Jv9A3Ned.js} +5 -5
  184. package/dist/{Stepper-DXL6Ikux.js.map → Stepper-Jv9A3Ned.js.map} +1 -1
  185. package/dist/Stepper.js +1 -1
  186. package/dist/{Switch-CkZm45S3.js → Switch-DQICcdAv.js} +5 -5
  187. package/dist/{Switch-CkZm45S3.js.map → Switch-DQICcdAv.js.map} +1 -1
  188. package/dist/Switch.js +1 -1
  189. package/dist/{Tab-8a1qCMFA.js → Tab-CeXt6A_D.js} +4 -4
  190. package/dist/{Tab-8a1qCMFA.js.map → Tab-CeXt6A_D.js.map} +1 -1
  191. package/dist/Tab.js +1 -1
  192. package/dist/Table.js +1 -1
  193. package/dist/{Text-rR4bxNLd.js → Text-DhheKsns.js} +2 -2
  194. package/dist/{Text-rR4bxNLd.js.map → Text-DhheKsns.js.map} +1 -1
  195. package/dist/Text.js +1 -1
  196. package/dist/{TextField-Bm9ElAU1.js → TextField-CDiiYSlT.js} +4 -4
  197. package/dist/{TextField-Bm9ElAU1.js.map → TextField-CDiiYSlT.js.map} +1 -1
  198. package/dist/{TextField-B_ciNx06.js → TextField-CnYxS52Y.js} +2 -2
  199. package/dist/{TextField-B_ciNx06.js.map → TextField-CnYxS52Y.js.map} +1 -1
  200. package/dist/TextField.js +1 -1
  201. package/dist/{Textarea-stXDixWH.js → Textarea-BnHIDj2P.js} +4 -4
  202. package/dist/{Textarea-stXDixWH.js.map → Textarea-BnHIDj2P.js.map} +1 -1
  203. package/dist/Textarea.js +1 -1
  204. package/dist/{ThemeProvider-DyYBQz5m.js → ThemeProvider-BEt_iJgf.js} +5 -5
  205. package/dist/{ThemeProvider-DyYBQz5m.js.map → ThemeProvider-BEt_iJgf.js.map} +1 -1
  206. package/dist/ThemeProvider.css +14 -14
  207. package/dist/ThemeProvider.js +1 -1
  208. package/dist/{TimeField-063-mjFa.js → TimeField-ChqK40k_.js} +6 -6
  209. package/dist/{TimeField-063-mjFa.js.map → TimeField-ChqK40k_.js.map} +1 -1
  210. package/dist/TimeField.js +1 -1
  211. package/dist/Toast.js +2 -2
  212. package/dist/{Toaster-99KNznN3.js → Toaster-BlycAc63.js} +15 -9
  213. package/dist/Toaster-BlycAc63.js.map +1 -0
  214. package/dist/{Toaster-Br0IeKtP.js → Toaster-DW_bi2L9.js} +2 -2
  215. package/dist/{Toaster-Br0IeKtP.js.map → Toaster-DW_bi2L9.js.map} +1 -1
  216. package/dist/{Toolbar-DWeZEpeV.js → Toolbar-CUjj2YEZ.js} +20 -20
  217. package/dist/{Toolbar-DWeZEpeV.js.map → Toolbar-CUjj2YEZ.js.map} +1 -1
  218. package/dist/Toolbar.js +1 -1
  219. package/dist/{Tooltip-CIsvQwWo.js → Tooltip-CUiAJXak.js} +2 -2
  220. package/dist/{Tooltip-CIsvQwWo.js.map → Tooltip-CUiAJXak.js.map} +1 -1
  221. package/dist/Tooltip.js +1 -1
  222. package/dist/{YearlessDateInputWithPicker-D6HHhE_H.js → YearlessDateInputWithPicker-DZSb8sPf.js} +5 -5
  223. package/dist/{YearlessDateInputWithPicker-D6HHhE_H.js.map → YearlessDateInputWithPicker-DZSb8sPf.js.map} +1 -1
  224. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +3 -1
  225. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -6
  226. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +10 -1
  227. package/dist/beta/components/MultiSelectField/types.d.ts +34 -32
  228. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +11 -1
  229. package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +27 -0
  230. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +3 -1
  231. package/dist/beta/components/SelectField/internal/types.d.ts +16 -0
  232. package/dist/beta/components/SelectField/internal/useCombo.d.ts +8 -3
  233. package/dist/beta/components/SelectField/internal/useGroupedOptions.d.ts +39 -0
  234. package/dist/beta/components/SelectField/internal/usePinnedOptions.d.ts +37 -0
  235. package/dist/beta/components/SelectField/types.d.ts +33 -10
  236. package/dist/beta/components/Table/columnTypeDefaults.d.ts +51 -0
  237. package/dist/beta/components/Table/createColumnHelper.d.ts +88 -26
  238. package/dist/beta/components/Table/formatters/dateFormatter.d.ts +1 -1
  239. package/dist/beta/components/Table/formatters/dateTimeFormatter.d.ts +1 -1
  240. package/dist/beta/components/Table/formatters/yearlessDateFormatter.d.ts +2 -2
  241. package/dist/beta/components/Table/index.d.ts +1 -0
  242. package/dist/beta/components/Table/types.d.ts +188 -19
  243. package/dist/beta/hooks/useAdaptiveView/index.d.ts +1 -0
  244. package/dist/beta.js +8 -8
  245. package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
  246. package/dist/components/Dialog/internal/DialogContext.d.ts +5 -0
  247. package/dist/components/DndSort/DndSort.d.ts +1 -0
  248. package/dist/components/Drawer/internal/DrawerContext.d.ts +5 -0
  249. package/dist/components/FieldLabel/FieldLabel.d.ts +3 -1
  250. package/dist/components/Popover/internal/PopoverContext.d.ts +0 -1
  251. package/dist/components/Popover/internal/usePopoverContext.d.ts +0 -1
  252. package/dist/{index-DVtI3CrN.js → index-DFvIVS57.js} +3 -3
  253. package/dist/{index-DVtI3CrN.js.map → index-DFvIVS57.js.map} +1 -1
  254. package/dist/index.js +64 -64
  255. package/dist/{primitive-BByug0kD.js → primitive-C3RFDRA8.js} +11 -11
  256. package/dist/{primitive-BByug0kD.js.map → primitive-C3RFDRA8.js.map} +1 -1
  257. package/dist/token/core/primitive-variables.scss +10 -10
  258. package/dist/token/core/primitive.js +10 -10
  259. package/dist/token/core/primitive.scss +10 -10
  260. package/dist/token.js +1 -1
  261. package/dist/{useBreakpoint-BGCsBhQ7.js → useBreakpoint-BP3HZXmh.js} +2 -2
  262. package/dist/{useBreakpoint-BGCsBhQ7.js.map → useBreakpoint-BP3HZXmh.js.map} +1 -1
  263. package/dist/useBreakpoint.js +1 -1
  264. package/dist/{useDrilldown-pzr3387k.js → useDrilldown-lAdB3FFW.js} +4 -4
  265. package/dist/{useDrilldown-pzr3387k.js.map → useDrilldown-lAdB3FFW.js.map} +1 -1
  266. package/dist/{useInitialFocus-DfFGsgjO.js → useInitialFocus-nOW12jQ5.js} +20 -17
  267. package/dist/useInitialFocus-nOW12jQ5.js.map +1 -0
  268. package/dist/{useLayoutPropsUtil-BlIWftBb.js → useLayoutPropsUtil-loxbyklF.js} +3 -3
  269. package/dist/{useLayoutPropsUtil-BlIWftBb.js.map → useLayoutPropsUtil-loxbyklF.js.map} +1 -1
  270. package/package.json +5 -5
  271. package/dist/DataTable-CLr0j95O.js.map +0 -1
  272. package/dist/Drawer-BPPWM11Z.js.map +0 -1
  273. package/dist/FieldDialog-NcMR2ATl.js.map +0 -1
  274. package/dist/ListView-CBmaHOY-.js.map +0 -1
  275. package/dist/MultiSelectFieldSync-7nxS5Fdi.js.map +0 -1
  276. package/dist/Popover-U2Eu7v1Q.js.map +0 -1
  277. package/dist/SelectFieldSync-BsDUUM84.js.map +0 -1
  278. package/dist/Toaster-99KNznN3.js.map +0 -1
  279. package/dist/useInitialFocus-DfFGsgjO.js.map +0 -1
  280. /package/dist/beta/hooks/{useAdaptiveView.d.ts → useAdaptiveView/useAdaptiveView.d.ts} +0 -0
@@ -1,20 +1,22 @@
1
- import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
2
- import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { F as Flex } from './Flex-DKS51qTf.js';
4
- import { I as Icon } from './Icon-BckjFkbw.js';
1
+ import { useState, useRef, useCallback, useEffect, useMemo, useId } from 'react';
2
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
+ import { S as Spinner } from './Spinner-CpEm3Lud.js';
4
+ import { B as Button } from './Button-l7pTJdPc.js';
5
+ import { c as cx } from './index-SvGbrGuT.js';
6
+ import { F as Flex } from './Flex-CUtXN-C0.js';
7
+ import { I as Icon } from './Icon-Bcil6aBo.js';
5
8
  import { a as SvgCheckBox, b as SvgCheckBoxOutlineBlank, S as SvgIndeterminateCheckBox } from './indeterminate_check_box-B4zobNlt.js';
6
9
  import { S as SvgCheck } from './check-Cf67OWrZ.js';
7
- import { c as cx } from './index-SvGbrGuT.js';
8
- import { T as Text } from './Text-rR4bxNLd.js';
9
- import { S as Spinner } from './Spinner-CpEm3Lud.js';
10
+ import { T as Text } from './Text-DhheKsns.js';
10
11
  import { u as useIntersectionObserver } from './useIntersectionObserver-BEmMDO3P.js';
11
- import { F as FieldLabel } from './FieldLabel-EjKzPf0f.js';
12
+ import { D as Divider } from './Divider-De04mOU6.js';
12
13
  import { S as SrOnly } from './SrOnly-CrdBTl6E.js';
14
+ import { F as FieldLabel } from './FieldLabel-DSrHbw9U.js';
13
15
  import { a as useOnClickOutside, t as tabbable } from './useOnClickOutside-Cyqbe1n3.js';
14
16
  import { c as computePosition, a as autoUpdate, o as offset, h as autoPlacement, g as size } from './floating-ui.react-dom-BZbDMh89.js';
15
- import { u as useBreakpoint } from './useBreakpoint-BGCsBhQ7.js';
17
+ import { u as useBreakpoint } from './useBreakpoint-BP3HZXmh.js';
16
18
  import './anvil-fonts.css';import './FieldDialog.css';/* empty css */
17
- import { D as DialogCancelButton } from './DialogCancelButton-D0r_OFKS.js';
19
+ import { D as DialogCancelButton } from './DialogCancelButton-GuN5lgR-.js';
18
20
  import { S as SvgClose } from './close-DZj38AEh.js';
19
21
  import { D as DialogContext } from './DialogContext-DBgtApl9.js';
20
22
  import { u as useDialogScrollLock } from './useDialogScrollLock-BW-aVboo.js';
@@ -38,6 +40,7 @@ function useSelectFieldLoading(config) {
38
40
  () => /* @__PURE__ */ new Map()
39
41
  );
40
42
  const currentSearchValueRef = useRef("");
43
+ const hasCompletedLoadRef = useRef(false);
41
44
  const appendOptions = useCallback((newOptions) => {
42
45
  setOptions((prevOptions) => prevOptions.concat(newOptions));
43
46
  }, []);
@@ -53,7 +56,7 @@ function useSelectFieldLoading(config) {
53
56
  useEffect(() => {
54
57
  if (!cacheEnabled) return;
55
58
  const searchValue = currentSearchValueRef.current;
56
- if (options.length === 0) return;
59
+ if (!hasCompletedLoadRef.current) return;
57
60
  setStateCache((prev) => {
58
61
  if (prev.size >= cacheMaxSize) {
59
62
  prev.clear();
@@ -120,6 +123,7 @@ function useSelectFieldLoading(config) {
120
123
  setHasMoreToLoad(result.hasMore ?? false);
121
124
  (isInitial ? setOptions : appendOptions)(result.options);
122
125
  }
126
+ hasCompletedLoadRef.current = true;
123
127
  } finally {
124
128
  (isInitial ? setLoading : setLoadingMore)(false);
125
129
  }
@@ -168,13 +172,19 @@ function useSelectFieldLoading(config) {
168
172
  };
169
173
  }
170
174
 
171
- const empty = "_empty_4c4yl_6";
172
- const scroller = "_scroller_4c4yl_20";
175
+ const empty = "_empty_1h0fh_6";
176
+ const scroller = "_scroller_1h0fh_20";
177
+ const divider = "_divider_1h0fh_47";
173
178
  const styles$3 = {
174
- "select-field-list": "_select-field-list_4c4yl_2",
179
+ "select-field-list": "_select-field-list_1h0fh_2",
175
180
  empty: empty,
176
- "load-more": "_load-more_4c4yl_13",
177
- scroller: scroller};
181
+ "load-more": "_load-more_1h0fh_13",
182
+ scroller: scroller,
183
+ "pinned-section": "_pinned-section_1h0fh_33",
184
+ "pinned-section-header": "_pinned-section-header_1h0fh_36",
185
+ "pinned-section-list": "_pinned-section-list_1h0fh_42",
186
+ divider: divider
187
+ };
178
188
 
179
189
  const highlighted = "_highlighted_15431_26";
180
190
  const disabled = "_disabled_15431_29";
@@ -269,6 +279,174 @@ const InView = ({
269
279
  return /* @__PURE__ */ jsx("div", { ref, children });
270
280
  };
271
281
 
282
+ const FieldListBase = ({
283
+ isOpen,
284
+ items,
285
+ getMenuProps,
286
+ getItemProps,
287
+ highlightedIndex,
288
+ getCheckedState,
289
+ selectionType,
290
+ hasMore,
291
+ onLoadMore,
292
+ loading,
293
+ loadingMore,
294
+ disableAutoLoadMore,
295
+ disabled,
296
+ className,
297
+ style,
298
+ sectionsMeta = []
299
+ }) => {
300
+ const baseId = useId();
301
+ const anyPinnedLoading = sectionsMeta.some(
302
+ (s) => s.type === "pinned" && s.loading
303
+ );
304
+ const handleLoaderVisibilityChange = (visible) => {
305
+ if (visible && !disableAutoLoadMore) {
306
+ onLoadMore();
307
+ }
308
+ };
309
+ const sections = useMemo(() => {
310
+ if (sectionsMeta.length === 0) {
311
+ return [
312
+ {
313
+ type: "flat",
314
+ items: items.map((item, index) => ({ item, index }))
315
+ }
316
+ ];
317
+ }
318
+ const result = [];
319
+ const firstSectionStartIndex = Math.min(
320
+ ...sectionsMeta.map((s) => s.startIndex)
321
+ );
322
+ if (firstSectionStartIndex > 0) {
323
+ const flatItems = [];
324
+ for (let i = 0; i < firstSectionStartIndex; i++) {
325
+ if (items[i]) {
326
+ flatItems.push({ item: items[i], index: i });
327
+ }
328
+ }
329
+ if (flatItems.length > 0) {
330
+ result.push({ type: "flat", items: flatItems });
331
+ }
332
+ }
333
+ sectionsMeta.forEach((meta) => {
334
+ const sectionItems = [];
335
+ for (let i = meta.startIndex; i < meta.endIndex; i++) {
336
+ if (items[i]) {
337
+ sectionItems.push({ item: items[i], index: i });
338
+ }
339
+ }
340
+ if (meta.type === "pinned") {
341
+ if (sectionItems.length > 0 || meta.loading) {
342
+ result.push({
343
+ type: "pinned",
344
+ label: meta.label,
345
+ items: sectionItems,
346
+ loading: meta.loading
347
+ });
348
+ }
349
+ } else if (sectionItems.length > 0) {
350
+ result.push({
351
+ type: "group",
352
+ label: meta.label,
353
+ items: sectionItems
354
+ });
355
+ }
356
+ });
357
+ const lastSectionIndex = sectionsMeta.length > 0 ? Math.max(...sectionsMeta.map((s) => s.endIndex)) : 0;
358
+ if (lastSectionIndex < items.length) {
359
+ const flatItems = [];
360
+ for (let i = lastSectionIndex; i < items.length; i++) {
361
+ flatItems.push({ item: items[i], index: i });
362
+ }
363
+ if (flatItems.length > 0) {
364
+ result.push({ type: "flat", items: flatItems });
365
+ }
366
+ }
367
+ return result;
368
+ }, [items, sectionsMeta]);
369
+ const renderItem = (item, index) => /* @__PURE__ */ jsx(
370
+ SelectFieldListItem,
371
+ {
372
+ item,
373
+ index,
374
+ getItemProps,
375
+ selectionType,
376
+ checked: getCheckedState(item),
377
+ highlighted: highlightedIndex === index,
378
+ disabled: (disabled || item.disabled) ?? false
379
+ },
380
+ item.id
381
+ );
382
+ const renderSections = () => {
383
+ const result = [];
384
+ sections.forEach((section, sectionIndex) => {
385
+ const isLastSection = sectionIndex === sections.length - 1;
386
+ if (section.type === "pinned" || section.type === "group") {
387
+ const labelId = `${baseId}-section-${sectionIndex}`;
388
+ result.push(
389
+ /* @__PURE__ */ jsxs(
390
+ "li",
391
+ {
392
+ role: "group",
393
+ "aria-labelledby": labelId,
394
+ className: styles$3["pinned-section"],
395
+ children: [
396
+ /* @__PURE__ */ jsx("span", { id: labelId, className: styles$3["pinned-section-header"], children: /* @__PURE__ */ jsx(Text, { variant: "eyebrow", children: section.label }) }),
397
+ /* @__PURE__ */ jsx("ul", { className: styles$3["pinned-section-list"], children: section.items.map(({ item, index }) => renderItem(item, index)) })
398
+ ]
399
+ },
400
+ `section-${sectionIndex}`
401
+ )
402
+ );
403
+ if (!isLastSection) {
404
+ result.push(
405
+ /* @__PURE__ */ jsx(
406
+ "li",
407
+ {
408
+ role: "separator",
409
+ className: styles$3["divider"],
410
+ children: /* @__PURE__ */ jsx(Divider, {})
411
+ },
412
+ `divider-${sectionIndex}`
413
+ )
414
+ );
415
+ }
416
+ } else {
417
+ section.items.forEach(({ item, index }) => {
418
+ result.push(renderItem(item, index));
419
+ });
420
+ }
421
+ });
422
+ return result;
423
+ };
424
+ return /* @__PURE__ */ jsxs(
425
+ "div",
426
+ {
427
+ ...getMenuProps({
428
+ className: cx(styles$3["scroller"], className),
429
+ style
430
+ }),
431
+ children: [
432
+ /* @__PURE__ */ jsx("ul", { className: cx(styles$3["select-field-list"]), children: isOpen && /* @__PURE__ */ jsx(Fragment, { children: loading || anyPinnedLoading ? /* @__PURE__ */ jsx("li", { role: "presentation", className: styles$3["empty"], children: /* @__PURE__ */ jsx(Spinner, { size: "medium" }) }) : items.length > 0 ? renderSections() : /* @__PURE__ */ jsx("li", { role: "presentation", className: styles$3["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) }) }),
433
+ loadingMore ? /* @__PURE__ */ jsxs("div", { className: styles$3["load-more"], children: [
434
+ /* @__PURE__ */ jsx(Spinner, { size: "small" }),
435
+ /* @__PURE__ */ jsx(SrOnly, { children: "Loading more..." })
436
+ ] }) : hasMore && !loading ? /* @__PURE__ */ jsx(
437
+ InView,
438
+ {
439
+ onVisibilityChange: handleLoaderVisibilityChange,
440
+ rootMargin: "0px 0px -100px 0px",
441
+ children: /* @__PURE__ */ jsx("div", { className: styles$3["load-more"], children: /* @__PURE__ */ jsx(Button, { appearance: "secondary", size: "small", onClick: onLoadMore, children: "Load more" }) })
442
+ }
443
+ ) : null
444
+ ]
445
+ }
446
+ );
447
+ };
448
+ FieldListBase.displayName = "FieldListBase";
449
+
272
450
  const SelectFieldLabel = ({
273
451
  label,
274
452
  getLabelProps,
@@ -323,6 +501,191 @@ function useDebouncedCallback(callback, delay = 300) {
323
501
  return debouncedCallback;
324
502
  }
325
503
 
504
+ const DEFAULT_CACHE_SIZE = 15;
505
+ const STATIC_CACHE_KEY = "__static__";
506
+ function cacheSet(sectionCache, key, value, maxSize) {
507
+ if (sectionCache.has(key)) {
508
+ sectionCache.delete(key);
509
+ }
510
+ sectionCache.set(key, value);
511
+ while (sectionCache.size > maxSize) {
512
+ const oldest = sectionCache.keys().next().value;
513
+ if (oldest !== void 0) {
514
+ sectionCache.delete(oldest);
515
+ }
516
+ }
517
+ }
518
+ function usePinnedOptions(pinned, searchValue) {
519
+ const [dynamicResults, setDynamicResults] = useState({});
520
+ const [loadingSet, setLoadingSet] = useState(/* @__PURE__ */ new Set());
521
+ const latestSearchValueRef = useRef(searchValue);
522
+ latestSearchValueRef.current = searchValue;
523
+ const cacheRef = useRef(
524
+ /* @__PURE__ */ new Map()
525
+ );
526
+ const nonReactiveTriggeredRef = useRef(/* @__PURE__ */ new Set());
527
+ const sections = useMemo(() => {
528
+ if (!pinned) return [];
529
+ return Array.isArray(pinned) ? pinned : [pinned];
530
+ }, [pinned]);
531
+ const sectionConfig = useMemo(() => {
532
+ return sections.map((section) => {
533
+ const isDynamic = typeof section.options === "function";
534
+ return {
535
+ label: section.label,
536
+ isDynamic,
537
+ searchReactive: section.searchReactive ?? true,
538
+ cacheSize: section.cacheSize ?? DEFAULT_CACHE_SIZE,
539
+ staticOptions: isDynamic ? void 0 : section.options,
540
+ loader: isDynamic ? section.options : void 0
541
+ };
542
+ });
543
+ }, [sections]);
544
+ useEffect(() => {
545
+ cacheRef.current = /* @__PURE__ */ new Map();
546
+ nonReactiveTriggeredRef.current = /* @__PURE__ */ new Set();
547
+ }, [sectionConfig]);
548
+ const getSectionCache = useCallback(
549
+ (index) => {
550
+ let sectionCache = cacheRef.current.get(index);
551
+ if (!sectionCache) {
552
+ sectionCache = /* @__PURE__ */ new Map();
553
+ cacheRef.current.set(index, sectionCache);
554
+ }
555
+ return sectionCache;
556
+ },
557
+ []
558
+ );
559
+ const loadSection = useCallback(
560
+ (config, index, loaderArg) => {
561
+ const cacheKey = config.searchReactive ? loaderArg : STATIC_CACHE_KEY;
562
+ const handleResult = (options) => {
563
+ if (!config.searchReactive || latestSearchValueRef.current === loaderArg) {
564
+ const sectionCache = getSectionCache(index);
565
+ cacheSet(sectionCache, cacheKey, options, config.cacheSize);
566
+ setDynamicResults((prev) => ({ ...prev, [index]: options }));
567
+ setLoadingSet((prev) => {
568
+ const next = new Set(prev);
569
+ next.delete(index);
570
+ return next;
571
+ });
572
+ }
573
+ };
574
+ const handleError = (error) => {
575
+ console.error("Failed to load pinned options:", error);
576
+ if (!config.searchReactive || latestSearchValueRef.current === loaderArg) {
577
+ setDynamicResults((prev) => ({ ...prev, [index]: [] }));
578
+ setLoadingSet((prev) => {
579
+ const next = new Set(prev);
580
+ next.delete(index);
581
+ return next;
582
+ });
583
+ }
584
+ };
585
+ try {
586
+ Promise.resolve(config.loader(loaderArg)).then(handleResult).catch(handleError);
587
+ } catch (error) {
588
+ handleError(error);
589
+ }
590
+ },
591
+ [getSectionCache]
592
+ );
593
+ useEffect(() => {
594
+ const dynamicEntries = sectionConfig.map((config, index) => ({ config, index })).filter(({ config }) => config.isDynamic);
595
+ if (dynamicEntries.length === 0) return;
596
+ const toLoad = [];
597
+ const preResolved = {};
598
+ dynamicEntries.forEach(({ config, index }) => {
599
+ const sectionCache = getSectionCache(index);
600
+ if (config.searchReactive) {
601
+ const cached = sectionCache.get(searchValue);
602
+ if (cached) {
603
+ preResolved[index] = cached;
604
+ } else {
605
+ toLoad.push({ config, index });
606
+ }
607
+ } else {
608
+ const cached = sectionCache.get(STATIC_CACHE_KEY);
609
+ if (cached) {
610
+ preResolved[index] = cached;
611
+ } else if (!nonReactiveTriggeredRef.current.has(index)) {
612
+ nonReactiveTriggeredRef.current.add(index);
613
+ toLoad.push({ config, index });
614
+ }
615
+ }
616
+ });
617
+ if (toLoad.length === 0) {
618
+ setDynamicResults(preResolved);
619
+ setLoadingSet(/* @__PURE__ */ new Set());
620
+ return;
621
+ }
622
+ const loadingIndices = toLoad.map(({ index }) => index);
623
+ setDynamicResults(preResolved);
624
+ setLoadingSet(new Set(loadingIndices));
625
+ toLoad.forEach(({ config, index }) => {
626
+ const loaderArg = config.searchReactive ? searchValue : "";
627
+ loadSection(config, index, loaderArg);
628
+ });
629
+ }, [sectionConfig, searchValue, loadSection, getSectionCache]);
630
+ const pinnedSections = useMemo(() => {
631
+ return sectionConfig.map((config, index) => {
632
+ if (!config.isDynamic) {
633
+ return { label: config.label, options: config.staticOptions };
634
+ }
635
+ if (!loadingSet.has(index) && index in dynamicResults) {
636
+ return {
637
+ label: config.label,
638
+ options: dynamicResults[index]
639
+ };
640
+ }
641
+ return { label: config.label, options: [], loading: true };
642
+ });
643
+ }, [sectionConfig, dynamicResults, loadingSet]);
644
+ return { pinnedSections };
645
+ }
646
+
647
+ function useGroupedOptions(options, groupToString) {
648
+ return useMemo(() => {
649
+ const groupedItems = [];
650
+ const ungroupedItems = [];
651
+ const groupSections = [];
652
+ const groupMap = /* @__PURE__ */ new Map();
653
+ options.forEach((option) => {
654
+ if (option.group !== void 0) {
655
+ const groupValue = option.group;
656
+ if (!groupMap.has(groupValue)) {
657
+ const label = groupToString ? groupToString(groupValue) : String(groupValue);
658
+ groupMap.set(groupValue, { label, options: [] });
659
+ }
660
+ groupMap.get(groupValue).options.push(option);
661
+ groupedItems.push({
662
+ id: option.id,
663
+ type: "grouped-option",
664
+ original: option
665
+ });
666
+ } else {
667
+ ungroupedItems.push({
668
+ id: option.id,
669
+ type: "option",
670
+ original: option
671
+ });
672
+ }
673
+ });
674
+ groupMap.forEach(({ label, options: groupOptions }) => {
675
+ groupSections.push({ label, options: groupOptions });
676
+ });
677
+ return { groupedItems, ungroupedItems, groupSections };
678
+ }, [options, groupToString]);
679
+ }
680
+ function sortGroupSections(sections, groupSorter) {
681
+ return [...sections].sort((a, b) => {
682
+ const groupA = a.options[0]?.group;
683
+ const groupB = b.options[0]?.group;
684
+ if (groupA === void 0 || groupB === void 0) return 0;
685
+ return groupSorter(groupA, groupB);
686
+ });
687
+ }
688
+
326
689
  const styles$1 = {
327
690
  "field-popover": "_field-popover_aeggh_2"
328
691
  };
@@ -514,5 +877,5 @@ const FieldDialog = ({
514
877
  );
515
878
  };
516
879
 
517
- export { DEFAULT_PAGE_SIZE as D, FieldDialog as F, InView as I, SelectFieldListItem as S, useSelectFieldLoading as a, useDebouncedCallback as b, SelectFieldLabel as c, FieldPopover as d, styles$3 as s, useAdaptiveView as u };
518
- //# sourceMappingURL=FieldDialog-NcMR2ATl.js.map
880
+ export { DEFAULT_PAGE_SIZE as D, FieldListBase as F, SelectFieldLabel as S, usePinnedOptions as a, useGroupedOptions as b, useSelectFieldLoading as c, useDebouncedCallback as d, FieldDialog as e, FieldPopover as f, sortGroupSections as s, useAdaptiveView as u };
881
+ //# sourceMappingURL=FieldDialog-Be54L3E-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldDialog-Be54L3E-.js","sources":["../src/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.ts","../src/beta/components/SelectField/internal/SelectFieldListItem.tsx","../src/beta/components/SelectField/internal/InView.tsx","../src/beta/components/SelectField/internal/FieldListBase.tsx","../src/beta/components/SelectField/internal/SelectFieldLabel.tsx","../src/internal/hooks/useDebouncedCallback/useDebouncedCallback.ts","../src/beta/components/SelectField/internal/usePinnedOptions.ts","../src/beta/components/SelectField/internal/useGroupedOptions.ts","../src/beta/components/SelectField/internal/FieldPopover/FieldPopover.tsx","../src/beta/hooks/useAdaptiveView/useAdaptiveView.tsx","../src/beta/components/SelectField/internal/FieldDialog/FieldDialog.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n SelectFieldOption,\n SelectFieldPageLazyResult,\n SelectFieldOffsetLazyResult,\n SelectFieldGroupLazyResult,\n SelectFieldPropsLazyPage,\n SelectFieldPropsLazyOffset,\n SelectFieldPropsLazyGroup,\n SelectFieldPropsEager,\n} from \"../../../beta/components/SelectField/types\";\n\nexport const DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_CACHE_MAX_SIZE = 15;\n\n/**\n * Configuration for caching search results in useSelectFieldLoading.\n * When enabled, the full accumulated state (options, pagination cursor, hasMore)\n * is cached per search value, allowing instant restoration when returning to\n * a previous search.\n */\nexport type CacheConfig = {\n /**\n * Whether caching is enabled. Defaults to true.\n */\n enabled?: boolean;\n /**\n * Maximum number of search values to cache before clearing.\n * Defaults to 15.\n */\n maxSize?: number;\n};\n\n/**\n * The full state cached per search value, including accumulated options,\n * pagination cursor, and hasMore flag.\n */\ntype CachedSearchState = {\n options: SelectFieldOption[];\n hasMore: boolean;\n previousPage: number;\n previousOffset: number;\n previousGroup: string | number | null;\n};\n\ntype UseSelectFieldLoadingConfigLazyPage = Pick<\n SelectFieldPropsLazyPage,\n \"lazy\" | \"loadOptions\"\n> & {\n pageSize: number;\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigLazyOffset = Pick<\n SelectFieldPropsLazyOffset,\n \"lazy\" | \"loadOptions\"\n> & {\n limit: number;\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigLazyGroup = Pick<\n SelectFieldPropsLazyGroup,\n \"lazy\" | \"loadOptions\"\n> & {\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigEager = Pick<\n SelectFieldPropsEager,\n \"lazy\" | \"loadOptions\"\n> & {\n cache?: CacheConfig;\n};\n\nexport type UseSelectFieldLoadingConfig =\n | UseSelectFieldLoadingConfigLazyPage\n | UseSelectFieldLoadingConfigLazyOffset\n | UseSelectFieldLoadingConfigLazyGroup\n | UseSelectFieldLoadingConfigEager;\n\nexport type UseSelectFieldLoadingReturn = {\n /**\n * Current loaded options array\n */\n options: SelectFieldOption[];\n /**\n * Boolean indicating initial load in progress\n */\n loading: boolean;\n /**\n * Boolean indicating load more in progress\n */\n loadingMore: boolean;\n /**\n * Boolean indicating if more options are available\n */\n hasMore: boolean;\n /**\n * Function to load options. When initial is true, replaces options and sets loading state.\n * When initial is false or undefined, appends options and sets loadingMore state.\n * @param searchValue - The search value to load options for\n * @param options - Optional configuration\n * @param options.initial - Whether this is an initial load (replaces options) or continuation (appends options)\n */\n loadOptions: (\n searchValue: string,\n options?: { initial?: boolean },\n ) => Promise<void>;\n /**\n * Function to load more options (for pagination). Appends to existing options.\n * @param searchValue - The search value to load more options for\n */\n loadMore: (searchValue: string) => Promise<void>;\n /**\n * Function to reset all state to initial values\n */\n reset: () => void;\n /**\n * Function to clear the search results cache\n */\n clearCache: () => void;\n};\n\n/**\n * Custom hook for managing SelectField option loading state and logic.\n *\n * Features:\n * - Manages option loading state (loading, loadingMore, hasMore)\n * - Supports eager loading and three lazy loading modes (page, offset, group)\n * - Handles pagination state tracking for lazy loading\n * - Provides methods to load options (initial or continuation) and load more\n * - Automatically manages option replacement vs appending based on load type\n * - Tracks pagination state (page, offset, group) for lazy loading modes\n * - Provides reset functionality to clear all state\n *\n * @param config - Configuration object containing lazy mode, loadOptions function, and pagination settings\n * @returns Object containing options, loading states, and load functions\n *\n * @example\n * const { options, loading, loadingMore, hasMore, loadOptions, loadMore } = useSelectFieldLoading({\n * lazy: \"page\",\n * loadOptions: async (searchValue, page, pageSize) => {\n * const result = await fetchOptions(searchValue, page, pageSize);\n * return { options: result.items, hasMore: result.hasMore };\n * },\n * pageSize: 10\n * });\n */\nexport function useSelectFieldLoading(\n config: UseSelectFieldLoadingConfig,\n): UseSelectFieldLoadingReturn {\n const { lazy, loadOptions: loadOptionsProp, cache: cacheConfig } = config;\n\n // Cache configuration\n const cacheEnabled = cacheConfig?.enabled !== false;\n const cacheMaxSize = cacheConfig?.maxSize ?? DEFAULT_CACHE_MAX_SIZE;\n\n const [options, setOptions] = useState<SelectFieldOption[]>([]);\n const [hasMoreToLoad, setHasMoreToLoad] = useState(false);\n const [previousGroup, setPreviousGroup] = useState<string | number | null>(\n null,\n );\n const [previousPage, setPreviousPage] = useState<number>(0);\n const [previousOffset, setPreviousOffset] = useState<number>(0);\n const [loading, setLoading] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n\n // Cache state: stores full accumulated state per search value\n const [stateCache, setStateCache] = useState<Map<string, CachedSearchState>>(\n () => new Map(),\n );\n // Track the current search value to know which cache entry to update on loadMore\n const currentSearchValueRef = useRef<string>(\"\");\n // Track whether loadOptions has completed at least once, to distinguish\n // the initial empty state from an API response that returned zero results.\n const hasCompletedLoadRef = useRef(false);\n\n const appendOptions = useCallback((newOptions: SelectFieldOption[]) => {\n setOptions((prevOptions) => prevOptions.concat(newOptions));\n }, []);\n\n const pageSize =\n lazy === \"page\"\n ? (config as UseSelectFieldLoadingConfigLazyPage).pageSize\n : DEFAULT_PAGE_SIZE;\n const limit =\n lazy === \"offset\"\n ? (config as UseSelectFieldLoadingConfigLazyOffset).limit\n : DEFAULT_PAGE_SIZE;\n\n // Helper to restore state from cache\n const restoreFromCache = useCallback((cached: CachedSearchState) => {\n setOptions(cached.options);\n setHasMoreToLoad(cached.hasMore);\n setPreviousPage(cached.previousPage);\n setPreviousOffset(cached.previousOffset);\n setPreviousGroup(cached.previousGroup);\n }, []);\n\n // Sync current state to cache whenever options or pagination state changes.\n // This effect runs after React has batched all state updates from loadOptions/loadMore,\n // ensuring we cache the complete, up-to-date state.\n useEffect(() => {\n if (!cacheEnabled) return;\n const searchValue = currentSearchValueRef.current;\n // Don't cache the initial empty state before any load has completed\n if (!hasCompletedLoadRef.current) return;\n\n setStateCache((prev) => {\n // Clear cache if we've reached max size\n if (prev.size >= cacheMaxSize) {\n prev.clear();\n }\n\n prev.set(searchValue, {\n options,\n hasMore: hasMoreToLoad,\n previousPage,\n previousOffset,\n previousGroup,\n });\n return new Map(prev);\n });\n }, [\n cacheEnabled,\n cacheMaxSize,\n options,\n hasMoreToLoad,\n previousPage,\n previousOffset,\n previousGroup,\n ]);\n\n const loadOptions = useCallback(\n async (\n searchValue: string,\n options?: { initial?: boolean },\n ): Promise<void> => {\n const isInitial = !!options?.initial;\n\n // On initial load, check cache first\n if (isInitial && cacheEnabled) {\n const cached = stateCache.get(searchValue);\n if (cached) {\n // Restore full state from cache - no API call needed\n currentSearchValueRef.current = searchValue;\n restoreFromCache(cached);\n return;\n }\n }\n\n // Track current search value for cache updates on loadMore\n if (isInitial) {\n currentSearchValueRef.current = searchValue;\n }\n\n (isInitial ? setLoading : setLoadingMore)(true);\n\n try {\n if (!lazy) {\n const result = await loadOptionsProp(searchValue);\n const resolved = Array.isArray(result) ? result : await result;\n (isInitial ? setOptions : appendOptions)(resolved);\n } else {\n let result:\n | SelectFieldPageLazyResult\n | SelectFieldOffsetLazyResult\n | SelectFieldGroupLazyResult;\n\n if (lazy === \"page\") {\n const page = isInitial ? 0 : previousPage;\n result = await loadOptionsProp(searchValue, page, pageSize);\n setPreviousPage(isInitial ? 1 : page + 1);\n } else if (lazy === \"offset\") {\n const offset = isInitial ? 0 : previousOffset;\n result = await loadOptionsProp(searchValue, offset, limit);\n setPreviousOffset(isInitial ? limit : offset + limit);\n } else if (lazy === \"group\") {\n const group = isInitial ? null : previousGroup;\n result = await loadOptionsProp(searchValue, group);\n setPreviousGroup(\n result.options[result.options.length - 1]?.group ?? null,\n );\n } else {\n throw new Error(\n `Invalid lazy mode: ${lazy}. Expected 'page', 'offset', or 'group'.`,\n );\n }\n\n setHasMoreToLoad(result.hasMore ?? false);\n (isInitial ? setOptions : appendOptions)(result.options);\n }\n hasCompletedLoadRef.current = true;\n } finally {\n (isInitial ? setLoading : setLoadingMore)(false);\n }\n },\n [\n lazy,\n pageSize,\n limit,\n loadOptionsProp,\n appendOptions,\n previousPage,\n previousOffset,\n previousGroup,\n cacheEnabled,\n stateCache,\n restoreFromCache,\n ],\n );\n\n const loadMore = useCallback(\n async (searchValue: string): Promise<void> => {\n await loadOptions(searchValue, { initial: false });\n },\n [loadOptions],\n );\n\n const reset = useCallback(() => {\n setOptions([]);\n setHasMoreToLoad(false);\n setPreviousGroup(null);\n setPreviousPage(0);\n setPreviousOffset(0);\n setLoading(false);\n setLoadingMore(false);\n }, []);\n\n const clearCache = useCallback(() => {\n setStateCache(new Map());\n }, []);\n\n return {\n options,\n loading,\n loadingMore,\n hasMore: hasMoreToLoad,\n loadOptions,\n loadMore,\n reset,\n clearCache,\n };\n}\n","import { UseComboboxPropGetters } from \"downshift\";\nimport { Flex } from \"../../../../components/Flex\";\nimport { SelectFieldDownshiftItem } from \"../types\";\nimport Icon from \"../../../../components/Icon\";\nimport styles from \"./SelectFieldListItem.module.scss\";\nimport CheckboxOutline from \"@servicetitan/hammer-icon/mdi/round/check_box_outline_blank.svg\";\nimport CheckboxChecked from \"@servicetitan/hammer-icon/mdi/round/check_box.svg\";\nimport CheckboxIndeterminate from \"@servicetitan/hammer-icon/mdi/round/indeterminate_check_box.svg\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport cx from \"classnames\";\nimport { useMemo } from \"react\";\nimport Text from \"../../../../components/Text\";\nimport { CheckState } from \"../../../../types\";\nimport Spinner from \"../../../../components/Spinner\";\n\ntype GetItemProps =\n UseComboboxPropGetters<SelectFieldDownshiftItem>[\"getItemProps\"];\n\nexport type SelectFieldListItemProps = {\n item: SelectFieldDownshiftItem;\n index: number;\n highlighted: boolean;\n disabled: boolean;\n getItemProps: GetItemProps;\n selectionType: \"single\" | \"multiple\";\n checked: CheckState;\n};\n\nexport const SelectFieldListItem = ({\n item,\n index,\n highlighted,\n disabled,\n getItemProps,\n selectionType,\n checked,\n}: SelectFieldListItemProps) => {\n const checkbox = useMemo(() => {\n if (checked === \"checked\")\n return { icon: CheckboxChecked, class: styles[\"checked\"] };\n if (checked === \"unchecked\")\n return { icon: CheckboxOutline, class: styles[\"unchecked\"] };\n if (checked === \"indeterminate\")\n return { icon: CheckboxIndeterminate, class: styles[\"indeterminate\"] };\n return { icon: CheckboxOutline, class: styles[\"unchecked\"] };\n }, [checked]);\n\n return (\n <li\n key={item.id}\n {...getItemProps({\n item,\n index,\n className: cx(styles[\"select-field-list-item\"], {\n [styles.highlighted]: highlighted,\n [styles.selected]: checked === \"checked\",\n [styles.disabled]: disabled,\n [styles.single]: selectionType === \"single\",\n [styles.multiple]: selectionType === \"multiple\",\n }),\n })}\n >\n {selectionType === \"multiple\" && (\n <div>\n {checked === \"loading\" ? (\n <Spinner size=\"medium\" />\n ) : (\n <Icon\n size=\"large\"\n svg={checkbox.icon}\n className={cx(styles[\"checkbox\"], checkbox.class)}\n />\n )}\n </div>\n )}\n <Flex grow={1} shrink={1} direction=\"column\" gap=\"1\">\n <Text size=\"medium\">\n {item.original.content?.title ?? item.original.label}\n </Text>\n {item.original.content?.description && (\n <Text size=\"small\">{item.original.content?.description}</Text>\n )}\n </Flex>\n {selectionType === \"single\" && checked === \"checked\" && (\n <Icon\n size=\"medium\"\n svg={Check}\n className={cx(styles[\"checkbox\"], styles[\"checked\"])}\n />\n )}\n </li>\n );\n};\n","import { ReactNode } from \"react\";\nimport { useIntersectionObserver } from \"../../../../internal/hooks\";\n\n/**\n * Props for the InView component\n * @property {ReactNode} children - The content to render inside the visibility-tracked container\n * @property {(isVisible: boolean) => void} [onVisibilityChange] - Callback fired when visibility changes\n */\ntype InViewProps = {\n /**\n * The content to render inside the visibility-tracked container\n */\n children?: ReactNode;\n /**\n * Callback fired when the element's visibility in the viewport changes\n */\n onVisibilityChange?: (isVisible: boolean) => void;\n /**\n * The root margin for the intersection observer\n */\n rootMargin?: string;\n};\n\n/**\n * Internal component that detects when its content is visible in the viewport.\n *\n * Features:\n * - Uses Intersection Observer API for efficient visibility detection\n * - Fires callback when visibility state changes\n * - Handles browser compatibility gracefully\n * - Automatically cleans up observer on unmount\n *\n * @param props - Component props\n * @returns Wrapped children with visibility detection\n */\nexport const InView = ({\n children,\n onVisibilityChange,\n rootMargin,\n}: InViewProps) => {\n const { ref } = useIntersectionObserver({\n onChange: (isIntersecting) => {\n onVisibilityChange?.(isIntersecting);\n },\n rootMargin,\n });\n\n return <div ref={ref}>{children}</div>;\n};\n","import { UseComboboxPropGetters } from \"downshift\";\nimport { SelectFieldDownshiftItem } from \"../types\";\nimport Spinner from \"../../../../components/Spinner\";\nimport Button from \"../../../../components/Button\";\nimport styles from \"./SelectFieldList.module.scss\";\nimport cx from \"classnames\";\nimport { CSSProperties, ReactNode, useId, useMemo } from \"react\";\nimport { SelectFieldListItem } from \"./SelectFieldListItem\";\nimport { InView } from \"./InView\";\nimport { Text } from \"../../../../components/Text\";\nimport { SrOnly } from \"../../../../components\";\nimport Divider from \"../../../../components/Divider\";\nimport { CheckState } from \"../../../../types\";\nimport { SectionMeta } from \"./types\";\n\ntype PinnedSection = {\n type: \"pinned\";\n label: string;\n items: { item: SelectFieldDownshiftItem; index: number }[];\n loading?: boolean;\n};\n\ntype GroupSection = {\n type: \"group\";\n label: string;\n items: { item: SelectFieldDownshiftItem; index: number }[];\n};\n\ntype FlatSection = {\n type: \"flat\";\n items: { item: SelectFieldDownshiftItem; index: number }[];\n};\n\ntype Section = PinnedSection | GroupSection | FlatSection;\n\nexport type FieldListBaseProps = {\n isOpen: boolean;\n items: SelectFieldDownshiftItem[];\n getMenuProps: UseComboboxPropGetters<SelectFieldDownshiftItem>[\"getMenuProps\"];\n getItemProps: UseComboboxPropGetters<SelectFieldDownshiftItem>[\"getItemProps\"];\n highlightedIndex: number;\n getCheckedState: (item: SelectFieldDownshiftItem) => CheckState;\n selectionType: \"single\" | \"multiple\";\n hasMore: boolean;\n onLoadMore: () => void;\n loading: boolean;\n loadingMore: boolean;\n disableAutoLoadMore?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n sectionsMeta?: SectionMeta[];\n};\n\nexport const FieldListBase = ({\n isOpen,\n items,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n getCheckedState,\n selectionType,\n hasMore,\n onLoadMore,\n loading,\n loadingMore,\n disableAutoLoadMore,\n disabled,\n className,\n style,\n sectionsMeta = [],\n}: FieldListBaseProps) => {\n const baseId = useId();\n\n // Check if any pinned section is still loading its options.\n // If so, show the main list loading indicator to avoid layout shift.\n const anyPinnedLoading = sectionsMeta.some(\n (s) => s.type === \"pinned\" && s.loading,\n );\n\n const handleLoaderVisibilityChange = (visible: boolean) => {\n if (visible && !disableAutoLoadMore) {\n onLoadMore();\n }\n };\n\n // Group items into sections for proper semantic structure\n const sections = useMemo((): Section[] => {\n if (sectionsMeta.length === 0) {\n // No sections - all items are flat\n return [\n {\n type: \"flat\",\n items: items.map((item, index) => ({ item, index })),\n },\n ];\n }\n\n const result: Section[] = [];\n\n // Find the minimum start index of all sections (items before this are flat, e.g. select-all)\n const firstSectionStartIndex = Math.min(\n ...sectionsMeta.map((s) => s.startIndex),\n );\n\n // Add flat items before first section (e.g., select-all)\n if (firstSectionStartIndex > 0) {\n const flatItems: {\n item: SelectFieldDownshiftItem;\n index: number;\n }[] = [];\n for (let i = 0; i < firstSectionStartIndex; i++) {\n if (items[i]) {\n flatItems.push({ item: items[i], index: i });\n }\n }\n if (flatItems.length > 0) {\n result.push({ type: \"flat\", items: flatItems });\n }\n }\n\n // Add sections (pinned or group)\n sectionsMeta.forEach((meta) => {\n const sectionItems: {\n item: SelectFieldDownshiftItem;\n index: number;\n }[] = [];\n for (let i = meta.startIndex; i < meta.endIndex; i++) {\n if (items[i]) {\n sectionItems.push({ item: items[i], index: i });\n }\n }\n if (meta.type === \"pinned\") {\n // Always show pinned sections while loading (even with 0 items)\n if (sectionItems.length > 0 || meta.loading) {\n result.push({\n type: \"pinned\",\n label: meta.label,\n items: sectionItems,\n loading: meta.loading,\n });\n }\n } else if (sectionItems.length > 0) {\n result.push({\n type: \"group\",\n label: meta.label,\n items: sectionItems,\n });\n }\n });\n\n // Find where sectioned items end\n const lastSectionIndex =\n sectionsMeta.length > 0\n ? Math.max(...sectionsMeta.map((s) => s.endIndex))\n : 0;\n\n // Add flat items (non-sectioned) after all sections\n if (lastSectionIndex < items.length) {\n const flatItems: {\n item: SelectFieldDownshiftItem;\n index: number;\n }[] = [];\n for (let i = lastSectionIndex; i < items.length; i++) {\n flatItems.push({ item: items[i], index: i });\n }\n if (flatItems.length > 0) {\n result.push({ type: \"flat\", items: flatItems });\n }\n }\n\n return result;\n }, [items, sectionsMeta]);\n\n const renderItem = (\n item: SelectFieldDownshiftItem,\n index: number,\n ): ReactNode => (\n <SelectFieldListItem\n key={item.id}\n item={item}\n index={index}\n getItemProps={getItemProps}\n selectionType={selectionType}\n checked={getCheckedState(item)}\n highlighted={highlightedIndex === index}\n disabled={(disabled || item.disabled) ?? false}\n />\n );\n\n const renderSections = (): ReactNode[] => {\n const result: ReactNode[] = [];\n\n sections.forEach((section, sectionIndex) => {\n const isLastSection = sectionIndex === sections.length - 1;\n\n if (section.type === \"pinned\" || section.type === \"group\") {\n const labelId = `${baseId}-section-${sectionIndex}`;\n\n result.push(\n <li\n key={`section-${sectionIndex}`}\n role=\"group\"\n aria-labelledby={labelId}\n className={styles[\"pinned-section\"]}\n >\n <span id={labelId} className={styles[\"pinned-section-header\"]}>\n <Text variant=\"eyebrow\">{section.label}</Text>\n </span>\n <ul className={styles[\"pinned-section-list\"]}>\n {section.items.map(({ item, index }) => renderItem(item, index))}\n </ul>\n </li>,\n );\n if (!isLastSection) {\n result.push(\n <li\n key={`divider-${sectionIndex}`}\n role=\"separator\"\n className={styles[\"divider\"]}\n >\n <Divider />\n </li>,\n );\n }\n } else {\n // Flat items - render directly\n section.items.forEach(({ item, index }) => {\n result.push(renderItem(item, index));\n });\n }\n });\n\n return result;\n };\n\n return (\n <div\n {...getMenuProps({\n className: cx(styles[\"scroller\"], className),\n style,\n })}\n >\n <ul className={cx(styles[\"select-field-list\"])}>\n {isOpen && (\n <>\n {loading || anyPinnedLoading ? (\n <li role=\"presentation\" className={styles[\"empty\"]}>\n <Spinner size=\"medium\" />\n </li>\n ) : items.length > 0 ? (\n renderSections()\n ) : (\n <li role=\"presentation\" className={styles[\"empty\"]}>\n <Text subdued size=\"small\">\n No match found\n </Text>\n </li>\n )}\n </>\n )}\n </ul>\n {loadingMore ? (\n <div className={styles[\"load-more\"]}>\n <Spinner size=\"small\" />\n <SrOnly>Loading more...</SrOnly>\n </div>\n ) : hasMore && !loading ? (\n <InView\n onVisibilityChange={handleLoaderVisibilityChange}\n rootMargin=\"0px 0px -100px 0px\"\n >\n <div className={styles[\"load-more\"]}>\n <Button appearance=\"secondary\" size=\"small\" onClick={onLoadMore}>\n Load more\n </Button>\n </div>\n </InView>\n ) : null}\n </div>\n );\n};\n\nFieldListBase.displayName = \"FieldListBase\";\n","import { ReactNode } from \"react\";\nimport { UseComboboxPropGetters } from \"downshift\";\nimport { SelectFieldDownshiftItem } from \"../types\";\nimport { FieldLabel } from \"../../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../../components/SrOnly\";\n\ntype GetLabelProps =\n UseComboboxPropGetters<SelectFieldDownshiftItem>[\"getLabelProps\"];\n\n/**\n * Props for the SelectFieldLabel component\n * @property {string} label - The text content to display as the label\n * @property {GetLabelProps} getLabelProps - Downshift getter function that returns accessibility props for the label\n * @property {boolean} [required] - Whether the field is required. Shows a red asterisk (*) when true.\n * @property {ReactNode} [moreInfo] - Additional information to display in a tooltip\n * @property {boolean} [moreInfoOpen] - Controls the open state of the more info tooltip\n * @property {boolean} [hideLabel] - Visually hides the label while keeping it accessible to screen readers\n * @property {ReactNode} [labelNode] - Custom ReactNode to render as the label, overriding the default label text\n */\nexport type SelectFieldLabelProps = {\n label: string;\n getLabelProps: GetLabelProps;\n hideLabel?: boolean;\n labelNode?: ReactNode;\n moreInfo?: ReactNode;\n moreInfoOpen?: boolean;\n required?: boolean;\n};\n\n/**\n * Internal label component for the SelectField that renders an accessible label element.\n *\n * Features:\n * - Renders a FieldLabel with proper accessibility attributes from Downshift\n * - Automatically associates the label with the combobox input\n * - Supports screen readers with proper labeling\n * - Optional required field indicator with red asterisk\n * - Help tooltip with info icon for additional context\n * - Can visually hide the label while maintaining accessibility\n * - Supports custom label content via labelNode\n *\n * @example\n * <SelectFieldLabel\n * label=\"Select an option\"\n * getLabelProps={getLabelProps}\n * required\n * moreInfo=\"Choose from available options\"\n * />\n */\nexport const SelectFieldLabel = ({\n label,\n getLabelProps,\n hideLabel = false,\n labelNode,\n moreInfo,\n moreInfoOpen,\n required,\n}: SelectFieldLabelProps) => {\n const labelContent = (\n <FieldLabel\n {...getLabelProps()}\n required={required}\n moreInfo={moreInfo}\n moreInfoOpen={moreInfoOpen}\n >\n {labelNode ?? label}\n </FieldLabel>\n );\n\n if (hideLabel) {\n return <SrOnly>{labelContent}</SrOnly>;\n }\n\n return labelContent;\n};\n","import { useRef, useEffect, useCallback } from \"react\";\n\n/**\n * Custom hook for creating a debounced version of a callback function.\n *\n * Features:\n * - Delays callback execution until after a specified delay period\n * - Cancels previous pending calls when a new one is made\n * - Maintains stable function reference (only changes when delay changes)\n * - Always uses the latest callback via ref (avoids stale closures)\n * - Properly cleans up timeouts on unmount and delay changes\n * - Supports async callbacks\n * - Type-safe with generics\n *\n * @param callback - The function to debounce\n * @param delay - Delay in milliseconds before executing the callback\n * @returns Debounced version of the callback with the same signature\n *\n * @example\n * const debouncedSearch = useDebouncedCallback(\n * (searchTerm: string) => {\n * performSearch(searchTerm);\n * },\n * 300\n * );\n *\n * // Later in event handler:\n * debouncedSearch(inputValue);\n */\n//eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebouncedCallback<T extends (...args: any[]) => any>(\n callback: T,\n delay: number = 300,\n): T {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const callbackRef = useRef(callback);\n\n // Update callback ref when it changes to always use the latest version\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n // Cleanup timeout on unmount and when delay changes\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, [delay]);\n\n const debouncedCallback = useCallback(\n ((...args: Parameters<T>) => {\n // Cancel any pending call\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Schedule new call\n timeoutRef.current = setTimeout(() => {\n callbackRef.current(...args);\n timeoutRef.current = null;\n }, delay);\n }) as T,\n [delay],\n );\n\n return debouncedCallback;\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n SelectFieldOption,\n SelectFieldPinnedOptions,\n SelectFieldPinnedOptionsSection,\n} from \"../types\";\n\nconst DEFAULT_CACHE_SIZE = 15;\nconst STATIC_CACHE_KEY = \"__static__\";\n\n/**\n * Normalized pinned section structure used internally.\n * @property label - Section label (e.g., \"Recent\", \"Favorites\")\n * @property options - The pinned options for this section\n * @property loading - Whether this section is still loading its options\n */\nexport type NormalizedPinnedSection = {\n label: string;\n options: SelectFieldOption[];\n loading?: boolean;\n};\n\ntype UsePinnedOptionsResult = {\n pinnedSections: NormalizedPinnedSection[];\n};\n\ntype SectionConfig = {\n label: string;\n isDynamic: boolean;\n searchReactive: boolean;\n cacheSize: number;\n staticOptions: SelectFieldOption[] | undefined;\n loader:\n | ((sv: string) => SelectFieldOption[] | Promise<SelectFieldOption[]>)\n | undefined;\n};\n\n/**\n * Insert into a section's cache with max-size eviction.\n * Evicts the oldest entry (first key in Map) when the limit is exceeded.\n */\nfunction cacheSet(\n sectionCache: Map<string, SelectFieldOption[]>,\n key: string,\n value: SelectFieldOption[],\n maxSize: number,\n): void {\n // If this key already exists, delete it first so it moves to the end (most recent)\n if (sectionCache.has(key)) {\n sectionCache.delete(key);\n }\n sectionCache.set(key, value);\n // Evict oldest entries if over max size\n while (sectionCache.size > maxSize) {\n const oldest = sectionCache.keys().next().value;\n if (oldest !== undefined) {\n sectionCache.delete(oldest);\n }\n }\n}\n\n/**\n * Hook that normalizes and loads pinned options from various input formats.\n *\n * Handles:\n * - Labeled pinned options object\n * - Array of labeled pinned options objects\n *\n * Dynamic sections appear immediately with `loading: true` and empty options,\n * then transition to their resolved options once loaded. Results are cached\n * per section per search value so revisiting a previous search term is instant.\n *\n * Per-section configuration:\n * - `searchReactive` (default true): when false, loader is called once and the\n * result is reused for all search values.\n * - `cacheSize` (default 15): max number of search results cached per section.\n *\n * @param pinned - The pinned options configuration from props\n * @param searchValue - Current search input value\n * @returns Normalized pinned sections with per-section loading state\n */\nexport function usePinnedOptions(\n pinned: SelectFieldPinnedOptions | undefined,\n searchValue: string,\n): UsePinnedOptionsResult {\n const [dynamicResults, setDynamicResults] = useState<\n Record<number, SelectFieldOption[]>\n >({});\n const [loadingSet, setLoadingSet] = useState<Set<number>>(new Set());\n\n // Track the latest search value to avoid race conditions\n const latestSearchValueRef = useRef(searchValue);\n latestSearchValueRef.current = searchValue;\n\n // Per-section cache: sectionIndex -> Map<searchValue, options>\n const cacheRef = useRef<Map<number, Map<string, SelectFieldOption[]>>>(\n new Map(),\n );\n\n // Track non-reactive sections that have already been triggered to prevent\n // duplicate loader calls when search value changes during initial load\n const nonReactiveTriggeredRef = useRef<Set<number>>(new Set());\n\n // Normalize into an array of labeled sections\n const sections = useMemo((): SelectFieldPinnedOptionsSection[] => {\n if (!pinned) return [];\n return Array.isArray(pinned) ? pinned : [pinned];\n }, [pinned]);\n\n // Classify each section as static or dynamic, with per-section config\n const sectionConfig = useMemo((): SectionConfig[] => {\n return sections.map((section) => {\n const isDynamic = typeof section.options === \"function\";\n return {\n label: section.label,\n isDynamic,\n searchReactive: section.searchReactive ?? true,\n cacheSize: section.cacheSize ?? DEFAULT_CACHE_SIZE,\n staticOptions: isDynamic\n ? undefined\n : (section.options as SelectFieldOption[]),\n loader: isDynamic\n ? (section.options as (\n sv: string,\n ) => SelectFieldOption[] | Promise<SelectFieldOption[]>)\n : undefined,\n };\n });\n }, [sections]);\n\n // Clear cache and non-reactive tracking when section config changes.\n // Runs before the loader effect (declared first) so stale entries are\n // purged before any new loads read from the cache.\n useEffect(() => {\n cacheRef.current = new Map();\n nonReactiveTriggeredRef.current = new Set();\n }, [sectionConfig]);\n\n // Get or create a section's cache map\n const getSectionCache = useCallback(\n (index: number): Map<string, SelectFieldOption[]> => {\n let sectionCache = cacheRef.current.get(index);\n if (!sectionCache) {\n sectionCache = new Map();\n cacheRef.current.set(index, sectionCache);\n }\n return sectionCache;\n },\n [],\n );\n\n // Load a single dynamic section, updating state and cache on completion\n const loadSection = useCallback(\n (config: SectionConfig, index: number, loaderArg: string) => {\n const cacheKey = config.searchReactive ? loaderArg : STATIC_CACHE_KEY;\n\n const handleResult = (options: SelectFieldOption[]) => {\n // Non-reactive sections: always apply (no race condition, loaded once).\n // Reactive sections: only apply if this is still the latest search.\n if (\n !config.searchReactive ||\n latestSearchValueRef.current === loaderArg\n ) {\n const sectionCache = getSectionCache(index);\n cacheSet(sectionCache, cacheKey, options, config.cacheSize);\n setDynamicResults((prev) => ({ ...prev, [index]: options }));\n setLoadingSet((prev) => {\n const next = new Set(prev);\n next.delete(index);\n return next;\n });\n }\n };\n\n const handleError = (error: unknown) => {\n console.error(\"Failed to load pinned options:\", error);\n if (\n !config.searchReactive ||\n latestSearchValueRef.current === loaderArg\n ) {\n setDynamicResults((prev) => ({ ...prev, [index]: [] }));\n setLoadingSet((prev) => {\n const next = new Set(prev);\n next.delete(index);\n return next;\n });\n }\n };\n\n try {\n Promise.resolve(config.loader!(loaderArg))\n .then(handleResult)\n .catch(handleError);\n } catch (error) {\n handleError(error);\n }\n },\n [getSectionCache],\n );\n\n // Load dynamic options when searchValue or config changes\n useEffect(() => {\n const dynamicEntries = sectionConfig\n .map((config, index) => ({ config, index }))\n .filter(({ config }) => config.isDynamic);\n\n if (dynamicEntries.length === 0) return;\n\n const toLoad: { config: SectionConfig; index: number }[] = [];\n const preResolved: Record<number, SelectFieldOption[]> = {};\n\n dynamicEntries.forEach(({ config, index }) => {\n const sectionCache = getSectionCache(index);\n\n if (config.searchReactive) {\n // Reactive section: check cache for this specific search value\n const cached = sectionCache.get(searchValue);\n if (cached) {\n preResolved[index] = cached;\n } else {\n toLoad.push({ config, index });\n }\n } else {\n // Non-reactive section: use static cache entry, load at most once\n const cached = sectionCache.get(STATIC_CACHE_KEY);\n if (cached) {\n preResolved[index] = cached;\n } else if (!nonReactiveTriggeredRef.current.has(index)) {\n nonReactiveTriggeredRef.current.add(index);\n toLoad.push({ config, index });\n }\n // else: already triggered, still loading - shows as loading via fallthrough\n }\n });\n\n // If everything is cached, just set results immediately\n if (toLoad.length === 0) {\n setDynamicResults(preResolved);\n setLoadingSet(new Set());\n return;\n }\n\n // Set pre-resolved results and mark only uncached sections as loading\n const loadingIndices = toLoad.map(({ index }) => index);\n setDynamicResults(preResolved);\n setLoadingSet(new Set(loadingIndices));\n\n // Load each uncached dynamic section\n toLoad.forEach(({ config, index }) => {\n // Non-reactive sections always pass \"\" to the loader\n const loaderArg = config.searchReactive ? searchValue : \"\";\n loadSection(config, index, loaderArg);\n });\n }, [sectionConfig, searchValue, loadSection, getSectionCache]);\n\n // Build the final sections array with per-section loading state\n const pinnedSections = useMemo((): NormalizedPinnedSection[] => {\n return sectionConfig.map((config, index) => {\n if (!config.isDynamic) {\n return { label: config.label, options: config.staticOptions! };\n }\n // Dynamic section: show resolved results if available and not loading\n if (!loadingSet.has(index) && index in dynamicResults) {\n return {\n label: config.label,\n options: dynamicResults[index],\n };\n }\n // Otherwise it's still loading (or hasn't started yet)\n return { label: config.label, options: [], loading: true };\n });\n }, [sectionConfig, dynamicResults, loadingSet]);\n\n return { pinnedSections };\n}\n","import { useMemo } from \"react\";\nimport {\n SelectFieldDownshiftItem,\n SelectFieldGroupByValue,\n SelectFieldOption,\n} from \"../types\";\n\n/**\n * Normalized group section structure used internally.\n * @property label - The group label (derived from groupToString or String(groupValue))\n * @property options - The options belonging to this group\n */\nexport type NormalizedGroupSection = {\n label: string;\n options: SelectFieldOption[];\n};\n\ntype UseGroupedOptionsResult = {\n /** Options that have a group property, converted to downshift items */\n groupedItems: SelectFieldDownshiftItem[];\n /** Options that don't have a group property, converted to downshift items */\n ungroupedItems: SelectFieldDownshiftItem[];\n /** Metadata about each group section for rendering */\n groupSections: NormalizedGroupSection[];\n};\n\n/**\n * Hook that processes options and groups them by their `group` property.\n *\n * Groups are ordered by insertion order (first occurrence of a group value\n * defines its position in the list).\n *\n * @param options - The options to process\n * @param groupToString - Optional function to convert group values to display labels\n * @returns Grouped items, ungrouped items, and group section metadata\n */\nexport function useGroupedOptions(\n options: SelectFieldOption[],\n groupToString?: (groupValue: SelectFieldGroupByValue) => string,\n): UseGroupedOptionsResult {\n return useMemo(() => {\n const groupedItems: SelectFieldDownshiftItem[] = [];\n const ungroupedItems: SelectFieldDownshiftItem[] = [];\n const groupSections: NormalizedGroupSection[] = [];\n\n // Map to track groups by their value, preserving insertion order\n const groupMap = new Map<\n SelectFieldGroupByValue,\n { label: string; options: SelectFieldOption[] }\n >();\n\n options.forEach((option) => {\n if (option.group !== undefined) {\n // Option has a group\n const groupValue = option.group;\n\n if (!groupMap.has(groupValue)) {\n // First occurrence of this group - create new entry\n const label = groupToString\n ? groupToString(groupValue)\n : String(groupValue);\n groupMap.set(groupValue, { label, options: [] });\n }\n\n // Add option to its group\n groupMap.get(groupValue)!.options.push(option);\n\n // Add to grouped items\n groupedItems.push({\n id: option.id,\n type: \"grouped-option\",\n original: option,\n });\n } else {\n // Option has no group - add to ungrouped\n ungroupedItems.push({\n id: option.id,\n type: \"option\",\n original: option,\n });\n }\n });\n\n // Convert map to array (maintains insertion order)\n groupMap.forEach(({ label, options: groupOptions }) => {\n groupSections.push({ label, options: groupOptions });\n });\n\n return { groupedItems, ungroupedItems, groupSections };\n }, [options, groupToString]);\n}\n\n/**\n * Sorts group sections using the provided comparator function.\n * The group value is extracted from the first option in each section.\n *\n * @param sections - The group sections to sort\n * @param groupSorter - Comparator function for group values\n * @returns A new array of sorted sections\n */\nexport function sortGroupSections(\n sections: NormalizedGroupSection[],\n groupSorter: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number,\n): NormalizedGroupSection[] {\n return [...sections].sort((a, b) => {\n const groupA = a.options[0]?.group;\n const groupB = b.options[0]?.group;\n if (groupA === undefined || groupB === undefined) return 0;\n return groupSorter(groupA, groupB);\n });\n}\n","import { ReactNode, RefObject, useCallback, useEffect, useRef } from \"react\";\n\nimport {\n autoPlacement,\n autoUpdate,\n computePosition,\n offset,\n size,\n} from \"@floating-ui/react\";\n\nimport { useOnClickOutside } from \"../../../../../internal/hooks/useOnClickOutside/useOnClickOutside\";\n\nimport styles from \"./FieldPopover.module.scss\";\n\nexport type FieldPopoverProps = {\n id: string;\n children: ReactNode;\n referenceElement: RefObject<HTMLElement>;\n open: boolean;\n onClickOutside: () => void;\n};\n\nexport const FieldPopover = (props: FieldPopoverProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { id, children, referenceElement, open, onClickOutside } = props;\n\n useOnClickOutside({\n targets: [ref.current ?? undefined, referenceElement.current ?? undefined],\n onClickOutside: onClickOutside,\n disable: !open,\n });\n\n useEffect(() => {\n if (open) {\n ref.current?.showPopover();\n } else {\n ref.current?.hidePopover();\n }\n }, [open]);\n\n const updatePosition = useCallback(async () => {\n if (!ref.current || !referenceElement.current) return;\n const position = await computePosition(\n referenceElement.current,\n ref.current,\n {\n placement: \"bottom-start\",\n middleware: [\n offset(8),\n autoPlacement({\n allowedPlacements: [\"bottom-start\", \"top-start\"],\n padding: 8,\n }),\n size({\n padding: 8,\n apply({ rects, elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n maxHeight: `${Math.max(0, availableHeight)}px`,\n });\n },\n }),\n ],\n },\n );\n ref.current.style.left = `${position.x}px`;\n ref.current.style.top = `${position.y}px`;\n }, [ref, referenceElement]);\n\n useEffect(() => {\n if (!ref.current || !referenceElement.current || !open) return;\n const cleanup = autoUpdate(\n referenceElement.current,\n ref.current,\n updatePosition,\n );\n return () => {\n cleanup();\n };\n }, [referenceElement, ref, updatePosition, open]);\n\n return (\n <div ref={ref} id={id} className={styles[\"field-popover\"]} popover=\"manual\">\n {children}\n </div>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useBreakpoint } from \"../../../hooks\";\n\n/**\n * The type of view to render based on device characteristics.\n */\nexport type AdaptiveView = \"mobile\" | \"desktop\";\n\n/**\n * Return type for the useAdaptiveView hook.\n */\nexport interface UseAdaptiveViewReturn {\n /**\n * The current adaptive view type.\n */\n view: AdaptiveView;\n /**\n * True when the device should use mobile-optimized UI (Dialog).\n */\n isMobile: boolean;\n /**\n * True when the device should use desktop-optimized UI (Popover).\n */\n isDesktop: boolean;\n}\n\n/**\n * Detects whether the primary pointer is coarse (touch) using CSS media query.\n * Returns false during SSR or when matchMedia is unavailable.\n */\nfunction detectCoarsePointer(): boolean {\n if (typeof window === \"undefined\" || !window.matchMedia) {\n return false;\n }\n return window.matchMedia(\"(pointer: coarse)\").matches;\n}\n\n/**\n * Custom hook for detecting whether to use mobile or desktop UI patterns.\n *\n * This hook determines the optimal UI pattern (e.g., Dialog vs Popover) by combining:\n * - Screen size via useBreakpoint (viewport width)\n * - Pointer precision via CSS media query (pointer: coarse)\n *\n * A device is considered \"mobile\" when it has both:\n * - A small screen (below md breakpoint, < 768px)\n * - A coarse pointer (touch-primary input)\n *\n * This approach correctly identifies:\n * - Mobile phones → mobile view (Dialog)\n * - iPads/tablets → desktop view (Popover) due to larger screens\n * - Touch laptops → desktop view (Popover) due to fine pointer primary\n * - Desktop → desktop view (Popover)\n *\n * @returns Object containing view type and boolean flags for mobile/desktop\n *\n * @example\n * const { isMobile } = useAdaptiveView();\n *\n * return isMobile ? (\n * <Dialog>{children}</Dialog>\n * ) : (\n * <Popover>{children}</Popover>\n * );\n */\nexport function useAdaptiveView(): UseAdaptiveViewReturn {\n const breakpoint = useBreakpoint();\n const [hasCoarsePointer, setHasCoarsePointer] = useState(detectCoarsePointer);\n\n useEffect(() => {\n setHasCoarsePointer(detectCoarsePointer());\n\n // Listen for pointer capability changes (e.g., connecting/disconnecting a mouse)\n const mediaQuery = window.matchMedia(\"(pointer: coarse)\");\n const handleChange = (e: MediaQueryListEvent) => {\n setHasCoarsePointer(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n const isSmallScreen = !breakpoint?.md;\n const isMobile = isSmallScreen && hasCoarsePointer;\n\n return {\n view: isMobile ? \"mobile\" : \"desktop\",\n isMobile,\n isDesktop: !isMobile,\n };\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { Flex, FocusableElement, Text } from \"../../../../..\";\nimport { DialogCancelButton } from \"../../../../../components/Dialog/DialogCancelButton\";\nimport styles from \"./FieldDialog.module.scss\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { DialogContext } from \"../../../../../components/Dialog/internal/DialogContext\";\nimport { useDialogScrollLock } from \"../../../../../internal\";\nimport { tabbable } from \"tabbable\";\n\nexport const FieldDialog = ({\n id,\n isOpen,\n onClose,\n field,\n children,\n title,\n initialFocusResolver,\n}: {\n id: string;\n isOpen: boolean;\n onClose: () => void;\n title: string;\n field: React.ReactNode;\n children: React.ReactNode;\n initialFocusResolver?: (focusables: FocusableElement[]) => FocusableElement;\n}) => {\n const elRef = useRef<HTMLDialogElement>(null);\n const visualViewportHeightRef = useRef<HTMLDivElement>(null);\n\n useDialogScrollLock({\n open: isOpen,\n id,\n enableScrollChaining: false,\n elementRef: elRef,\n });\n\n const computeFocus = useCallback(\n (focusables: FocusableElement[]) => {\n if (initialFocusResolver) {\n return initialFocusResolver(focusables);\n }\n return (\n focusables.find(\n (focusable) => focusable.dataset.anv !== \"dialog-cancel-button\",\n ) || focusables[0]\n );\n },\n [initialFocusResolver],\n );\n\n useEffect(() => {\n if (isOpen) {\n elRef.current?.showModal();\n if (elRef.current) {\n computeFocus(tabbable(elRef.current)).focus();\n }\n } else {\n elRef.current?.close();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Omitting computeFocus because we don't want to show/close the dialog on computeFocus change\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n const handleResize = () => {\n if (!visualViewportHeightRef.current) return;\n visualViewportHeightRef.current.style.height = `${window.visualViewport?.height ?? 0}px`;\n visualViewportHeightRef.current.style.maxHeight = `${window.visualViewport?.height ?? 0}px`;\n };\n window.visualViewport?.addEventListener(\"resize\", handleResize);\n return () => {\n window.visualViewport?.removeEventListener(\"resize\", handleResize);\n };\n }\n }, [isOpen]);\n\n return (\n <dialog\n ref={elRef}\n id={id}\n data-anv=\"field-dialog\"\n className={styles[\"field-dialog\"]}\n onKeyDown={(e) => {\n if (e.code === \"Escape\") {\n e.preventDefault();\n onClose();\n }\n }}\n >\n <div\n className={styles[\"field-dialog-visual-viewport-height\"]}\n ref={visualViewportHeightRef}\n >\n <Flex direction=\"row\" className={styles[\"header\"]}>\n <Text variant=\"headline\" el=\"h1\">\n {title}\n </Text>\n <span className={styles[\"close-container\"]}>\n <DialogContext.Provider value={{ close: onClose }}>\n <DialogCancelButton\n className={styles[\"close-button\"]}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"Close dialog\"\n icon={Close}\n />\n </DialogContext.Provider>\n </span>\n </Flex>\n <Flex direction=\"column\" className={styles[\"field\"]}>\n {field}\n </Flex>\n <Flex direction=\"column\" className={styles[\"content\"]}>\n {children}\n </Flex>\n </div>\n </dialog>\n );\n};\n"],"names":["options","CheckboxChecked","styles","CheckboxOutline","CheckboxIndeterminate","Check","Close"],"mappings":"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"}