@servicetitan/anvil2 3.9.0 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/AiMark-2_O4tKv_.js.map +1 -1
  3. package/dist/Button-Dwh_Nd4l.js.map +1 -1
  4. package/dist/Combobox.js +1 -1
  5. package/dist/{DataTable-CRzQKN_P.js → DataTable-D-SKKt5w.js} +53 -16
  6. package/dist/DataTable-D-SKKt5w.js.map +1 -0
  7. package/dist/{DateFieldRange-CHbrYgsD.js → DateFieldRange-DUFfyknZ.js} +51 -31
  8. package/dist/DateFieldRange-DUFfyknZ.js.map +1 -0
  9. package/dist/DateFieldRange.js +1 -1
  10. package/dist/{DateFieldSingle-D-KZ3NL0.js → DateFieldSingle-BZjlO0hX.js} +49 -28
  11. package/dist/DateFieldSingle-BZjlO0hX.js.map +1 -0
  12. package/dist/DateFieldSingle.js +1 -1
  13. package/dist/{DateFieldYearless-DouEX24o.js → DateFieldYearless-TcKb9jE2.js} +4 -2
  14. package/dist/DateFieldYearless-TcKb9jE2.js.map +1 -0
  15. package/dist/DateFieldYearless.js +1 -1
  16. package/dist/{DateFieldYearlessRange-B_bImgyn.js → DateFieldYearlessRange-D9XtRNWi.js} +16 -4
  17. package/dist/DateFieldYearlessRange-D9XtRNWi.js.map +1 -0
  18. package/dist/DateFieldYearlessRange.js +1 -1
  19. package/dist/{Dialog-Clh3jaX8.js → Dialog-DjJ9wpeo.js} +2 -2
  20. package/dist/{Dialog-Clh3jaX8.js.map → Dialog-DjJ9wpeo.js.map} +1 -1
  21. package/dist/Dialog.js +1 -1
  22. package/dist/DndSort.js.map +1 -1
  23. package/dist/{Drawer-h2Mut1lB.js → Drawer-CZITBE8M.js} +2 -2
  24. package/dist/{Drawer-h2Mut1lB.js.map → Drawer-CZITBE8M.js.map} +1 -1
  25. package/dist/Drawer.js +1 -1
  26. package/dist/DrillDown.css +36 -34
  27. package/dist/DrillDown.js +1 -1
  28. package/dist/DrillDown.module-1VBKDZRA.js +27 -0
  29. package/dist/{DrillDown.module-D1Bf9_yP.js.map → DrillDown.module-1VBKDZRA.js.map} +1 -1
  30. package/dist/{FilterBar-CBTAkEri.js → FilterBar-B_ShYx2G.js} +28 -7
  31. package/dist/FilterBar-B_ShYx2G.js.map +1 -0
  32. package/dist/FilterBar.js +1 -1
  33. package/dist/{MenuFooter-BXcNxNnX.js → MenuFooter--lBF8OjJ.js} +5 -1
  34. package/dist/MenuFooter--lBF8OjJ.js.map +1 -0
  35. package/dist/MultiSelectField.js +1 -1
  36. package/dist/{MultiSelectFieldSync-CpfsWecG.js → MultiSelectFieldSync-B_vuR-ii.js} +220 -156
  37. package/dist/MultiSelectFieldSync-B_vuR-ii.js.map +1 -0
  38. package/dist/MultiSelectFieldSync.css +80 -69
  39. package/dist/MultiSelectMenu.js +1 -1
  40. package/dist/{MultiSelectMenuSync-CtyLYyDE.js → MultiSelectMenuSync-C3Y7jnJQ.js} +22 -8
  41. package/dist/MultiSelectMenuSync-C3Y7jnJQ.js.map +1 -0
  42. package/dist/{Page-B6E3Gbji.js → Page-BHBcuxcE.js} +14 -13
  43. package/dist/Page-BHBcuxcE.js.map +1 -0
  44. package/dist/Page.js +1 -1
  45. package/dist/{Pagination-DF7iMeJe.js → Pagination-Bx_u6Uea.js} +32 -6
  46. package/dist/Pagination-Bx_u6Uea.js.map +1 -0
  47. package/dist/Pagination.js +1 -1
  48. package/dist/{RichTextEditor-CLo8yoUP.js → RichTextEditor-CTIGe6xA.js} +3 -3
  49. package/dist/{RichTextEditor-CLo8yoUP.js.map → RichTextEditor-CTIGe6xA.js.map} +1 -1
  50. package/dist/RichTextEditor.js +1 -1
  51. package/dist/{SavedFiltersButton-FcYVncxU.js → SavedFiltersButton-DV0xxLat.js} +251 -165
  52. package/dist/SavedFiltersButton-DV0xxLat.js.map +1 -0
  53. package/dist/SavedFiltersButton.js +1 -1
  54. package/dist/SelectField.js +1 -1
  55. package/dist/{SelectFieldSync-Bi8HsMYP.js → SelectFieldSync-rwfeNwN2.js} +45 -11
  56. package/dist/SelectFieldSync-rwfeNwN2.js.map +1 -0
  57. package/dist/SelectMenu.js +1 -1
  58. package/dist/{SelectMenuSync-DKg4g5nN.js → SelectMenuSync-BkC0FD5P.js} +22 -8
  59. package/dist/SelectMenuSync-BkC0FD5P.js.map +1 -0
  60. package/dist/{SelectOptions-DszNAjxB.js → SelectOptions-B3Vmtb_k.js} +2 -2
  61. package/dist/{SelectOptions-DszNAjxB.js.map → SelectOptions-B3Vmtb_k.js.map} +1 -1
  62. package/dist/{SelectTrigger-DNIc5ttg.js → SelectTrigger-BAnVo4Ln.js} +2 -2
  63. package/dist/{SelectTrigger-DNIc5ttg.js.map → SelectTrigger-BAnVo4Ln.js.map} +1 -1
  64. package/dist/SelectTrigger.js +1 -1
  65. package/dist/{SelectTriggerBase-1Cc6EUBw.js → SelectTriggerBase-D7zAT0UR.js} +8 -3
  66. package/dist/SelectTriggerBase-D7zAT0UR.js.map +1 -0
  67. package/dist/SelectTriggerBase.css +49 -47
  68. package/dist/SelectTriggerBase.module-mYOfdBGA.js +40 -0
  69. package/dist/SelectTriggerBase.module-mYOfdBGA.js.map +1 -0
  70. package/dist/Tab-Bqfvg8Ce.js.map +1 -1
  71. package/dist/Table.js +1 -1
  72. package/dist/Textarea-B3C7AkPj.js.map +1 -1
  73. package/dist/{Toolbar-2VQIjU5b.js → Toolbar-BOgHhw7K.js} +12 -3
  74. package/dist/Toolbar-BOgHhw7K.js.map +1 -0
  75. package/dist/{Toolbar-BbImThIu.js → Toolbar-DDWUuQm_.js} +24 -2
  76. package/dist/Toolbar-DDWUuQm_.js.map +1 -0
  77. package/dist/Toolbar.js +2 -2
  78. package/dist/{ToolbarButtonToggle-Bc0XvCM9.js → ToolbarButtonToggle-BbtKfezH.js} +18 -2
  79. package/dist/ToolbarButtonToggle-BbtKfezH.js.map +1 -0
  80. package/dist/TreeSelectField.js +1 -1
  81. package/dist/{TreeSelectFieldSync-DUHVmOQa.js → TreeSelectFieldSync-BRQgLPxB.js} +118 -87
  82. package/dist/TreeSelectFieldSync-BRQgLPxB.js.map +1 -0
  83. package/dist/TreeSelectFieldSync.css +44 -36
  84. package/dist/TreeSelectMenu.js +1 -1
  85. package/dist/{TreeSelectMenuSync-DVoYUG7F.js → TreeSelectMenuSync-88q0ydo5.js} +18 -6
  86. package/dist/TreeSelectMenuSync-88q0ydo5.js.map +1 -0
  87. package/dist/{YearlessDateInputWithPicker-CM9mmz8s.js → YearlessDateInputWithPicker-BquY4bCd.js} +19 -5
  88. package/dist/YearlessDateInputWithPicker-BquY4bCd.js.map +1 -0
  89. package/dist/anvParts-BGg5dgfl.js +43 -0
  90. package/dist/anvParts-BGg5dgfl.js.map +1 -0
  91. package/dist/beta.js +13 -13
  92. package/dist/{bulkActionTypes-BnZNAru6.js → bulkActionTypes-CWcUhKFS.js} +2 -2
  93. package/dist/{bulkActionTypes-BnZNAru6.js.map → bulkActionTypes-CWcUhKFS.js.map} +1 -1
  94. package/dist/downshift.esm-xtSnQp44.js.map +1 -1
  95. package/dist/{filter-state-XmqhkURU.js → filter-state-zlL4luoE.js} +153 -81
  96. package/dist/filter-state-zlL4luoE.js.map +1 -0
  97. package/dist/floating-ui.react-dom-CyrxPiI-.js.map +1 -1
  98. package/dist/index-DXeGMe23.js.map +1 -1
  99. package/dist/{index-BwNeldDw.js → index-DjirBR0l.js} +2 -2
  100. package/dist/{index-BwNeldDw.js.map → index-DjirBR0l.js.map} +1 -1
  101. package/dist/index.esm-C2ZhC_8d.js.map +1 -1
  102. package/dist/index.js +16 -16
  103. package/dist/proxy-DEehATlA.js.map +1 -1
  104. package/dist/src/beta/components/FilterBar/FilterBar.d.ts +3 -3
  105. package/dist/src/beta/components/FilterBar/internal/utils/dateListLibraryOptions.d.ts +17 -3
  106. package/dist/src/beta/components/FilterBar/parts.d.ts +38 -0
  107. package/dist/src/beta/components/SavedFiltersButton/parts.d.ts +37 -0
  108. package/dist/src/beta/components/SavedFiltersButton/types.d.ts +2 -1
  109. package/dist/src/beta/components/Table/DataTable/DataTable.d.ts +3 -2
  110. package/dist/src/beta/components/Table/DataTable/parts.d.ts +30 -0
  111. package/dist/src/beta/components/Table/internal/ResizeHandle.d.ts +3 -2
  112. package/dist/src/beta/components/Toolbar/Toolbar.d.ts +4 -4
  113. package/dist/src/beta/components/Toolbar/parts.d.ts +19 -0
  114. package/dist/src/beta/components/TreeSelectField/TreeSelectField.d.ts +6 -5
  115. package/dist/src/beta/components/TreeSelectField/parts.d.ts +23 -0
  116. package/dist/src/beta/components/TreeSelectField/types.d.ts +11 -4
  117. package/dist/src/beta/components/TreeSelectMenu/TreeSelectMenu.d.ts +33 -2
  118. package/dist/src/beta/components/TreeSelectMenu/parts.d.ts +12 -0
  119. package/dist/src/beta/components/TreeSelectMenu/types.d.ts +3 -2
  120. package/dist/src/components/Combobox/ComboboxTypes.d.ts +2 -2
  121. package/dist/src/components/Combobox/parts.d.ts +19 -0
  122. package/dist/src/components/DateFieldRange/DateFieldRange.d.ts +2 -2
  123. package/dist/src/components/DateFieldRange/parts.d.ts +16 -0
  124. package/dist/src/components/DateFieldSingle/DateFieldSingle.d.ts +2 -2
  125. package/dist/src/components/DateFieldSingle/parts.d.ts +16 -0
  126. package/dist/src/components/DateFieldYearless/DateFieldYearless.d.ts +2 -2
  127. package/dist/src/components/DateFieldYearless/parts.d.ts +15 -0
  128. package/dist/src/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +2 -2
  129. package/dist/src/components/DateFieldYearlessRange/parts.d.ts +12 -0
  130. package/dist/src/components/DrillDown/DrillDown.d.ts +11 -0
  131. package/dist/src/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
  132. package/dist/src/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
  133. package/dist/src/components/MultiSelectField/internal/types.d.ts +3 -1
  134. package/dist/src/components/MultiSelectField/parts.d.ts +20 -0
  135. package/dist/src/components/MultiSelectField/types.d.ts +2 -2
  136. package/dist/src/components/MultiSelectMenu/parts.d.ts +12 -0
  137. package/dist/src/components/MultiSelectMenu/types.d.ts +3 -2
  138. package/dist/src/components/Pagination/Pagination.d.ts +4 -3
  139. package/dist/src/components/Pagination/parts.d.ts +28 -0
  140. package/dist/src/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
  141. package/dist/src/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
  142. package/dist/src/components/SelectField/parts.d.ts +18 -0
  143. package/dist/src/components/SelectField/types.d.ts +7 -2
  144. package/dist/src/components/SelectMenu/internal/useMenuInteraction.d.ts +8 -6
  145. package/dist/src/components/SelectMenu/parts.d.ts +12 -0
  146. package/dist/src/components/SelectMenu/types.d.ts +3 -2
  147. package/dist/src/components/SelectTrigger/internal/SelectTriggerBase.d.ts +6 -5
  148. package/dist/src/components/Toolbar/Toolbar.d.ts +3 -3
  149. package/dist/src/components/Toolbar/parts.d.ts +18 -0
  150. package/dist/src/internal/constants/anvParts.d.ts +81 -0
  151. package/dist/src/internal/testing/anvPartsContract.d.ts +24 -0
  152. package/dist/src/internal/types/selectFieldInternalTypes.d.ts +3 -1
  153. package/dist/{syncFilterUtils-UVNoFsDr.js → syncFilterUtils-YB6gRuuR.js} +11 -4
  154. package/dist/syncFilterUtils-YB6gRuuR.js.map +1 -0
  155. package/dist/{treeSync-CiU5d6rF.js → treeSync-DOen59wP.js} +24 -4
  156. package/dist/treeSync-DOen59wP.js.map +1 -0
  157. package/dist/use-reduced-motion-CqjZZ5QB.js.map +1 -1
  158. package/dist/{useAdaptiveView-C_WvM4-P.js → useAdaptiveView-DmhhcX-B.js} +3 -1
  159. package/dist/useAdaptiveView-DmhhcX-B.js.map +1 -0
  160. package/dist/useChipLayout-BBe6Tzyl.js +90 -0
  161. package/dist/useChipLayout-BBe6Tzyl.js.map +1 -0
  162. package/dist/{useDrillDownContext-iUvoTget.js → useDrillDownContext-D5_NjqY4.js} +2 -2
  163. package/dist/{useDrillDownContext-iUvoTget.js.map → useDrillDownContext-D5_NjqY4.js.map} +1 -1
  164. package/dist/{useDrilldown-D7DKSs7E.js → useDrilldown-glecoaI_.js} +45 -19
  165. package/dist/{useDrilldown-D7DKSs7E.js.map → useDrilldown-glecoaI_.js.map} +1 -1
  166. package/dist/{useInfiniteCombobox-COJTJxCZ.js → useInfiniteCombobox-CVAYoUvh.js} +70 -23
  167. package/dist/useInfiniteCombobox-CVAYoUvh.js.map +1 -0
  168. package/dist/{useMenuInteraction-AgrXU8kv.js → useMenuInteraction-nNF1dsrp.js} +7 -4
  169. package/dist/useMenuInteraction-nNF1dsrp.js.map +1 -0
  170. package/dist/useSize.js.map +1 -1
  171. package/package.json +9 -7
  172. package/dist/DataTable-CRzQKN_P.js.map +0 -1
  173. package/dist/DateFieldRange-CHbrYgsD.js.map +0 -1
  174. package/dist/DateFieldSingle-D-KZ3NL0.js.map +0 -1
  175. package/dist/DateFieldYearless-DouEX24o.js.map +0 -1
  176. package/dist/DateFieldYearlessRange-B_bImgyn.js.map +0 -1
  177. package/dist/DrillDown.module-D1Bf9_yP.js +0 -27
  178. package/dist/FilterBar-CBTAkEri.js.map +0 -1
  179. package/dist/MenuFooter-BXcNxNnX.js.map +0 -1
  180. package/dist/MultiSelectFieldSync-CpfsWecG.js.map +0 -1
  181. package/dist/MultiSelectMenuSync-CtyLYyDE.js.map +0 -1
  182. package/dist/Page-B6E3Gbji.js.map +0 -1
  183. package/dist/Pagination-DF7iMeJe.js.map +0 -1
  184. package/dist/SavedFiltersButton-FcYVncxU.js.map +0 -1
  185. package/dist/SelectFieldSync-Bi8HsMYP.js.map +0 -1
  186. package/dist/SelectMenuSync-DKg4g5nN.js.map +0 -1
  187. package/dist/SelectTriggerBase-1Cc6EUBw.js.map +0 -1
  188. package/dist/SelectTriggerBase.module-Brmw1nYG.js +0 -39
  189. package/dist/SelectTriggerBase.module-Brmw1nYG.js.map +0 -1
  190. package/dist/Toolbar-2VQIjU5b.js.map +0 -1
  191. package/dist/Toolbar-BbImThIu.js.map +0 -1
  192. package/dist/ToolbarButtonToggle-Bc0XvCM9.js.map +0 -1
  193. package/dist/TreeSelectFieldSync-DUHVmOQa.js.map +0 -1
  194. package/dist/TreeSelectMenuSync-DVoYUG7F.js.map +0 -1
  195. package/dist/YearlessDateInputWithPicker-CM9mmz8s.js.map +0 -1
  196. package/dist/filter-state-XmqhkURU.js.map +0 -1
  197. package/dist/syncFilterUtils-UVNoFsDr.js.map +0 -1
  198. package/dist/treeSync-CiU5d6rF.js.map +0 -1
  199. package/dist/useAdaptiveView-C_WvM4-P.js.map +0 -1
  200. package/dist/useChipLayout-BWZfKDgd.js +0 -51
  201. package/dist/useChipLayout-BWZfKDgd.js.map +0 -1
  202. package/dist/useInfiniteCombobox-COJTJxCZ.js.map +0 -1
  203. package/dist/useMenuInteraction-AgrXU8kv.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"Pagination-DF7iMeJe.js","sources":["../src/components/Pagination/internal/PaginationItem.tsx","../src/components/Pagination/internal/PaginationOverflowMenu.tsx","../src/components/Pagination/internal/PaginationItemsPerPageMenu.tsx","../src/components/Pagination/internal/PaginationList.tsx","../src/components/Pagination/internal/PaginationTotalCount.tsx","../src/components/Pagination/internal/Pagination.tsx","../src/components/Pagination/internal/usePaginationArray.ts","../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import { type ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport cx from \"classnames\";\n\nimport { ButtonToggle } from \"../../ButtonToggle\";\n\nimport styles from \"./PaginationItem.module.scss\";\n\n/**\n * Props for the PaginationItem component\n * @extends ComponentPropsWithoutRef<\"li\">\n */\nexport type PaginationItemProps = ComponentPropsWithoutRef<\"li\"> & {\n /**\n * The page number to display.\n */\n page: number;\n /**\n * Whether this page item is currently active/selected.\n * @default false\n */\n isActive?: boolean;\n /**\n * Callback function called when the page item is clicked.\n */\n onClick?: () => void;\n};\n\n/**\n * PaginationItem component for displaying individual page numbers in pagination.\n *\n * Features:\n * - Displays page number as a toggle button\n * - Supports active state styling\n * - Fully accessible with proper ARIA attributes\n * - Integrates with pagination navigation system\n * - Consistent styling with design system\n *\n * @example\n * <PaginationItem\n * page={3}\n * isActive={true}\n * onClick={() => console.log('Page 3 clicked')}\n * />\n */\nexport const PaginationItem = forwardRef<HTMLLIElement, PaginationItemProps>(\n (props, ref) => {\n const { page, isActive, onClick, className, ...rest } = props;\n\n const paginationClassName = cx(styles[\"pagination-item\"], className);\n const paginationButtonClassName = cx(styles[\"pagination-item-button\"], {\n [styles.active]: isActive,\n });\n return (\n <li ref={ref} {...rest} className={paginationClassName}>\n <ButtonToggle\n className={paginationButtonClassName}\n size=\"small\"\n onClick={onClick}\n aria-current={isActive ? \"page\" : undefined}\n aria-label={\n isActive ? `Current page, page ${page}` : `Go to page ${page}`\n }\n checked={isActive}\n >\n {page}\n </ButtonToggle>\n </li>\n );\n },\n);\n\nPaginationItem.displayName = \"PaginationItem\";\n","import {\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type UIEvent,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport IconMoreHoriz from \"@servicetitan/hammer-icon/mdi/round/more_horiz.svg\";\n\nimport { Button } from \"../../Button\";\nimport { Menu } from \"../../Menu\";\n\nimport styles from \"./PaginationOverflowMenu.module.scss\";\n\n// Visible scroller dimensions used to compute the windowed slice. Match the\n// previous `maxHeight={200}` behavior so popover sizing is unchanged.\n// `ITEM_HEIGHT` matches the current `Menu.Item` CSS height calculation.\n// Padding mirrors Menu scroller `$size-2` (0.5rem at the default 16px root)\n// after the outer Menu scroller padding is reset for this virtualized menu.\nconst SCROLLER_MAX_HEIGHT = 200;\nconst ITEM_HEIGHT = 34;\nconst SCROLLER_PADDING_BLOCK = 8;\nconst SCROLLER_PADDING_INLINE = 8;\nconst OVERSCAN = 5;\n\n/**\n * Props for the PaginationOverflowMenu component\n * @extends ComponentPropsWithoutRef<\"li\">\n */\nexport type PaginationOverflowMenuProps = ComponentPropsWithoutRef<\"li\"> & {\n /**\n * The starting page number for the overflow range.\n */\n startPage: number;\n /**\n * The ending page number for the overflow range.\n */\n endPage: number;\n /**\n * The number of pages in the overflow range.\n */\n length: number;\n /**\n * The current active page in the parent pagination.\n */\n currentPage: number;\n /**\n * Callback function called when a page in the overflow menu is selected.\n * @param page The selected page number\n */\n onItemClick: (page: number) => void;\n};\n\n/**\n * PaginationOverflowMenu component for displaying overflow pages in pagination.\n *\n * Features:\n * - Displays ellipsis menu for large page ranges\n * - Renders the page items as a virtualized window — only the slice visible\n * in the scroller is in the DOM at any time, keeping pagination cheap\n * even when the overflow spans tens of thousands of pages\n * - Integrates with pagination navigation system\n * - Fully accessible with proper ARIA labels\n * - Consistent styling with design system\n *\n * @example\n * <PaginationOverflowMenu\n * startPage={4}\n * endPage={8}\n * length={5}\n * currentPage={4}\n * onItemClick={(page) => console.log('Page selected:', page)}\n * />\n */\nexport const PaginationOverflowMenu = forwardRef<\n HTMLLIElement,\n PaginationOverflowMenuProps\n>((props, ref) => {\n const { startPage, endPage, length, currentPage, onItemClick, ...rest } =\n props;\n\n // Layout-independent window: derive the visible slice from `scrollTop`\n // and the fixed `SCROLLER_MAX_HEIGHT`/`ITEM_HEIGHT` constants. This is\n // sturdier than `tanstack/react-virtual` here because (a) we don't need\n // dynamic measurement — every item is the same size — and (b) the\n // calculation works in jsdom where layout is unresolved.\n const [scrollTop, setScrollTop] = useState(0);\n const [pendingFocusPage, setPendingFocusPage] = useState<number | null>(null);\n const scrollerRef = useRef<HTMLDivElement>(null);\n\n const getInitialFocusPage = useCallback(() => {\n return Math.min(endPage, Math.max(startPage, currentPage));\n }, [currentPage, endPage, startPage]);\n\n const getScrollTopForIndex = useCallback(\n (index: number, currentScrollTop: number) => {\n const itemTop = SCROLLER_PADDING_BLOCK + index * ITEM_HEIGHT;\n const itemBottom = itemTop + ITEM_HEIGHT;\n const viewportBottom = currentScrollTop + SCROLLER_MAX_HEIGHT;\n\n if (itemTop < currentScrollTop) {\n return itemTop;\n }\n\n if (itemBottom > viewportBottom) {\n return itemBottom - SCROLLER_MAX_HEIGHT;\n }\n\n return currentScrollTop;\n },\n [],\n );\n\n const syncScrollTop = useCallback((nextScrollTop: number) => {\n setScrollTop(nextScrollTop);\n\n if (\n scrollerRef.current &&\n scrollerRef.current.scrollTop !== nextScrollTop\n ) {\n scrollerRef.current.scrollTop = nextScrollTop;\n }\n }, []);\n\n const focusLogicalPage = useCallback(\n (pageNumber: number) => {\n const targetIndex = pageNumber - startPage;\n const nextScrollTop = getScrollTopForIndex(targetIndex, scrollTop);\n\n if (nextScrollTop !== scrollTop) {\n syncScrollTop(nextScrollTop);\n }\n\n setPendingFocusPage(pageNumber);\n },\n [getScrollTopForIndex, scrollTop, startPage, syncScrollTop],\n );\n\n const handleScroll = useCallback((event: UIEvent<HTMLDivElement>) => {\n setScrollTop(event.currentTarget.scrollTop);\n }, []);\n\n const containUnhandledScrollerKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.code !== \"ArrowDown\" && event.code !== \"ArrowUp\") {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n },\n [],\n );\n\n const handleItemKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>, pageNumber: number) => {\n if (event.code !== \"ArrowDown\" && event.code !== \"ArrowUp\") {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const nextPage =\n event.code === \"ArrowDown\"\n ? pageNumber === endPage\n ? startPage\n : pageNumber + 1\n : pageNumber === startPage\n ? endPage\n : pageNumber - 1;\n\n focusLogicalPage(nextPage);\n },\n [endPage, focusLogicalPage, startPage],\n );\n\n const visibleCount = Math.ceil(SCROLLER_MAX_HEIGHT / ITEM_HEIGHT);\n const paddedScrollTop = Math.max(0, scrollTop - SCROLLER_PADDING_BLOCK);\n const startIndex = Math.max(\n 0,\n Math.floor(paddedScrollTop / ITEM_HEIGHT) - OVERSCAN,\n );\n const endIndex = Math.min(length, startIndex + visibleCount + OVERSCAN * 2);\n const totalSize = length * ITEM_HEIGHT + SCROLLER_PADDING_BLOCK * 2;\n\n const visibleIndices = useMemo(() => {\n const indices: number[] = [];\n for (let i = startIndex; i < endIndex; i++) {\n indices.push(i);\n }\n return indices;\n }, [endIndex, startIndex]);\n\n useLayoutEffect(() => {\n if (pendingFocusPage === null) {\n return;\n }\n\n const targetElement = scrollerRef.current?.querySelector<HTMLElement>(\n `[data-pagination-page=\"${pendingFocusPage}\"]`,\n );\n\n if (!targetElement) {\n return;\n }\n\n targetElement.focus();\n setPendingFocusPage(null);\n }, [pendingFocusPage, visibleIndices]);\n\n return (\n <li className={styles[\"pagination-item-overflow-menu\"]} ref={ref} {...rest}>\n <Menu\n trigger={(triggerProps) => {\n const isOpen = triggerProps[\"aria-expanded\"] === true;\n\n return (\n <Button\n ref={triggerProps.ref}\n onClick={() => {\n if (!isOpen) {\n focusLogicalPage(getInitialFocusPage());\n }\n triggerProps.onClick?.();\n }}\n onKeyDown={(event) => {\n if (event.code === \"ArrowDown\" || event.code === \"ArrowUp\") {\n event.preventDefault();\n event.stopPropagation();\n focusLogicalPage(getInitialFocusPage());\n\n if (!isOpen) {\n triggerProps.onClick?.();\n }\n\n return;\n }\n\n triggerProps.onKeyDown?.(event);\n }}\n aria-haspopup={triggerProps[\"aria-haspopup\"]}\n aria-controls={triggerProps[\"aria-controls\"]}\n aria-expanded={triggerProps[\"aria-expanded\"]}\n data-state={triggerProps[\"data-state\"]}\n icon={IconMoreHoriz}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"More pages\"\n />\n );\n }}\n // Menu's built-in scroller is bypassed: we render our own\n // windowed scroller below and need the popover to wrap it\n // without imposing its own height clipping.\n key={`${startPage}-${endPage}`}\n contentClassName={styles[\"pagination-item-overflow-menu-content\"]}\n aria-label=\"More pages\"\n >\n {/* Keyboard handler is fallback containment only; child menu items remain focus targets. */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={scrollerRef}\n data-pagination-overflow-scroller=\"true\"\n onKeyDown={containUnhandledScrollerKeyDown}\n onScroll={handleScroll}\n style={{\n maxHeight: SCROLLER_MAX_HEIGHT,\n overflowY: \"auto\",\n position: \"relative\",\n }}\n >\n <div\n style={{\n height: totalSize,\n position: \"relative\",\n width: \"100%\",\n }}\n >\n {visibleIndices.map((index) => {\n const pageNumber = startPage + index;\n return (\n <Menu.Item\n key={pageNumber}\n data-pagination-page={pageNumber}\n label={`${pageNumber}`}\n onKeyDown={(event) => handleItemKeyDown(event, pageNumber)}\n onClick={(event) => {\n const paginationNav = event.currentTarget.closest(\"nav\");\n onItemClick(pageNumber);\n // Re-focus the active page button after selection.\n // Scope lookup to this pagination so multiple mounted\n // paginations do not steal focus from one another.\n setTimeout(() => {\n paginationNav\n ?.querySelector<HTMLElement>('[aria-current=\"page\"]')\n ?.focus();\n }, 100);\n }}\n style={{\n position: \"absolute\",\n top: 0,\n left: SCROLLER_PADDING_INLINE,\n right: SCROLLER_PADDING_INLINE,\n transform: `translateY(${\n SCROLLER_PADDING_BLOCK + index * ITEM_HEIGHT\n }px)`,\n height: ITEM_HEIGHT,\n }}\n />\n );\n })}\n </div>\n </div>\n </Menu>\n </li>\n );\n});\n\nPaginationOverflowMenu.displayName = \"PaginationOverflowMenu\";\n","import { forwardRef, type KeyboardEvent } from \"react\";\nimport IconKeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\n\nimport { Button } from \"../../Button\";\nimport { Flex } from \"../../Flex\";\nimport { Menu } from \"../../Menu\";\nimport { Text } from \"../../Text\";\n\nimport styles from \"./PaginationItemsPerPageMenu.module.scss\";\n\n/**\n * Props for the PaginationItemsPerPageMenu component\n */\nexport type PaginationItemsPerPageMenuProps = {\n /**\n * The currently selected number of items per page.\n */\n itemsPerPage: number;\n /**\n * Array of available options for items per page.\n */\n itemsPerPageOptions: number[];\n /**\n * Callback function called when the items per page selection changes.\n * @param itemsPerPage The new number of items per page\n */\n onItemsPerPageChange: (itemsPerPage: number) => void;\n /**\n * Custom label displayed before the items-per-page selector.\n * @default \"Rows per page\"\n */\n itemsPerPageLabel?: string;\n};\n\n/**\n * PaginationItemsPerPageMenu component for selecting the number of items per page.\n *\n * Features:\n * - Displays current items per page selection\n * - Provides dropdown menu with available options\n * - Integrates with pagination system\n * - Shows \"Rows per page\" label for clarity\n * - Fully accessible with proper ARIA attributes\n * - Consistent styling with design system\n *\n * @example\n * <PaginationItemsPerPageMenu\n * itemsPerPage={10}\n * itemsPerPageOptions={[5, 10, 25, 50]}\n * onItemsPerPageChange={(itemsPerPage) => console.log('Items per page:', itemsPerPage)}\n * />\n */\nexport const PaginationItemsPerPageMenu = forwardRef<\n HTMLDivElement,\n PaginationItemsPerPageMenuProps\n>((props, ref) => {\n const {\n itemsPerPage,\n itemsPerPageOptions,\n onItemsPerPageChange,\n itemsPerPageLabel = \"Rows per page\",\n } = props;\n\n // This is a workaround to focus the first item in the menu when the arrow keys are pressed with the custom menu trigger\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.code === \"ArrowDown\" || e.code === \"ArrowUp\") {\n e.preventDefault();\n const menuId = e.currentTarget.getAttribute(\"aria-controls\");\n\n setTimeout(() => {\n const menu = menuId ? document.getElementById(menuId) : null;\n const menuItems =\n menu?.querySelectorAll('[data-anv=\"menu-item\"]') ||\n document.querySelectorAll('[data-anv=\"menu-item\"]');\n\n (menuItems[0] as HTMLElement)?.focus();\n }, 100);\n }\n };\n\n return (\n <Flex alignItems=\"center\" gap=\"2\" ref={ref}>\n <Text size=\"small\">{itemsPerPageLabel}</Text>\n <Menu\n trigger={({ ref, ...rest }) => {\n return (\n <Button\n ref={ref}\n {...rest}\n onKeyDown={handleKeyDown}\n className={styles[\"pagination-items-per-page-button\"]}\n appearance=\"ghost\"\n icon={{ after: IconKeyboardArrowDown }}\n size=\"small\"\n >\n {itemsPerPage}\n </Button>\n );\n }}\n >\n {itemsPerPageOptions.map((option) => (\n <Menu.Item\n key={option}\n label={option}\n onClick={() => {\n onItemsPerPageChange?.(option);\n }}\n />\n ))}\n </Menu>\n </Flex>\n );\n});\n\nPaginationItemsPerPageMenu.displayName = \"PaginationItemsPerPageMenu\";\n","import { forwardRef } from \"react\";\nimport IconKeyboardArrowLeft from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_left.svg\";\nimport IconKeyboardArrowRight from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_right.svg\";\n\nimport { Button } from \"../../Button\";\n\nimport cx from \"classnames\";\nimport itemStyles from \"./PaginationItem.module.scss\";\nimport styles from \"./PaginationList.module.scss\";\n\ntype PaginationListProps = {\n page: number;\n totalPages: number;\n hasTotalItemCount?: boolean;\n onPageChange: (page: number) => void;\n children: React.ReactNode;\n className?: string;\n};\n\nexport const PaginationList = forwardRef<HTMLUListElement, PaginationListProps>(\n (props, ref) => {\n const {\n page,\n totalPages,\n hasTotalItemCount,\n children,\n onPageChange,\n className,\n } = props;\n\n const paginationListClassName = cx(styles[\"pagination-list\"], className);\n\n return (\n <ul ref={ref} className={paginationListClassName}>\n <li className={itemStyles[\"pagination-item\"]}>\n <Button\n appearance=\"ghost\"\n icon={IconKeyboardArrowLeft}\n size=\"small\"\n aria-label=\"Previous page\"\n disabled={page === 1}\n onClick={() => {\n if (page > 1) {\n onPageChange?.(page - 1);\n }\n }}\n />\n </li>\n {children}\n <li className={itemStyles[\"pagination-item\"]}>\n <Button\n appearance=\"ghost\"\n icon={IconKeyboardArrowRight}\n size=\"small\"\n aria-label=\"Next page\"\n disabled={\n hasTotalItemCount !== false &&\n (totalPages === 0 || page === totalPages)\n }\n onClick={() => {\n if (totalPages === 0 || page < totalPages) {\n onPageChange?.(page + 1);\n }\n }}\n />\n </li>\n </ul>\n );\n },\n);\n\nPaginationList.displayName = \"PaginationList\";\n","import cx from \"classnames\";\n\nimport { Text } from \"../../Text\";\n\nimport styles from \"./PaginationTotalCount.module.scss\";\n\nexport const PaginationTotalCount = ({\n itemRangeText,\n className,\n}: {\n itemRangeText: string;\n className?: string;\n}) => {\n const paginationTotalCountClassName = cx(\n styles[\"pagination-total-count\"],\n className,\n );\n return (\n <Text\n size=\"small\"\n className={paginationTotalCountClassName}\n aria-hidden=\"true\"\n >\n {itemRangeText}\n </Text>\n );\n};\n","import { type ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport cx from \"classnames\";\n\nimport { PaginationItem } from \"./PaginationItem\";\nimport { PaginationOverflowMenu } from \"./PaginationOverflowMenu\";\nimport { PaginationItemsPerPageMenu } from \"./PaginationItemsPerPageMenu\";\nimport { PaginationList } from \"./PaginationList\";\nimport { PaginationTotalCount } from \"./PaginationTotalCount\";\n\nimport styles from \"./Pagination.module.scss\";\n\n/**\n * Props for the Pagination component\n * @extends ComponentPropsWithoutRef<\"nav\">\n */\nexport type PaginationProps = ComponentPropsWithoutRef<\"nav\">;\n\n/**\n * Pagination component for navigating through paginated content.\n *\n * Features:\n * - Provides navigation controls for paginated data\n * - Supports compound components for flexible pagination layouts\n * - Includes list, items, overflow menu, items per page menu, and total count\n * - Accessible navigation with proper ARIA roles\n * - Customizable styling and layout\n *\n * @example\n * <Pagination>\n * <Pagination.List>\n * <Pagination.Item>1</Pagination.Item>\n * <Pagination.Item>2</Pagination.Item>\n * <Pagination.OverflowMenu />\n * <Pagination.Item>10</Pagination.Item>\n * </Pagination.List>\n * <Pagination.ItemsPerPageMenu />\n * <Pagination.TotalCount />\n * </Pagination>\n */\nexport const Pagination = Object.assign(\n forwardRef<HTMLElement, PaginationProps>(\n function PaginationInner(props, ref) {\n const { className, children, ...rest } = props;\n\n const paginationClassName = cx(styles.pagination, className);\n\n return (\n <nav ref={ref} className={paginationClassName} {...rest}>\n {children}\n </nav>\n );\n },\n ),\n {\n List: PaginationList,\n Item: PaginationItem,\n OverflowMenu: PaginationOverflowMenu,\n ItemsPerPageMenu: PaginationItemsPerPageMenu,\n TotalCount: PaginationTotalCount,\n },\n);\nPagination.displayName = \"Pagination\";\n","import { useMemo, useRef } from \"react\";\n\nexport type PageArrayItem =\n | { type: \"page\"; page: number }\n | { type: \"overflow\"; startPage: number; endPage: number; length: number };\n\n/**\n * Custom hook for managing pagination array state and generation.\n *\n * Features:\n * - Automatically generates pagination array based on current page and total pages\n * - Avoids unnecessary regeneration if the current page is already visible\n * - Updates array when page or total pages change and the visible set must change\n * - Handles jumps to first/last page with overflow between current and target\n * - Provides stable reference for the current pagination array\n *\n * @param page The currently selected page\n * @param totalPages Total number of pages\n * @param maxArrayLength Maximum length of the pagination array (including overflows)\n * @returns The current pagination array\n *\n * @example\n * const pageArray = usePaginationArray({\n * page: 5,\n * totalPages: 10,\n * maxArrayLength: 7\n * });\n */\nexport const usePaginationArray = ({\n page,\n totalPages,\n maxArrayLength = 7,\n}: {\n page: number;\n totalPages: number;\n maxArrayLength?: number;\n}): PageArrayItem[] => {\n const prevRef = useRef<{\n array: PageArrayItem[];\n totalPages: number;\n maxArrayLength: number;\n prevPage: number;\n } | null>(null);\n\n return useMemo(() => {\n const maxPagesToShow = maxArrayLength - 2;\n let result: PageArrayItem[] = [];\n const addRange = (start: number, end: number) => {\n const count = end - start + 1;\n if (count === 1) {\n result.push({ type: \"page\", page: start });\n } else if (count >= 2) {\n result.push({\n type: \"overflow\",\n startPage: start,\n endPage: end,\n length: count,\n });\n }\n };\n\n if (totalPages <= maxArrayLength) {\n result = Array.from({ length: totalPages }, (_, i) => ({\n type: \"page\" as const,\n page: i + 1,\n }));\n } else if (page <= maxPagesToShow) {\n // Leading section\n for (let i = 1; i <= maxPagesToShow; i++) {\n result.push({ type: \"page\", page: i });\n }\n addRange(maxArrayLength - 1, totalPages - 1);\n result.push({ type: \"page\", page: totalPages });\n } else if (page >= totalPages - maxPagesToShow + 1) {\n // Trailing section\n result.push({ type: \"page\", page: 1 });\n addRange(2, totalPages - maxPagesToShow);\n for (let i = totalPages - (maxPagesToShow - 1); i <= totalPages; i++) {\n result.push({ type: \"page\", page: i });\n }\n } else {\n // Middle section\n result.push({ type: \"page\", page: 1 });\n addRange(2, page - 2);\n result.push({ type: \"page\", page: page - 1 });\n result.push({ type: \"page\", page: page });\n result.push({ type: \"page\", page: page + 1 });\n addRange(page + 2, totalPages - 1);\n result.push({ type: \"page\", page: totalPages });\n }\n\n const prev = prevRef.current;\n\n // Check if we should remake array due to overflow between pages or new page being in overflow\n let shouldRemakeForJump = false;\n if (\n prev &&\n prev.totalPages === totalPages &&\n prev.maxArrayLength === maxArrayLength\n ) {\n // Check if there is overflow between the new page and the current page\n const start = Math.min(prev.prevPage, page);\n const end = Math.max(prev.prevPage, page);\n const hasOverflowBetween = prev.array.some(\n (item) =>\n item.type === \"overflow\" &&\n // Check if overflow intersects with the range (not completely covers)\n !(item.endPage < start || item.startPage > end),\n );\n\n // Check if the new page is part of an overflow\n const newPageInOverflow = prev.array.some(\n (item) =>\n item.type === \"overflow\" &&\n item.startPage <= page &&\n item.endPage >= page,\n );\n\n shouldRemakeForJump = hasOverflowBetween || newPageInOverflow;\n }\n\n // If we should remake for jump, always return the new array\n if (shouldRemakeForJump) {\n prevRef.current = {\n array: result,\n totalPages,\n maxArrayLength,\n prevPage: page,\n };\n return result;\n }\n\n // Optimization: if the new page is already present in the previous array, reuse the array\n if (\n prev &&\n prev.totalPages === totalPages &&\n prev.maxArrayLength === maxArrayLength &&\n prev.array.some((item) => item.type === \"page\" && item.page === page)\n ) {\n return prev.array;\n }\n\n prevRef.current = {\n array: result,\n totalPages,\n maxArrayLength,\n prevPage: page,\n };\n return result;\n }, [page, totalPages, maxArrayLength]);\n};\n","import { forwardRef, useLayoutEffect, useRef, useState } from \"react\";\nimport { core } from \"@servicetitan/hammer-token\";\n\nimport type { DataTrackingId } from \"../../types\";\nimport { SrOnly } from \"../SrOnly\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\n\nimport {\n Pagination as BasePagination,\n type PaginationProps as BasePaginationProps,\n} from \"./internal/Pagination\";\nimport { usePaginationArray } from \"./internal/usePaginationArray\";\n\n/**\n * Props for the Pagination component\n * @property {number} page - The current page number\n * @property {number} itemsPerPage - Number of items displayed per page\n * @property {number[]} [itemsPerPageOptions] - Available options for items per page selection\n * @property {number} [totalItemCount] - Total number of items across all pages\n * @property {boolean} [showCount] - Whether to display the item count information\n * @property {(page: number) => void} [onPageChange] - Callback when page changes\n * @property {(itemsPerPage: number) => void} [onItemsPerPageChange] - Callback when items per page changes\n * @property {string} [itemsPerPageLabel] - Custom label displayed before the items-per-page selector. Defaults to \"Rows per page\"\n * @extends Omit<BasePaginationProps, \"children\">\n * @extends DataTrackingId\n */\nexport type PaginationProps = Omit<BasePaginationProps, \"children\"> &\n DataTrackingId & {\n page: number;\n itemsPerPage: number;\n itemsPerPageOptions?: number[];\n totalItemCount?: number;\n showCount?: boolean;\n onPageChange?: (page: number) => void;\n onItemsPerPageChange?: (itemsPerPage: number) => void;\n itemsPerPageLabel?: string;\n };\n\n/**\n * Pagination component: page navigation controls — next, previous, and page numbers — for moving through a long, paged set of results. Includes automatic page array generation.\n *\n * Features:\n * - Automatic page array generation with overflow handling\n * - Supports items per page selection with customizable options\n * - Displays item count information with screen reader support\n * - Handles edge cases like invalid page numbers\n * - Includes previous/next navigation buttons\n * - Supports overflow menus for large page ranges\n * - Fully accessible with proper ARIA attributes\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Pagination\n * page={1}\n * itemsPerPage={10}\n * totalItemCount={100}\n * itemsPerPageOptions={[10, 20, 50]}\n * showCount={true}\n * onPageChange={(page) => console.log('Page changed to:', page)}\n * onItemsPerPageChange={(itemsPerPage) => console.log('Items per page:', itemsPerPage)}\n * />\n */\nexport const Pagination = forwardRef<HTMLDivElement, PaginationProps>(\n (props, ref) => {\n const {\n \"aria-label\": ariaLabel,\n page,\n itemsPerPage,\n itemsPerPageOptions,\n totalItemCount: totalItemCountProp,\n showCount,\n onPageChange,\n onItemsPerPageChange,\n itemsPerPageLabel,\n className,\n ...rest\n } = props;\n\n const data = {\n \"aria-label\": ariaLabel,\n };\n\n const trackingId = useTrackingId({\n name: \"Pagination\",\n data,\n hasOverride: !!rest[\"data-tracking-id\"],\n });\n const totalItemCount = totalItemCountProp ?? 0;\n const totalPages = Math.ceil(totalItemCount / itemsPerPage);\n const elRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n const [isNarrow, setIsNarrow] = useState(false);\n\n const pageArray = usePaginationArray({\n page,\n totalPages,\n maxArrayLength: 7,\n });\n\n // Check if current page is available in the pageArray, fallback to page 1 if not\n const isPageAvailable = pageArray.some(\n (item) => item.type === \"page\" && item.page === page,\n );\n\n if (!isPageAvailable && page !== 1 && totalPages > 0) {\n // Use requestAnimationFrame to avoid calling onPageChange during render\n requestAnimationFrame(() => {\n onPageChange?.(1);\n });\n }\n\n const firstItem = totalItemCount > 0 ? 1 + (page - 1) * itemsPerPage : 0;\n const lastItem = Math.min(firstItem - 1 + itemsPerPage, totalItemCount);\n const itemRangeText =\n totalItemCountProp === 0\n ? \"0 items\"\n : `${firstItem} - ${lastItem} of ${totalItemCount} items`;\n\n useLayoutEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setIsNarrow(\n entry.contentRect.width <\n Number(core.primitive.BreakpointSm.value.replace(\"px\", \"\")),\n );\n }\n });\n if (elRef.current) {\n resizeObserver.observe(elRef.current);\n }\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n return (\n <BasePagination\n ref={combinedRef}\n data-tracking-id={trackingId}\n className={className}\n aria-label={ariaLabel || \"Pagination navigation\"}\n {...rest}\n >\n <BasePagination.List\n page={page}\n totalPages={totalPages}\n hasTotalItemCount={totalItemCountProp !== undefined}\n onPageChange={(page) => onPageChange?.(page)}\n >\n {pageArray.map((item) => {\n if (item.type === \"page\") {\n return (\n <BasePagination.Item\n key={item.page}\n page={item.page}\n isActive={item.page === page}\n onClick={() => onPageChange?.(item.page)}\n />\n );\n }\n return (\n <BasePagination.OverflowMenu\n key={item.startPage}\n startPage={item.startPage}\n endPage={item.endPage}\n length={item.length}\n currentPage={page}\n onItemClick={(item) => onPageChange?.(item)}\n />\n );\n })}\n </BasePagination.List>\n {isNarrow === false && (\n <>\n {itemsPerPageOptions && (\n <BasePagination.ItemsPerPageMenu\n itemsPerPage={itemsPerPage}\n itemsPerPageOptions={itemsPerPageOptions}\n onItemsPerPageChange={(itemsPerPage) =>\n onItemsPerPageChange?.(itemsPerPage)\n }\n itemsPerPageLabel={itemsPerPageLabel}\n />\n )}\n {showCount && totalItemCountProp !== undefined && (\n <BasePagination.TotalCount itemRangeText={itemRangeText} />\n )}\n </>\n )}\n <SrOnly aria-live=\"polite\" aria-atomic=\"true\">\n Page {page} of {totalPages}, {itemRangeText}\n </SrOnly>\n </BasePagination>\n );\n },\n);\n\nPagination.displayName = \"Pagination\";\n"],"names":["styles","IconMoreHoriz","ref","IconKeyboardArrowDown","IconKeyboardArrowLeft","IconKeyboardArrowRight","Pagination","core.primitive.BreakpointSm","BasePagination","page","item","itemsPerPage"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SavedFiltersButton-FcYVncxU.js","sources":["../src/beta/components/SavedFiltersButton/internal/AddSavedFilterDrawer.tsx","../src/beta/components/SavedFiltersButton/internal/EditSavedFiltersDrawer.tsx","../src/beta/components/SavedFiltersButton/SavedFiltersButton.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport Button from \"../../../../components/Button\";\nimport Drawer from \"../../../../components/Drawer\";\nimport Flex from \"../../../../components/Flex\";\nimport { TextField } from \"../../../../components/TextField\";\nimport type { Filter } from \"../../FilterBar/internal/types\";\n\ntype AddSavedFilterDrawerProps = {\n open: boolean;\n onClose: () => void;\n /** Snapshot of filters captured when the drawer opened. */\n filtersSnapshot: Filter[];\n onSave: (payload: {\n name: string;\n filters: Filter[];\n }) => void | Promise<void>;\n /**\n * Consumer-supplied name validator. Returning a string blocks Add and is\n * surfaced as the field's error message; `undefined` allows submit.\n */\n validateName?: (name: string) => string | undefined;\n};\n\n/**\n * Drawer rendered when the user clicks \"Save Current Filter\" in the\n * SavedFiltersButton popover. Captures a name and emits `onSave` with the\n * filters snapshot. Supports async `onSave`; while pending the Add button\n * shows a loading spinner and the form is disabled.\n *\n * If `onSave` rejects, the drawer stays open with the current input so the\n * user can retry or cancel. On success the drawer closes.\n */\nexport const AddSavedFilterDrawer = ({\n open,\n onClose,\n filtersSnapshot,\n onSave,\n validateName,\n}: AddSavedFilterDrawerProps) => {\n const [name, setName] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [submitError, setSubmitError] = useState<string | undefined>(undefined);\n // After a successful save, the consumer will likely add the just-saved\n // name into their `savedFilters` list synchronously. If we keep running\n // `validateName` against the current input we'll flash a \"name already\n // exists\" error (the validator now sees our own freshly-created preset)\n // before the parent unmounts us. This flag suspends validation between\n // `onSave` resolving and the drawer actually closing.\n const [justSubmitted, setJustSubmitted] = useState(false);\n\n // Reset state every time the drawer opens. We don't reset on close so the\n // closing animation can flush without snapping the visible state mid-tween.\n useEffect(() => {\n if (open) {\n setName(\"\");\n setSubmitting(false);\n setSubmitError(undefined);\n setJustSubmitted(false);\n }\n }, [open]);\n\n const trimmed = name.trim();\n const validationError =\n !justSubmitted && validateName ? validateName(trimmed) : undefined;\n const canSubmit = trimmed.length > 0 && !validationError && !submitting;\n\n const handleAdd = async () => {\n if (!canSubmit) return;\n setSubmitting(true);\n setSubmitError(undefined);\n try {\n await onSave({ name: trimmed, filters: filtersSnapshot });\n // Suspend validation; the parent will close us synchronously, but the\n // closing transition keeps us mounted for a beat — long enough to\n // re-render with the consumer's updated savedFilters list, which\n // otherwise would now collide with our input value.\n setJustSubmitted(true);\n onClose();\n } catch (err) {\n setSubmitError(\n err instanceof Error && err.message\n ? err.message\n : \"Failed to save filter.\",\n );\n setSubmitting(false);\n }\n };\n\n const handleCancel = () => {\n if (submitting) return;\n onClose();\n };\n\n return (\n <Drawer open={open} onClose={handleCancel}>\n <Drawer.Header>Save Current Filter</Drawer.Header>\n <Drawer.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n <TextField\n label=\"Filter Name\"\n placeholder=\"Name this filter\"\n value={name}\n onChange={(e) => setName(e?.target.value ?? \"\")}\n disabled={submitting}\n required\n error={submitError ?? validationError}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && canSubmit) {\n e.preventDefault();\n handleAdd();\n }\n }}\n />\n </Flex>\n </Drawer.Content>\n <Drawer.Footer>\n <Flex justifyContent=\"flex-end\" gap=\"3\" grow={1}>\n <Button onClick={handleCancel} disabled={submitting}>\n Cancel\n </Button>\n <Button\n appearance=\"primary\"\n onClick={handleAdd}\n disabled={!canSubmit}\n loading={submitting}\n >\n Add Saved Filter\n </Button>\n </Flex>\n </Drawer.Footer>\n </Drawer>\n );\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport IconEdit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\nimport Alert from \"../../../../components/Alert\";\nimport Button from \"../../../../components/Button\";\nimport Divider from \"../../../../components/Divider\";\nimport {\n DndSort,\n type DndSortChangeEvent,\n} from \"../../../../components/DndSort\";\nimport Drawer from \"../../../../components/Drawer\";\nimport { DrillDown, useDrillDown } from \"../../../../components/DrillDown\";\nimport Flex from \"../../../../components/Flex\";\nimport Text from \"../../../../components/Text\";\nimport { TextField } from \"../../../../components/TextField\";\nimport { DateListDialog } from \"../../FilterBar/FilterDateList\";\nimport { getAdapter } from \"../../FilterBar/internal/adapters\";\nimport {\n cloneFiltersWithItemRefs,\n updateSingleFilter,\n} from \"../../FilterBar/internal/utils/filter-state\";\nimport type {\n DateListFilter,\n DateListLibraryOptionId,\n Filter,\n} from \"../../FilterBar/internal/types\";\nimport type { SavedFilter, SavedFiltersAlertText } from \"../types\";\n\n/**\n * Settled outcome of a delete or update operation. Surfaced as an Alert on\n * the list view of the drawer; persists until the drawer closes or another\n * outcome replaces it.\n */\ntype DrawerAlert = {\n status: \"success\" | \"danger\";\n title: string;\n};\n\ntype EditSavedFiltersDrawerProps = {\n open: boolean;\n onClose: () => void;\n savedFilters: SavedFilter[];\n /** Drilldown's \"Update Filter\" action. May return a promise. */\n onUpdate?: (\n id: string,\n update: { name: string; filters: SavedFilter[\"filters\"] },\n ) => void | Promise<void>;\n /** Drilldown's \"Delete Filter\" action. May return a promise. */\n onDelete?: (id: string) => void | Promise<void>;\n /**\n * Optional drag-to-reorder callback. When provided, the list view renders\n * each row as a `DndSort.Card` with a drag handle and emits the new\n * `orderedIds` after a drop. When omitted, the list renders as a static\n * stack with no handles.\n */\n onReorder?: (orderedIds: string[]) => void | Promise<void>;\n /**\n * Optional validator for the name field in the drilldown. The `currentId`\n * is set to the preset being edited so the consumer can permit the row's\n * own name in uniqueness checks.\n */\n validateName?: (name: string, currentId?: string) => string | undefined;\n /** Optional override for the auto-managed alert text. */\n alertText?: SavedFiltersAlertText;\n};\n\nconst DEFAULT_ALERT_TEXT: Required<SavedFiltersAlertText> = {\n saveSuccess: \"Filter saved.\",\n saveError: \"Failed to save filter.\",\n updateSuccess: \"Filter updated.\",\n updateError: \"Failed to update filter.\",\n deleteSuccess: \"Filter deleted.\",\n deleteError: \"Failed to delete filter.\",\n reorderError: \"Failed to reorder filters.\",\n};\n\n/** The per-preset edit screen lives at drilldown index 0. */\nconst EDIT_INDEX = 0;\n\n/**\n * Drawer that lets the user manage existing saved filters. Composed of two\n * views — a list of presets (the Drawer host) and a per-preset edit screen\n * (a `DrillDown` child) that reuses the FilterBar adapter `renderDrawer`\n * machinery to render edit fields. Navigation between the two is driven by\n * `useDrillDown`, which also wires the back-button affordance built into\n * `DrillDown.Header`.\n */\nexport const EditSavedFiltersDrawer = ({\n open,\n onClose,\n savedFilters,\n onUpdate,\n onDelete,\n onReorder,\n validateName,\n alertText,\n}: EditSavedFiltersDrawerProps) => {\n const { setIndex, back, drillDownProps } = useDrillDown();\n\n // Which preset the user clicked Edit on. `null` while on the list view.\n // We track this ourselves because DrillDown only tracks \"which screen is\n // active,\" not \"which preset is being edited.\"\n const [editingId, setEditingId] = useState<string | null>(null);\n\n // Drilldown-local form state. Re-seeded whenever a new preset is opened\n // (i.e. editingId changes); not re-seeded on each parent re-render so the\n // consumer can hot-swap `savedFilters` mid-edit without clobbering edits.\n const [drilldownName, setDrilldownName] = useState(\"\");\n const [drilldownDraft, setDrilldownDraft] = useState<Filter[]>([]);\n const [dateListDialogState, setDateListDialogState] = useState<{\n filterId: string;\n libraryId: DateListLibraryOptionId;\n } | null>(null);\n const [submitting, setSubmitting] = useState<\"update\" | \"delete\" | null>(\n null,\n );\n const [submitError, setSubmitError] = useState<string | null>(null);\n\n const seededForRef = useRef<string | null>(null);\n\n // Alerts surface settled outcomes from update / delete / reorder.\n // listAlert appears at the top of the list view (most outcomes return\n // there); drilldownAlert appears at the top of the drilldown content when\n // an Update failed and we need to keep the user's in-progress edits\n // available for retry.\n const [listAlert, setListAlert] = useState<DrawerAlert | null>(null);\n const [drilldownAlert, setDrilldownAlert] = useState<DrawerAlert | null>(\n null,\n );\n\n // Reset everything on drawer close so the next open starts at the list\n // with no stale state.\n useEffect(() => {\n if (!open) {\n setEditingId(null);\n seededForRef.current = null;\n setSubmitError(null);\n setSubmitting(null);\n setListAlert(null);\n setDrilldownAlert(null);\n setIndex(undefined);\n }\n }, [open, setIndex]);\n\n const drilldownTarget = editingId\n ? savedFilters.find((s) => s.id === editingId)\n : undefined;\n\n // Seed the drilldown form when entering edit on a new preset. Not\n // re-seeded when the consumer's savedFilters array updates mid-edit —\n // once a drilldown is open, the user's edits are authoritative until\n // they Update, Delete, or Cancel.\n useEffect(() => {\n if (!editingId || !drilldownTarget) return;\n if (seededForRef.current === editingId) return;\n seededForRef.current = editingId;\n setDrilldownName(drilldownTarget.name);\n setDrilldownDraft(cloneFiltersWithItemRefs(drilldownTarget.filters));\n setSubmitError(null);\n }, [editingId, drilldownTarget]);\n\n const resolvedAlertText = useMemo(\n () => ({ ...DEFAULT_ALERT_TEXT, ...alertText }),\n [alertText],\n );\n\n const handleEdit = useCallback(\n (id: string) => {\n setListAlert(null);\n setEditingId(id);\n setIndex(EDIT_INDEX);\n },\n [setIndex],\n );\n\n // DndSort's drop event carries the new id ordering for the zone; we hand\n // that straight to the consumer so they can re-sort `savedFilters`. The\n // callback may return a promise — a rejection surfaces as a danger alert\n // on the list view (matching the delete-failure pattern) so failures\n // aren't invisible. A thrown `Error` with a message takes precedence over\n // the configured `reorderError` text, mirroring update / delete.\n const handleDrop = useCallback(\n (event: DndSortChangeEvent) => {\n if (!onReorder || !event.valid || !event.zoneSort) return;\n Promise.resolve(onReorder(event.zoneSort.map((id) => String(id)))).catch(\n (err) => {\n console.error(\n \"SavedFiltersButton onReorderSavedFilters failed:\",\n err,\n );\n setListAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.reorderError,\n });\n },\n );\n },\n [onReorder, resolvedAlertText],\n );\n\n const sortedIds = useMemo(\n () => savedFilters.map((s) => s.id),\n [savedFilters],\n );\n\n // Pop back to the list. Clears form scratch state so the next drilldown\n // entry seeds fresh, and clears the drilldown's error alert.\n const handleBackToList = useCallback(() => {\n seededForRef.current = null;\n setEditingId(null);\n setSubmitError(null);\n setDrilldownAlert(null);\n back();\n }, [back]);\n\n const handleDraftChange = useCallback((filterId: string, value: unknown) => {\n setDrilldownDraft((prev) => updateSingleFilter(prev, filterId, value));\n }, []);\n\n const requestDateListDialog = useCallback(\n (filterId: string, libraryId: DateListLibraryOptionId) => {\n setDateListDialogState({ filterId, libraryId });\n },\n [],\n );\n\n // Render the per-filter form fields by delegating to each adapter's\n // renderDrawer — the exact same machinery FilterDrawer uses, so any\n // adapter that works there works here too.\n const drilldownForm = useMemo(() => {\n if (!drilldownTarget) return null;\n return drilldownDraft.map((draftFilter) => {\n const originalFilter =\n drilldownTarget.filters.find((f) => f.id === draftFilter.id) ??\n draftFilter;\n return getAdapter(draftFilter).renderDrawer({\n originalFilter,\n draftFilter,\n onDraftChange: handleDraftChange,\n requestDateListDialog,\n });\n });\n }, [\n drilldownDraft,\n drilldownTarget,\n handleDraftChange,\n requestDateListDialog,\n ]);\n\n const trimmedName = drilldownName.trim();\n const validationError =\n validateName && editingId\n ? validateName(trimmedName, editingId)\n : undefined;\n const canSubmit =\n editingId !== null &&\n trimmedName.length > 0 &&\n !validationError &&\n submitting === null;\n\n const handleUpdate = useCallback(async () => {\n if (!editingId || !onUpdate || !canSubmit) return;\n setSubmitting(\"update\");\n setSubmitError(null);\n setDrilldownAlert(null);\n try {\n await onUpdate(editingId, {\n name: trimmedName,\n filters: drilldownDraft,\n });\n // Success: pop back to the list with a success alert.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"success\",\n title: resolvedAlertText.updateSuccess,\n });\n } catch (err) {\n // Failure: stay in drilldown so the user can adjust and retry. The\n // server error surfaces as a drilldown-level alert above the form.\n setDrilldownAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.updateError,\n });\n setSubmitting(null);\n }\n }, [\n editingId,\n onUpdate,\n canSubmit,\n trimmedName,\n drilldownDraft,\n resolvedAlertText,\n back,\n ]);\n\n const handleDelete = useCallback(async () => {\n if (!editingId || !onDelete || submitting !== null) return;\n if (drilldownTarget?.disableDelete) return;\n setSubmitting(\"delete\");\n setSubmitError(null);\n setDrilldownAlert(null);\n try {\n await onDelete(editingId);\n // Success: pop back to the list with a success alert.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"success\",\n title: resolvedAlertText.deleteSuccess,\n });\n } catch (err) {\n // Failure: pop back to the list with an error alert — the drilldown\n // had nothing to preserve since the user was trying to remove the\n // row entirely.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.deleteError,\n });\n }\n }, [\n editingId,\n onDelete,\n submitting,\n drilldownTarget,\n resolvedAlertText,\n back,\n ]);\n\n // dateList dialog target derives from drilldownDraft (so the dialog can\n // pre-seed from whatever's currently in the draft).\n const dateListDialogTarget = dateListDialogState\n ? drilldownDraft.find(\n (f): f is DateListFilter =>\n f.id === dateListDialogState.filterId && f.type === \"dateList\",\n )\n : undefined;\n const dateListDialogSelected = dateListDialogTarget?.selectedOption;\n const dateListDialogInitialValue =\n dateListDialogSelected &&\n dateListDialogSelected.id === dateListDialogState?.libraryId &&\n dateListDialogSelected.value !== null\n ? dateListDialogSelected.value\n : undefined;\n\n const drilldownTitle = drilldownTarget?.name ?? \"Edit Saved Filter\";\n\n return (\n <>\n <Drawer open={open} onClose={onClose} {...drillDownProps}>\n {/* Host view — the saved-filters list. Visible whenever no\n DrillDown screen is active. */}\n <Drawer.Header>Edit Saved Filters</Drawer.Header>\n <Drawer.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n {listAlert && (\n <Alert title={listAlert.title} status={listAlert.status} />\n )}\n {savedFilters.length === 0 ? (\n <Text subdued size=\"small\">\n No saved filters to edit.\n </Text>\n ) : onReorder ? (\n <DndSort onDrop={handleDrop}>\n <DndSort.Zone\n sortable\n id=\"saved-filters-zone\"\n label=\"Saved filters\"\n orientation=\"vertical\"\n sortedIds={sortedIds}\n gap=\"2\"\n >\n {savedFilters.map((saved) => (\n <DndSort.Card\n key={saved.id}\n id={saved.id}\n label={saved.name}\n dragOnlyWithHandle\n >\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"2\"\n grow={1}\n >\n <Text>{saved.name}</Text>\n {!saved.disableEdit && (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={IconEdit}\n aria-label={`Edit ${saved.name}`}\n onClick={() => handleEdit(saved.id)}\n />\n )}\n </Flex>\n </DndSort.Card>\n ))}\n </DndSort.Zone>\n </DndSort>\n ) : (\n <Flex direction=\"column\" gap=\"2\">\n {savedFilters.map((saved) => (\n <Flex\n key={saved.id}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"2\"\n >\n <Text>{saved.name}</Text>\n {!saved.disableEdit && (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={IconEdit}\n aria-label={`Edit ${saved.name}`}\n onClick={() => handleEdit(saved.id)}\n />\n )}\n </Flex>\n ))}\n </Flex>\n )}\n </Flex>\n </Drawer.Content>\n <Drawer.Footer>\n <Flex justifyContent=\"flex-end\" grow={1}>\n <Button onClick={onClose}>Close</Button>\n </Flex>\n </Drawer.Footer>\n\n {/* Per-preset edit screen. `DrillDown.Header` brings its own back\n button (aria-label \"Previous\"); we hook into `back()` via our\n handleBackToList to clear local form scratch state when popping\n back to the list. */}\n <DrillDown index={EDIT_INDEX}>\n <DrillDown.Header>{drilldownTitle}</DrillDown.Header>\n <DrillDown.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n {drilldownAlert && (\n <Alert\n title={drilldownAlert.title}\n status={drilldownAlert.status}\n />\n )}\n <TextField\n label=\"Filter Name\"\n placeholder=\"Name this filter\"\n value={drilldownName}\n onChange={(e) => setDrilldownName(e?.target.value ?? \"\")}\n disabled={submitting !== null}\n required\n error={submitError ?? validationError}\n />\n <Divider />\n {drilldownForm}\n </Flex>\n </DrillDown.Content>\n <DrillDown.Footer>\n <Flex\n justifyContent={\n drilldownTarget?.disableDelete ? \"flex-end\" : \"space-between\"\n }\n gap=\"3\"\n grow={1}\n >\n {!drilldownTarget?.disableDelete && (\n <Button\n appearance=\"danger-secondary\"\n onClick={handleDelete}\n loading={submitting === \"delete\"}\n disabled={submitting !== null}\n >\n Delete Filter\n </Button>\n )}\n <Flex gap=\"3\">\n <Button\n onClick={handleBackToList}\n disabled={submitting !== null}\n >\n Cancel\n </Button>\n <Button\n appearance=\"primary\"\n onClick={handleUpdate}\n disabled={!canSubmit}\n loading={submitting === \"update\"}\n >\n Update Filter\n </Button>\n </Flex>\n </Flex>\n </DrillDown.Footer>\n </DrillDown>\n </Drawer>\n <DateListDialog\n libraryId={dateListDialogState?.libraryId ?? null}\n parentFilterId={dateListDialogState?.filterId ?? \"\"}\n initialValue={dateListDialogInitialValue}\n mode={dateListDialogTarget?.mode}\n dialogCtaLabel=\"Save\"\n onCommit={(option) => {\n if (dateListDialogState) {\n handleDraftChange(dateListDialogState.filterId, option);\n }\n setDateListDialogState(null);\n }}\n onCancel={() => setDateListDialogState(null)}\n />\n </>\n );\n};\n","import {\n type KeyboardEvent,\n type ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport IconAdd from \"@servicetitan/hammer-icon/mdi/round/add.svg\";\nimport IconEdit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\n\nimport Button from \"../../../components/Button\";\nimport { Text } from \"../../../components/Text\";\nimport { Flex } from \"../../../components/Flex\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsPanel } from \"../../../internal/components/OptionsPanel\";\nimport type { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport type { CheckState } from \"../../../types\";\nimport { useMenuInteraction } from \"../../../components/SelectMenu/internal/useMenuInteraction\";\nimport { FilterTriggerButton } from \"../FilterBar/FilterTriggerButton\";\nimport styles from \"./SavedFiltersButton.module.scss\";\nimport type { SavedFiltersButtonProps } from \"./types\";\nimport { AddSavedFilterDrawer } from \"./internal/AddSavedFilterDrawer\";\nimport { EditSavedFiltersDrawer } from \"./internal/EditSavedFiltersDrawer\";\n\n/**\n * `SavedFiltersButton` is an opt-in companion to FilterBar that lets users\n * apply, save, edit, and delete preset filter selections. It is fully\n * stateless: the consumer owns the `savedFilters` array and writes its own\n * persistence (server, localStorage, etc.) by reacting to the callbacks the\n * component fires.\n *\n * Visually it's a single Button trigger that opens a popover listing the\n * presets, with two footer actions:\n *\n * - **Save Current Filter** opens a drawer that snapshots `currentFilters`\n * into a new preset.\n * - **Edit Saved Filters** opens a drawer listing every preset with edit\n * affordances; clicking edit on a row drills into a per-preset form\n * reusing the FilterBar adapter `renderDrawer` machinery.\n *\n * Apply, save, update, and delete are all delivered as consumer callbacks\n * (`onApplySavedFilter`, `onSaveCurrentFilter`, `onUpdateSavedFilter`,\n * `onDeleteSavedFilter`). Promise-returning callbacks are supported with\n * loading state on the relevant submit button and success/error alerts on\n * the parent drawer.\n *\n * @example\n * <SavedFiltersButton\n * savedFilters={presets}\n * currentFilters={filters}\n * onApplySavedFilter={(preset) => setFilters(preset.filters)}\n * onSaveCurrentFilter={async ({ name, filters }) => {\n * await api.savePreset({ name, filters });\n * refetchPresets();\n * }}\n * onUpdateSavedFilter={async (id, update) => api.updatePreset(id, update)}\n * onDeleteSavedFilter={async (id) => api.deletePreset(id)}\n * />\n */\nexport const SavedFiltersButton = (props: SavedFiltersButtonProps) => {\n const {\n savedFilters,\n currentFilters,\n onApplySavedFilter,\n onSaveCurrentFilter,\n onUpdateSavedFilter,\n onDeleteSavedFilter,\n onReorderSavedFilters,\n validateName,\n alertText,\n activeSavedFilterId,\n label: labelProp,\n emptyState,\n } = props;\n\n const DEFAULT_LABEL = \"Saved Filters\";\n const label = labelProp\n ? labelProp\n : activeSavedFilterId\n ? savedFilters.find((sf) => sf.id === activeSavedFilterId)?.name ||\n DEFAULT_LABEL\n : DEFAULT_LABEL;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n // Synthesize SelectItems so we can reuse the SelectMenu list machinery\n // (OptionsPanel, useMenuInteraction). Each row is one saved filter; the\n // row's id mirrors the preset id.\n const items = useMemo<SelectItem[]>(\n () =>\n savedFilters.map((saved) => ({\n id: saved.id,\n type: \"option\" as const,\n original: { id: saved.id, label: saved.name },\n })),\n [savedFilters],\n );\n\n // Active-preset state is consumer-owned via `activeSavedFilterId`. When\n // the prop names a preset we mark just that row checked; when it's\n // undefined the list reads as a clean unchecked menu (no row has the\n // single-select check affordance).\n const selectedItemIds = useMemo<Set<string | number>>(\n () => (activeSavedFilterId ? new Set([activeSavedFilterId]) : new Set()),\n [activeSavedFilterId],\n );\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState =>\n item.id === activeSavedFilterId ? \"checked\" : \"unchecked\",\n [activeSavedFilterId],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n const saved = savedFilters.find((s) => s.id === item.id);\n if (saved) onApplySavedFilter(saved);\n },\n [savedFilters, onApplySavedFilter],\n );\n\n // We use the SelectMenu menu-interaction hook as-is so keyboard and focus\n // behavior matches the platform's other menu surfaces. Popover-vs-dialog\n // adaptation is fixed to \"popover\" here — saved filters always render\n // inline in a popover even on mobile, since the heavy editing UX lives in\n // the drawer flows.\n const [isOpen, setIsOpen] = useState(false);\n const {\n closeMenu,\n highlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n } = useMenuInteraction({\n items,\n sectionsMeta: [],\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs: \"popover\",\n closeOnActivate: true,\n id: \"saved-filters\",\n triggerRef,\n label,\n isOpen,\n setIsOpen,\n });\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = getTriggerProps();\n\n const [addOpen, setAddOpen] = useState(false);\n const [editOpen, setEditOpen] = useState(false);\n // Snapshot of `currentFilters` captured at the moment the Save drawer\n // opens, so subsequent edits to the bar don't change what gets saved.\n const [filtersSnapshot, setFiltersSnapshot] = useState<typeof currentFilters>(\n [],\n );\n\n const handleSaveCurrentClick = useCallback(() => {\n setFiltersSnapshot(currentFilters);\n closeMenu({ restoreFocus: false });\n setAddOpen(true);\n }, [closeMenu, currentFilters]);\n\n const handleEditClick = useCallback(() => {\n closeMenu({ restoreFocus: false });\n setEditOpen(true);\n }, [closeMenu]);\n\n // Pressing Enter on a row activates via useMenuInteraction; the popover\n // closes on activation, so footer button focus does not contend with it.\n const handleFooterKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n closeMenu();\n }\n };\n\n const footer: ReactElement = (\n <Flex\n direction=\"column\"\n gap=\"2\"\n className={styles[\"footer\"]}\n onKeyDown={handleFooterKeyDown}\n >\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={{ before: IconAdd }}\n style={{ width: \"100%\" }}\n onClick={handleSaveCurrentClick}\n >\n Save Current Filter\n </Button>\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={{ before: IconEdit }}\n style={{ width: \"100%\" }}\n onClick={handleEditClick}\n disabled={savedFilters.length === 0}\n >\n Edit Saved Filters\n </Button>\n </Flex>\n );\n\n return (\n <>\n {/*\n FilterTriggerButton renders the same ghost/toolbar-sized chrome the\n FilterBar uses for every filter trigger, so the saved-filters entry\n point reads as just another control in the bar. `isSelected` mirrors\n whether the consumer has named an active preset via\n `activeSavedFilterId`.\n */}\n <FilterTriggerButton\n {...triggerProps}\n filterId=\"saved-filters\"\n label={label}\n isSelected={!!(activeSavedFilterId ?? false)}\n />\n <OptionsPopover\n id=\"saved-filters-popover\"\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClickOutside}\n width={280}\n footer={footer}\n >\n {items.length === 0 ? (\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n className={styles[\"empty-state\"]}\n >\n {typeof emptyState === \"string\" || emptyState == null ? (\n <Text subdued size=\"small\">\n {emptyState ?? \"No saved filters yet.\"}\n </Text>\n ) : (\n emptyState\n )}\n </Flex>\n ) : (\n <OptionsPanel\n isOpen={isOpen}\n items={items}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n getCheckedState={getCheckedState}\n selectionType=\"single\"\n hasMore={false}\n onLoadMore={() => {}}\n loading={false}\n loadingMore={false}\n />\n )}\n </OptionsPopover>\n <AddSavedFilterDrawer\n open={addOpen}\n onClose={() => setAddOpen(false)}\n filtersSnapshot={filtersSnapshot}\n onSave={onSaveCurrentFilter}\n validateName={validateName ? (name) => validateName(name) : undefined}\n />\n <EditSavedFiltersDrawer\n open={editOpen}\n onClose={() => setEditOpen(false)}\n savedFilters={savedFilters}\n onUpdate={onUpdateSavedFilter}\n onDelete={onDeleteSavedFilter}\n onReorder={onReorderSavedFilters}\n validateName={validateName}\n alertText={alertText}\n />\n </>\n );\n};\n\nSavedFiltersButton.displayName = \"SavedFiltersButton\";\n"],"names":["IconEdit","IconAdd"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAgCO,MAAM,uBAAuB,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,KAAiC;AAC/B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAA6B,MAAS,CAAA;AAO5E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AAIxD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,EAAE,CAAA;AACV,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,cAAA,CAAe,MAAS,CAAA;AACxB,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,IACxB;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,MAAM,kBACJ,CAAC,aAAA,IAAiB,YAAA,GAAe,YAAA,CAAa,OAAO,CAAA,GAAI,MAAA;AAC3D,EAAA,MAAM,YAAY,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,CAAC,mBAAmB,CAAC,UAAA;AAE7D,EAAA,MAAM,YAAY,YAAY;AAC5B,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,cAAA,CAAe,MAAS,CAAA;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,iBAAiB,CAAA;AAKxD,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA;AAAA,QACE,GAAA,YAAe,KAAA,IAAS,GAAA,CAAI,OAAA,GACxB,IAAI,OAAA,GACJ;AAAA,OACN;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,UAAA,EAAY;AAChB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,OAAA,EAAS,YAAA,EAC3B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,CAAO,MAAA,EAAP,EAAc,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,oBAClC,GAAA,CAAC,MAAA,CAAO,OAAA,EAAP,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,GAAA,EAAI,IAAA,EAAM,CAAA,EACrC,QAAA,kBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,aAAA;AAAA,QACN,WAAA,EAAY,kBAAA;AAAA,QACZ,KAAA,EAAO,IAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,QAAQ,CAAA,EAAG,MAAA,CAAO,SAAS,EAAE,CAAA;AAAA,QAC9C,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAQ,IAAA;AAAA,QACR,OAAO,WAAA,IAAe,eAAA;AAAA,QACtB,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,UAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,SAAA,EAAW;AAClC,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,SAAA,EAAU;AAAA,UACZ;AAAA,QACF;AAAA;AAAA,OAEJ,CAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,MAAA,CAAO,MAAA,EAAP,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,cAAA,EAAe,UAAA,EAAW,GAAA,EAAI,GAAA,EAAI,IAAA,EAAM,CAAA,EAC5C,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,YAAY,QAAA,EAAA,QAAA,EAErD,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,UAAA,EAAW,SAAA;AAAA,UACX,OAAA,EAAS,SAAA;AAAA,UACT,UAAU,CAAC,SAAA;AAAA,UACX,OAAA,EAAS,UAAA;AAAA,UACV,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;;ACnEA,MAAM,kBAAA,GAAsD;AAAA,EAC1D,WAAA,EAAa,eAAA;AAAA,EACb,SAAA,EAAW,wBAAA;AAAA,EACX,aAAA,EAAe,iBAAA;AAAA,EACf,WAAA,EAAa,0BAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,WAAA,EAAa,0BAAA;AAAA,EACb,YAAA,EAAc;AAChB,CAAA;AAGA,MAAM,UAAA,GAAa,CAAA;AAUZ,MAAM,yBAAyB,CAAC;AAAA,EACrC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAmC;AACjC,EAAA,MAAM,EAAE,QAAA,EAAU,IAAA,EAAM,cAAA,KAAmB,YAAA,EAAa;AAKxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAwB,IAAI,CAAA;AAK9D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA,CAAmB,EAAE,CAAA;AACjE,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAG5C,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAA;AAAA,IAClC;AAAA,GACF;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAwB,IAAI,CAAA;AAElE,EAAA,MAAM,YAAA,GAAe,OAAsB,IAAI,CAAA;AAO/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA6B,IAAI,CAAA;AACnE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA;AAAA,IAC1C;AAAA,GACF;AAIA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,MAAA,QAAA,CAAS,MAAS,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,QAAQ,CAAC,CAAA;AAEnB,EAAA,MAAM,eAAA,GAAkB,YACpB,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,SAAS,CAAA,GAC3C,MAAA;AAMJ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,eAAA,EAAiB;AACpC,IAAA,IAAI,YAAA,CAAa,YAAY,SAAA,EAAW;AACxC,IAAA,YAAA,CAAa,OAAA,GAAU,SAAA;AACvB,IAAA,gBAAA,CAAiB,gBAAgB,IAAI,CAAA;AACrC,IAAA,iBAAA,CAAkB,wBAAA,CAAyB,eAAA,CAAgB,OAAO,CAAC,CAAA;AACnE,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,SAAA,EAAW,eAAe,CAAC,CAAA;AAE/B,EAAA,MAAM,iBAAA,GAAoB,OAAA;AAAA,IACxB,OAAO,EAAE,GAAG,kBAAA,EAAoB,GAAG,SAAA,EAAU,CAAA;AAAA,IAC7C,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,CAAC,EAAA,KAAe;AACd,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,QAAA,CAAS,UAAU,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAQA,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,CAAC,KAAA,KAA8B;AAC7B,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,MAAM,KAAA,IAAS,CAAC,MAAM,QAAA,EAAU;AACnD,MAAA,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAU,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAC,EAAA,KAAO,MAAA,CAAO,EAAE,CAAC,CAAC,CAAC,CAAA,CAAE,KAAA;AAAA,QACjE,CAAC,GAAA,KAAQ;AACP,UAAA,OAAA,CAAQ,KAAA;AAAA,YACN,kDAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,YAAA,CAAa;AAAA,YACX,MAAA,EAAQ,QAAA;AAAA,YACR,OACE,GAAA,YAAe,KAAA,IAAS,IAAI,OAAA,GACxB,GAAA,CAAI,UACJ,iBAAA,CAAkB;AAAA,WACzB,CAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAW,iBAAiB;AAAA,GAC/B;AAEA,EAAA,MAAM,SAAA,GAAY,OAAA;AAAA,IAChB,MAAM,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,IAClC,CAAC,YAAY;AAAA,GACf;AAIA,EAAA,MAAM,gBAAA,GAAmB,YAAY,MAAM;AACzC,IAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,IAAA,EAAK;AAAA,EACP,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,CAAC,QAAA,EAAkB,KAAA,KAAmB;AAC1E,IAAA,iBAAA,CAAkB,CAAC,IAAA,KAAS,kBAAA,CAAmB,IAAA,EAAM,QAAA,EAAU,KAAK,CAAC,CAAA;AAAA,EACvE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,qBAAA,GAAwB,WAAA;AAAA,IAC5B,CAAC,UAAkB,SAAA,KAAuC;AACxD,MAAA,sBAAA,CAAuB,EAAE,QAAA,EAAU,SAAA,EAAW,CAAA;AAAA,IAChD,CAAA;AAAA,IACA;AAAC,GACH;AAKA,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,iBAAiB,OAAO,IAAA;AAC7B,IAAA,OAAO,cAAA,CAAe,GAAA,CAAI,CAAC,WAAA,KAAgB;AACzC,MAAA,MAAM,cAAA,GACJ,eAAA,CAAgB,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,WAAA,CAAY,EAAE,CAAA,IAC3D,WAAA;AACF,MAAA,OAAO,UAAA,CAAW,WAAW,CAAA,CAAE,YAAA,CAAa;AAAA,QAC1C,cAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA,EAAe,iBAAA;AAAA,QACf;AAAA,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH,CAAA,EAAG;AAAA,IACD,cAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,WAAA,GAAc,cAAc,IAAA,EAAK;AACvC,EAAA,MAAM,kBACJ,YAAA,IAAgB,SAAA,GACZ,YAAA,CAAa,WAAA,EAAa,SAAS,CAAA,GACnC,MAAA;AACN,EAAA,MAAM,SAAA,GACJ,cAAc,IAAA,IACd,WAAA,CAAY,SAAS,CAAA,IACrB,CAAC,mBACD,UAAA,KAAe,IAAA;AAEjB,EAAA,MAAM,YAAA,GAAe,YAAY,YAAY;AAC3C,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,QAAA,IAAY,CAAC,SAAA,EAAW;AAC3C,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,SAAA,EAAW;AAAA,QACxB,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAED,MAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,IAAA,EAAK;AACL,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,YAAA,CAAa;AAAA,QACX,MAAA,EAAQ,SAAA;AAAA,QACR,OAAO,iBAAA,CAAkB;AAAA,OAC1B,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AAGZ,MAAA,iBAAA,CAAkB;AAAA,QAChB,MAAA,EAAQ,QAAA;AAAA,QACR,OACE,GAAA,YAAe,KAAA,IAAS,IAAI,OAAA,GACxB,GAAA,CAAI,UACJ,iBAAA,CAAkB;AAAA,OACzB,CAAA;AACD,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG;AAAA,IACD,SAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,YAAY,YAAY;AAC3C,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,QAAA,IAAY,eAAe,IAAA,EAAM;AACpD,IAAA,IAAI,iBAAiB,aAAA,EAAe;AACpC,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,SAAS,CAAA;AAExB,MAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,IAAA,EAAK;AACL,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,YAAA,CAAa;AAAA,QACX,MAAA,EAAQ,SAAA;AAAA,QACR,OAAO,iBAAA,CAAkB;AAAA,OAC1B,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AAIZ,MAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,IAAA,EAAK;AACL,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,YAAA,CAAa;AAAA,QACX,MAAA,EAAQ,QAAA;AAAA,QACR,OACE,GAAA,YAAe,KAAA,IAAS,IAAI,OAAA,GACxB,GAAA,CAAI,UACJ,iBAAA,CAAkB;AAAA,OACzB,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG;AAAA,IACD,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAID,EAAA,MAAM,oBAAA,GAAuB,sBACzB,cAAA,CAAe,IAAA;AAAA,IACb,CAAC,CAAA,KACC,CAAA,CAAE,OAAO,mBAAA,CAAoB,QAAA,IAAY,EAAE,IAAA,KAAS;AAAA,GACxD,GACA,MAAA;AACJ,EAAA,MAAM,yBAAyB,oBAAA,EAAsB,cAAA;AACrD,EAAA,MAAM,0BAAA,GACJ,sBAAA,IACA,sBAAA,CAAuB,EAAA,KAAO,mBAAA,EAAqB,aACnD,sBAAA,CAAuB,KAAA,KAAU,IAAA,GAC7B,sBAAA,CAAuB,KAAA,GACvB,MAAA;AAEN,EAAA,MAAM,cAAA,GAAiB,iBAAiB,IAAA,IAAQ,mBAAA;AAEhD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,OAAA,EAAmB,GAAG,cAAA,EAGxC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,CAAO,MAAA,EAAP,EAAc,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,sBACjC,GAAA,CAAC,MAAA,CAAO,OAAA,EAAP,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,GAAA,EAAI,IAAA,EAAM,CAAA,EACpC,QAAA,EAAA;AAAA,QAAA,SAAA,wBACE,KAAA,EAAA,EAAM,KAAA,EAAO,UAAU,KAAA,EAAO,MAAA,EAAQ,UAAU,MAAA,EAAQ,CAAA;AAAA,QAE1D,YAAA,CAAa,MAAA,KAAW,CAAA,mBACvB,GAAA,CAAC,QAAK,OAAA,EAAO,IAAA,EAAC,IAAA,EAAK,OAAA,EAAQ,uCAE3B,CAAA,GACE,SAAA,mBACF,GAAA,CAAC,OAAA,EAAA,EAAQ,QAAQ,UAAA,EACf,QAAA,kBAAA,GAAA;AAAA,UAAC,OAAA,CAAQ,IAAA;AAAA,UAAR;AAAA,YACC,QAAA,EAAQ,IAAA;AAAA,YACR,EAAA,EAAG,oBAAA;AAAA,YACH,KAAA,EAAM,eAAA;AAAA,YACN,WAAA,EAAY,UAAA;AAAA,YACZ,SAAA;AAAA,YACA,GAAA,EAAI,GAAA;AAAA,YAEH,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,KAAA,qBACjB,GAAA;AAAA,cAAC,OAAA,CAAQ,IAAA;AAAA,cAAR;AAAA,gBAEC,IAAI,KAAA,CAAM,EAAA;AAAA,gBACV,OAAO,KAAA,CAAM,IAAA;AAAA,gBACb,kBAAA,EAAkB,IAAA;AAAA,gBAElB,QAAA,kBAAA,IAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,UAAA,EAAW,QAAA;AAAA,oBACX,cAAA,EAAe,eAAA;AAAA,oBACf,GAAA,EAAI,GAAA;AAAA,oBACJ,IAAA,EAAM,CAAA;AAAA,oBAEN,QAAA,EAAA;AAAA,sCAAA,GAAA,CAAC,IAAA,EAAA,EAAM,gBAAM,IAAA,EAAK,CAAA;AAAA,sBACjB,CAAC,MAAM,WAAA,oBACN,GAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,UAAA,EAAW,WAAA;AAAA,0BACX,IAAA,EAAK,OAAA;AAAA,0BACL,IAAA,EAAMA,OAAA;AAAA,0BACN,YAAA,EAAY,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,0BAC9B,OAAA,EAAS,MAAM,UAAA,CAAW,KAAA,CAAM,EAAE;AAAA;AAAA;AACpC;AAAA;AAAA;AAEJ,eAAA;AAAA,cArBK,KAAA,CAAM;AAAA,aAuBd;AAAA;AAAA,SACH,EACF,CAAA,mBAEA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,GAAA,EAC1B,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,KAAA,qBACjB,IAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,UAAA,EAAW,QAAA;AAAA,YACX,cAAA,EAAe,eAAA;AAAA,YACf,GAAA,EAAI,GAAA;AAAA,YAEJ,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAM,gBAAM,IAAA,EAAK,CAAA;AAAA,cACjB,CAAC,MAAM,WAAA,oBACN,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,UAAA,EAAW,WAAA;AAAA,kBACX,IAAA,EAAK,OAAA;AAAA,kBACL,IAAA,EAAMA,OAAA;AAAA,kBACN,YAAA,EAAY,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,kBAC9B,OAAA,EAAS,MAAM,UAAA,CAAW,KAAA,CAAM,EAAE;AAAA;AAAA;AACpC;AAAA,WAAA;AAAA,UAbG,KAAA,CAAM;AAAA,SAgBd,CAAA,EACH;AAAA,OAAA,EAEJ,CAAA,EACF,CAAA;AAAA,0BACC,MAAA,CAAO,MAAA,EAAP,EACC,QAAA,kBAAA,GAAA,CAAC,QAAK,cAAA,EAAe,UAAA,EAAW,IAAA,EAAM,CAAA,EACpC,8BAAC,MAAA,EAAA,EAAO,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,OAAA,EAAK,GACjC,CAAA,EACF,CAAA;AAAA,sBAMA,IAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAO,UAAA,EAChB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,CAAU,MAAA,EAAV,EAAkB,QAAA,EAAA,cAAA,EAAe,CAAA;AAAA,wBAClC,GAAA,CAAC,SAAA,CAAU,OAAA,EAAV,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,GAAA,EAAI,IAAA,EAAM,CAAA,EACpC,QAAA,EAAA;AAAA,UAAA,cAAA,oBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAO,cAAA,CAAe,KAAA;AAAA,cACtB,QAAQ,cAAA,CAAe;AAAA;AAAA,WACzB;AAAA,0BAEF,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,aAAA;AAAA,cACN,WAAA,EAAY,kBAAA;AAAA,cACZ,KAAA,EAAO,aAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,iBAAiB,CAAA,EAAG,MAAA,CAAO,SAAS,EAAE,CAAA;AAAA,cACvD,UAAU,UAAA,KAAe,IAAA;AAAA,cACzB,QAAA,EAAQ,IAAA;AAAA,cACR,OAAO,WAAA,IAAe;AAAA;AAAA,WACxB;AAAA,8BACC,OAAA,EAAA,EAAQ,CAAA;AAAA,UACR;AAAA,SAAA,EACH,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,SAAA,CAAU,MAAA,EAAV,EACC,QAAA,kBAAA,IAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,cAAA,EACE,eAAA,EAAiB,aAAA,GAAgB,UAAA,GAAa,eAAA;AAAA,YAEhD,GAAA,EAAI,GAAA;AAAA,YACJ,IAAA,EAAM,CAAA;AAAA,YAEL,QAAA,EAAA;AAAA,cAAA,CAAC,iBAAiB,aAAA,oBACjB,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,UAAA,EAAW,kBAAA;AAAA,kBACX,OAAA,EAAS,YAAA;AAAA,kBACT,SAAS,UAAA,KAAe,QAAA;AAAA,kBACxB,UAAU,UAAA,KAAe,IAAA;AAAA,kBAC1B,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BAEF,IAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAI,GAAA,EACR,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,gBAAA;AAAA,oBACT,UAAU,UAAA,KAAe,IAAA;AAAA,oBAC1B,QAAA,EAAA;AAAA;AAAA,iBAED;AAAA,gCACA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,UAAA,EAAW,SAAA;AAAA,oBACX,OAAA,EAAS,YAAA;AAAA,oBACT,UAAU,CAAC,SAAA;AAAA,oBACX,SAAS,UAAA,KAAe,QAAA;AAAA,oBACzB,QAAA,EAAA;AAAA;AAAA;AAED,eAAA,EACF;AAAA;AAAA;AAAA,SACF,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,qBAAqB,SAAA,IAAa,IAAA;AAAA,QAC7C,cAAA,EAAgB,qBAAqB,QAAA,IAAY,EAAA;AAAA,QACjD,YAAA,EAAc,0BAAA;AAAA,QACd,MAAM,oBAAA,EAAsB,IAAA;AAAA,QAC5B,cAAA,EAAe,MAAA;AAAA,QACf,QAAA,EAAU,CAAC,MAAA,KAAW;AACpB,UAAA,IAAI,mBAAA,EAAqB;AACvB,YAAA,iBAAA,CAAkB,mBAAA,CAAoB,UAAU,MAAM,CAAA;AAAA,UACxD;AACA,UAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,QAC7B,CAAA;AAAA,QACA,QAAA,EAAU,MAAM,sBAAA,CAAuB,IAAI;AAAA;AAAA;AAC7C,GAAA,EACF,CAAA;AAEJ,CAAA;;ACpdO,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAmC;AACpE,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,cAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,eAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,SAAA,GACV,SAAA,GACA,mBAAA,GACE,YAAA,CAAa,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,EAAA,KAAO,mBAAmB,CAAA,EAAG,QAC1D,aAAA,GACA,aAAA;AAEN,EAAA,MAAM,UAAA,GAAa,OAA0B,IAAI,CAAA;AAKjD,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,MACE,YAAA,CAAa,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MAC3B,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,IAAA,EAAM,QAAA;AAAA,MACN,UAAU,EAAE,EAAA,EAAI,MAAM,EAAA,EAAI,KAAA,EAAO,MAAM,IAAA;AAAK,KAC9C,CAAE,CAAA;AAAA,IACJ,CAAC,YAAY;AAAA,GACf;AAMA,EAAA,MAAM,eAAA,GAAkB,OAAA;AAAA,IACtB,MAAO,sCAAsB,IAAI,GAAA,CAAI,CAAC,mBAAmB,CAAC,CAAA,mBAAI,IAAI,GAAA,EAAI;AAAA,IACtE,CAAC,mBAAmB;AAAA,GACtB;AACA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,IAAA,KACC,IAAA,CAAK,EAAA,KAAO,sBAAsB,SAAA,GAAY,WAAA;AAAA,IAChD,CAAC,mBAAmB;AAAA,GACtB;AAEA,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,CAAC,IAAA,KAAqB;AACpB,MAAA,MAAM,KAAA,GAAQ,aAAa,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,KAAK,EAAE,CAAA;AACvD,MAAA,IAAI,KAAA,qBAA0B,KAAK,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,CAAC,cAAc,kBAAkB;AAAA,GACnC;AAOA,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,MACE,kBAAA,CAAmB;AAAA,IACrB,KAAA;AAAA,IACA,cAAc,EAAC;AAAA,IACf,cAAA,EAAgB,kBAAA;AAAA,IAChB,eAAA;AAAA,IACA,SAAA,EAAW,SAAA;AAAA,IACX,eAAA,EAAiB,IAAA;AAAA,IACjB,EAAA,EAAI,eAAA;AAAA,IACJ,UAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAA,SAAA,CAAU,EAAE,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAG9C,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA;AAAA,IAC5C;AAAC,GACH;AAEA,EAAA,MAAM,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,kBAAA,CAAmB,cAAc,CAAA;AACjC,IAAA,SAAA,CAAU,EAAE,YAAA,EAAc,KAAA,EAAO,CAAA;AACjC,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,SAAA,EAAW,cAAc,CAAC,CAAA;AAE9B,EAAA,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,SAAA,CAAU,EAAE,YAAA,EAAc,KAAA,EAAO,CAAA;AACjC,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAId,EAAA,MAAM,mBAAA,GAAsB,CAAC,CAAA,KAAqB;AAChD,IAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,SAAA,EAAU;AAAA,IACZ;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,MAAA,mBACJ,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAI,GAAA;AAAA,MACJ,SAAA,EAAW,OAAO,QAAQ,CAAA;AAAA,MAC1B,SAAA,EAAW,mBAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,UAAA,EAAW,WAAA;AAAA,YACX,IAAA,EAAK,OAAA;AAAA,YACL,IAAA,EAAM,EAAE,MAAA,EAAQC,MAAA,EAAQ;AAAA,YACxB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,YACvB,OAAA,EAAS,sBAAA;AAAA,YACV,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,UAAA,EAAW,WAAA;AAAA,YACX,IAAA,EAAK,OAAA;AAAA,YACL,IAAA,EAAM,EAAE,MAAA,EAAQD,OAAA,EAAS;AAAA,YACzB,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,YACvB,OAAA,EAAS,eAAA;AAAA,YACT,QAAA,EAAU,aAAa,MAAA,KAAW,CAAA;AAAA,YACnC,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,GACF;AAGF,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EAQE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACE,GAAG,YAAA;AAAA,QACJ,QAAA,EAAS,eAAA;AAAA,QACT,KAAA;AAAA,QACA,UAAA,EAAY,CAAC,EAAE,mBAAA,IAAuB,KAAA;AAAA;AAAA,KACxC;AAAA,oBACA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,uBAAA;AAAA,QACH,gBAAA,EAAkB,UAAA;AAAA,QAClB,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,kBAAA;AAAA,QACT,KAAA,EAAO,GAAA;AAAA,QACP,MAAA;AAAA,QAEC,QAAA,EAAA,KAAA,CAAM,WAAW,CAAA,mBAChB,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,QAAA;AAAA,YACV,UAAA,EAAW,QAAA;AAAA,YACX,cAAA,EAAe,QAAA;AAAA,YACf,SAAA,EAAW,OAAO,aAAa,CAAA;AAAA,YAE9B,QAAA,EAAA,OAAO,UAAA,KAAe,QAAA,IAAY,UAAA,IAAc,IAAA,mBAC/C,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAO,IAAA,EAAC,IAAA,EAAK,OAAA,EAChB,QAAA,EAAA,UAAA,IAAc,yBACjB,CAAA,GAEA;AAAA;AAAA,SAEJ,mBAEA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,KAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,gBAAA;AAAA,YACA,eAAA;AAAA,YACA,aAAA,EAAc,QAAA;AAAA,YACd,OAAA,EAAS,KAAA;AAAA,YACT,YAAY,MAAM;AAAA,YAAC,CAAA;AAAA,YACnB,OAAA,EAAS,KAAA;AAAA,YACT,WAAA,EAAa;AAAA;AAAA;AACf;AAAA,KAEJ;AAAA,oBACA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,OAAA;AAAA,QACN,OAAA,EAAS,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,QAC/B,eAAA;AAAA,QACA,MAAA,EAAQ,mBAAA;AAAA,QACR,cAAc,YAAA,GAAe,CAAC,IAAA,KAAS,YAAA,CAAa,IAAI,CAAA,GAAI;AAAA;AAAA,KAC9D;AAAA,oBACA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,QAChC,YAAA;AAAA,QACA,QAAA,EAAU,mBAAA;AAAA,QACV,QAAA,EAAU,mBAAA;AAAA,QACV,SAAA,EAAW,qBAAA;AAAA,QACX,YAAA;AAAA,QACA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectFieldSync-Bi8HsMYP.js","sources":["../src/components/SelectField/internal/SelectFieldInput.tsx","../src/components/SelectField/internal/useCombo.tsx","../src/components/SelectField/internal/SelectFieldComboboxMode.tsx","../src/components/SelectField/internal/SelectFieldTrigger.tsx","../src/components/SelectField/internal/useSelectMode.ts","../src/components/SelectField/internal/SelectFieldSelectMode.tsx","../src/components/SelectField/SelectField.tsx","../src/components/SelectField/SelectFieldSync.tsx"],"sourcesContent":["import styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport cx from \"classnames\";\nimport type { PassThroughProps, Size } from \"../../../types\";\nimport { Button } from \"../../../components/Button\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport type { ReactElement, RefObject } from \"react\";\n\n/**\n * Props for the SelectFieldInput 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} [isHighlighted] - Applies a subdued primary background to draw attention to the field\n * @property {boolean} [required] - Marks the input as required for form validation\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 */\nexport type SelectFieldInputProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disableToggleButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n isHighlighted?: boolean;\n required?: 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};\n\n/**\n * Internal input component for the SelectField that provides the text input and action buttons.\n *\n * Features:\n * - Text input for filtering and displaying selected values\n * - Optional clear button for removing the current selection\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 *\n * @example\n * <SelectFieldInput\n * placeholder=\"Search...\"\n * size=\"medium\"\n * onClear={() => handleClear()}\n * prefix=\"$\"\n * />\n */\nexport const SelectFieldInput = ({\n placeholder,\n size,\n disableClearButton,\n disableToggleButton,\n disabled,\n readOnly,\n isHighlighted,\n required,\n error,\n onClear,\n id,\n inputWrapperRef,\n htmlInputWrapperProps,\n inputProps,\n toggleButtonProps,\n prefix,\n suffix,\n}: SelectFieldInputProps) => {\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 [styles[\"highlight\"]]: isHighlighted,\n });\n\n return (\n <div\n ref={inputWrapperRef}\n {...htmlInputWrapperProps}\n className={cx(inputWrapperClassNames, htmlInputWrapperProps?.className)}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n <input\n type=\"text\"\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n {...inputProps}\n className={cx(styles[\"input\"], inputProps?.className, {\n [styles[\"error\"]]: error,\n })}\n />\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\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\nSelectFieldInput.displayName = \"SelectFieldInput\";\n","import {\n useCombobox,\n type UseComboboxProps,\n type UseComboboxState,\n type UseComboboxStateChangeOptions,\n} from \"downshift\";\nimport { useDownshiftEnvironment } from \"../../../internal/hooks\";\nimport type {\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../types\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type {\n SectionMeta,\n SelectItem,\n} from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useProcessedOptions } from \"../../../internal/hooks/useProcessedOptions\";\nimport {\n buildSelectItems,\n toSelectItem,\n} from \"../../../internal/functions/buildSelectItems\";\n\nexport type { SectionMeta };\n\nexport type UseComboOptions = {\n // An array of currently loaded options\n options: SelectFieldOption[];\n // Pinned options configuration (raw prop)\n pinned?: SelectFieldPinnedOptions;\n // Function to convert a group value to a display label\n groupToString?: (groupValue: SelectFieldGroupByValue) => string;\n // Function to sort group sections\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n selectedOption: SelectFieldOption | null;\n onSelectedOptionChange: (option: SelectFieldOption | null) => void;\n displayAs: \"popover\" | \"dialog\";\n disableHighlightOnOpen?: boolean;\n disabled: boolean;\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n} & Pick<UseComboboxProps<SelectItem>, \"onInputValueChange\" | \"onIsOpenChange\">;\n\n/**\n * The purpose of useCombo is to provide an abstraction over the downshift combobox hook.\n */\nexport const useCombo = ({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n onSelectedOptionChange,\n onInputValueChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disableHighlightOnOpen = false,\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseComboOptions) => {\n // Controlled input value state - needed so usePinnedOptions can access it\n // before useCombobox is called\n const [inputValue, setInputValue] = useState(selectedOption?.label ?? \"\");\n\n // Compute effective search value (empty if showing selected option's label)\n const effectiveSearchValue =\n selectedOption?.label === inputValue ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: effectiveSearchValue,\n groupToString,\n groupSorter,\n },\n );\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedDownshiftItem = useMemo(() => {\n return selectedOption ? toSelectItem(selectedOption) : null;\n }, [selectedOption]);\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n closeMenu,\n openMenu,\n setHighlightedIndex,\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 selectedItem: selectedDownshiftItem,\n inputValue, // Controlled input value\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem;\n }) => {\n // Regular, pinned, and grouped options are all selectable\n if (\n si &&\n (si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\")\n ) {\n onSelectedOptionChange(si.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n onInputValueChange: (changes) => {\n // Update local state\n setInputValue(changes.inputValue ?? \"\");\n // Call external handler\n onInputValueChange?.(changes);\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useCombobox.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onIsOpenChange: (changes) => {\n onIsOpenChange?.(changes);\n if (changes.isOpen && !disableHighlightOnOpen) {\n const selectedItemIndex = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n setHighlightedIndex(selectedItemIndex);\n }\n },\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 useEffect(() => {\n if (disabled) {\n closeMenu();\n }\n }, [disabled, closeMenu]);\n\n return {\n inputValue,\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 };\n};\n\nfunction stateReducer(\n state: UseComboboxState<SelectItem>,\n actionAndChanges: UseComboboxStateChangeOptions<SelectItem>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n // this prevents the menu from being closed when the user selects an item with 'Enter' or mouse\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 };\n }\n return {\n ...changes,\n inputValue: state.selectedItem?.original.label ?? state.inputValue,\n };\n case useCombobox.stateChangeTypes.InputKeyDownEscape:\n case useCombobox.stateChangeTypes.FunctionCloseMenu:\n return {\n ...changes,\n inputValue: state.selectedItem?.original.label ?? state.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 return changes;\n default:\n return changes; // otherwise business as usual.\n }\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { SelectOptions } from \"../../../internal/components/SelectOptions\";\nimport type { OptionsPanelHandle } from \"../../../internal/components/OptionsPanel\";\nimport { SelectFieldInput } from \"./SelectFieldInput\";\nimport { SelectFieldLabel } from \"./SelectFieldLabel\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useCombo } from \"./useCombo\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../../internal/types/addNewItemTypes\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport type { SelectFieldComboboxInternalProps } from \"../../../internal/types/selectFieldInternalTypes\";\n\n/**\n * Combobox mode: searchable select using useCombobox.\n * This is the default behavior when disableSearch is false.\n */\nexport const SelectFieldComboboxMode = ({\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n labelAiMark,\n readOnly,\n isHighlighted,\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 addItemLabel,\n onAddNewItem,\n}: SelectFieldComboboxInternalProps) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const debouncedOptionLoader = useDebouncedCallback((inputValue: string) => {\n loadOptions(selectedOption?.label === inputValue ? \"\" : inputValue, {\n initial: true,\n });\n }, debounceMs);\n\n const adjustInputValueForSelectedOption = useCallback(\n (inputValue: string) => {\n return selectedOption?.label === inputValue ? \"\" : inputValue;\n },\n [selectedOption?.label],\n );\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n inputValue,\n items,\n closeMenu,\n sectionsMeta,\n } = useCombo({\n displayAs,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n virtualize,\n onSelectedOptionChange: (opt) => onSelectedOptionChange(opt),\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(adjustInputValueForSelectedOption(inputValue), {\n initial: true,\n });\n setInitialLoadPerformed(true);\n }\n },\n onInputValueChange: ({ inputValue: iv }) => {\n debouncedOptionLoader(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(adjustInputValueForSelectedOption(inputValue), {\n initial: true,\n });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [\n loadOptions,\n initialLoadPerformed,\n initialLoad,\n inputValue,\n adjustInputValueForSelectedOption,\n setInitialLoadPerformed,\n ]);\n\n const handleLoadMore = async () => {\n await loadMore(adjustInputValueForSelectedOption(inputValue));\n };\n\n const addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n inputValue,\n ) ? (\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 <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n required={required}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={getToggleButtonProps()}\n onClear={() => onSelectedOptionChange(null)}\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 />\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 field={\n <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n inputProps={getInputProps()}\n disableToggleButton\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-dialog-input`}\n inputWrapperRef={inputWrapperRef}\n size=\"medium\"\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n }\n initialFocusResolver={(elements) => {\n return (\n elements.find((element) => element.tagName === \"INPUT\") ||\n elements[0]\n );\n }}\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\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 <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n required={required}\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={() => onSelectedOptionChange(null)}\n id={`${id}-input`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\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 <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport cx from \"classnames\";\nimport type { Size } from \"../../../types\";\nimport { Button } from \"../../../components/Button\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport type { ReactElement, RefObject } from \"react\";\nimport { useMergeRefs } from \"../../../hooks/useMergeRefs/useMergeRefs\";\n\nexport type SelectFieldTriggerProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n isHighlighted?: 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 /** The display text (selected option label or empty) */\n displayValue?: string;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n};\n\n/**\n * Non-searchable select trigger for SelectField when disableSearch is true.\n * Renders a div-based trigger instead of an input, suitable for the listbox ARIA pattern.\n */\nexport const SelectFieldTrigger = ({\n placeholder,\n size,\n disableClearButton,\n disabled,\n readOnly,\n isHighlighted,\n error,\n onClear,\n id,\n inputWrapperRef,\n toggleButtonProps,\n displayValue,\n prefix,\n suffix,\n popoverTarget,\n}: SelectFieldTriggerProps) => {\n const { ref: downshiftRef, ...restToggleButtonProps } =\n toggleButtonProps ?? {};\n const mergedRef = useMergeRefs([inputWrapperRef, downshiftRef]);\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 [styles[\"highlight\"]]: isHighlighted,\n });\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n ref={mergedRef}\n {...restToggleButtonProps}\n popoverTarget={popoverTarget}\n id={id}\n className={cx(inputWrapperClassNames, restToggleButtonProps?.className)}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n <div\n className={cx(styles[\"input\"], {\n [styles[\"error\"]]: error,\n })}\n >\n {displayValue ? (\n <span>{displayValue}</span>\n ) : (\n <span className={styles[\"fake-placeholder\"]}>{placeholder}</span>\n )}\n </div>\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\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={{\n insetInlineEnd: \"2rem\",\n ...(size === \"small\"\n ? {}\n : {\n insetBlock: \"0\",\n }),\n }}\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\nSelectFieldTrigger.displayName = \"SelectFieldTrigger\";\n","import {\n useSelect,\n type UseSelectState,\n type UseSelectStateChangeOptions,\n} from \"downshift\";\nimport { useDownshiftEnvironment } from \"../../../internal/hooks\";\nimport type {\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../types\";\nimport type { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useEffect, useMemo } from \"react\";\nimport { useProcessedOptions } from \"../../../internal/hooks/useProcessedOptions\";\nimport {\n buildSelectItems,\n toSelectItem,\n} from \"../../../internal/functions/buildSelectItems\";\n\nexport type UseSelectModeOptions = {\n options: SelectFieldOption[];\n pinned?: SelectFieldPinnedOptions;\n groupToString?: (groupValue: SelectFieldGroupByValue) => string;\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n selectedOption: SelectFieldOption | null;\n onSelectedOptionChange: (option: SelectFieldOption | null) => void;\n onIsOpenChange?: (changes: { isOpen?: boolean }) => void;\n displayAs: \"popover\" | \"dialog\";\n disableHighlightOnOpen?: boolean;\n disabled: boolean;\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n};\n\n/**\n * Wraps downshift's useSelect for non-searchable select fields.\n * Returns a compatible interface to useCombo (minus getInputProps/inputValue).\n */\nexport const useSelectMode = ({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n onSelectedOptionChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disableHighlightOnOpen = false,\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseSelectModeOptions) => {\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: \"\",\n groupToString,\n groupSorter,\n },\n );\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedDownshiftItem = useMemo(() => {\n return selectedOption ? toSelectItem(selectedOption) : null;\n }, [selectedOption]);\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n closeMenu,\n openMenu,\n setHighlightedIndex,\n } = useSelect({\n isItemDisabled: (item) => {\n if (!item) return false;\n return (disabled || item.disabled) ?? false;\n },\n environment,\n selectedItem: selectedDownshiftItem,\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem;\n }) => {\n if (\n si &&\n (si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\")\n ) {\n onSelectedOptionChange(si.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useSelect.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onIsOpenChange: (changes) => {\n onIsOpenChange?.(changes);\n if (changes.isOpen && !disableHighlightOnOpen) {\n const selectedItemIndex = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n setHighlightedIndex(selectedItemIndex);\n }\n },\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 useEffect(() => {\n if (disabled) {\n closeMenu();\n }\n }, [disabled, closeMenu]);\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 };\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 };\n }\n return changes;\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 case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ItemClick:\n return changes;\n default:\n return changes;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { SelectOptions } from \"../../../internal/components/SelectOptions\";\nimport type { OptionsPanelHandle } from \"../../../internal/components/OptionsPanel\";\nimport { SelectFieldTrigger } from \"./SelectFieldTrigger\";\nimport { SelectFieldLabel } from \"./SelectFieldLabel\";\nimport styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useSelectMode } from \"./useSelectMode\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../../internal/types/addNewItemTypes\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport type { SelectFieldBaseInternalProps } from \"../../../internal/types/selectFieldInternalTypes\";\n\n/**\n * Select mode: non-searchable select using useSelect.\n * Active when disableSearch is true.\n */\nexport const SelectFieldSelectMode = ({\n labelAiMark,\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n isHighlighted,\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 required,\n addItemLabel,\n onAddNewItem,\n}: SelectFieldBaseInternalProps) => {\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 closeMenu,\n sectionsMeta,\n } = useSelectMode({\n displayAs,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n virtualize,\n onSelectedOptionChange: (opt) => onSelectedOptionChange(opt),\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 = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n \"\",\n ) ? (\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 <SelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-trigger`}\n inputWrapperRef={inputWrapperRef}\n displayValue={selectedOption?.label}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\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 <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\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 selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\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 <SelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-trigger`}\n popoverTarget={`${id}-popover`}\n inputWrapperRef={inputWrapperRef}\n displayValue={selectedOption?.label}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\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 <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import type { SelectFieldHandle, SelectFieldProps } from \"./types\";\nimport { forwardRef, useId, useRef } from \"react\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../components/FieldMessage\";\nimport { SelectFieldComboboxMode } from \"./internal/SelectFieldComboboxMode\";\nimport { SelectFieldSelectMode } from \"./internal/SelectFieldSelectMode\";\nimport type {\n SelectFieldBaseInternalProps,\n SelectFieldComboboxInternalProps,\n} from \"../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../internal/hooks/useSelectOrchestration\";\n\n/**\n * SelectField component for selecting a single option from a searchable dropdown.\n *\n * Features:\n * - Async option loading with caching, lazy pagination (page, offset, group), and debounced search\n * - Supports pinned option sections (static or dynamically loaded)\n * - Grouped options with custom sort and label functions\n * - Combobox mode (searchable) and select mode (non-searchable) via disableSearch\n * - Dialog and popover display modes with auto-detection based on viewport\n * - Imperative handle for cache management (clearCache, invalidate)\n * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n * - Supports layout utilities for positioning and spacing\n *\n * @example\n * <SelectField\n * label=\"Technician\"\n * value={selected}\n * onSelectedOptionChange={setSelected}\n * loadOptions={async (search) => fetchTechnicians(search)}\n * />\n */\nexport const SelectField = forwardRef<SelectFieldHandle, SelectFieldProps>(\n (propsWithLayout, ref) => {\n const { layoutStyles, componentProps } =\n useLayoutPropsUtil(propsWithLayout);\n\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n\n const {\n id: idProp,\n value: selectedOption,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n labelAiMark,\n hideLabel,\n placeholder,\n disableClearButton: disableClearButtonProp = false,\n debounceMs = 200,\n onSelectedOptionChange,\n cache,\n size,\n error,\n hint,\n moreInfo,\n description,\n errorAriaLive: _errorAriaLive,\n required,\n disabled,\n readOnly,\n isHighlighted,\n prefix,\n suffix,\n warning,\n className,\n style,\n pinned,\n virtualize,\n disableSearch,\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(\"SelectField\", error);\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\n ? componentProps.lazyOptions\n : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const disableClearButton =\n disableClearButtonProp || !selectedOption || isDisabledOrReadOnly;\n\n const baseProps: SelectFieldBaseInternalProps = {\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n isHighlighted,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n labelAiMark,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId: moreInfo ? moreInfoUid : undefined,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n addItemLabel,\n onAddNewItem,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n };\n\n if (disableSearch) {\n return <SelectFieldSelectMode {...baseProps} />;\n }\n\n const comboboxProps: SelectFieldComboboxInternalProps = {\n ...baseProps,\n debounceMs,\n };\n\n return <SelectFieldComboboxMode {...comboboxProps} />;\n },\n);\n\nSelectField.displayName = \"SelectField\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { SelectField } from \"./SelectField\";\nimport type {\n SelectFieldHandle,\n SelectFieldProps,\n SelectFieldOption,\n SelectFieldGroupByValue,\n} from \"./types\";\nimport {\n type SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n sortByGroup,\n} from \"../../internal/functions/syncFilterUtils\";\n\nexport type SelectFieldSyncProps = Omit<\n SelectFieldProps,\n \"loadOptions\" | \"lazy\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /**\n * The options to display in the select field.\n */\n options: SelectFieldOption[];\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 * <SelectFieldSync\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 * <SelectFieldSync\n * options={options}\n * filter={{ keys: [\"label\"] }}\n * />\n */\n filter?: SyncFilterFn | MatchSorterOptions<SelectFieldOption>;\n /**\n * Function to compare two group values for sorting.\n * When provided, options are sorted by group using this comparator,\n * then by match-sort order within each group.\n * @param a - First group value to compare\n * @param b - Second group value to compare\n * @returns Negative if a < b, positive if a > b, zero if equal\n */\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n};\n\n/**\n * SelectFieldSync is a simplified version of SelectField that is used to display a list of options in a 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 * - Supports grouping with optional group sorting via `groupSorter`.\n * - Supports all the other props of SelectField.\n */\nexport const SelectFieldSync = (props: SelectFieldSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n groupSorter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const loadOptions = (searchValue: string) => {\n const filtered = filter(options, searchValue);\n return groupSorter ? sortByGroup(filtered, groupSorter) : filtered;\n };\n\n const fieldRef = useRef<SelectFieldHandle>(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 <SelectField\n ref={fieldRef}\n lazy={false}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n"],"names":["Close","Chevron_Right","stateReducer","inputValue"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectMenuSync-DKg4g5nN.js","sources":["../src/components/SelectMenu/SelectMenu.tsx","../src/components/SelectMenu/SelectMenuSync.tsx"],"sourcesContent":["import type { SelectMenuHandle, SelectMenuProps } from \"./types\";\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { SelectOptions } from \"../../internal/components/SelectOptions\";\nimport { useDebouncedCallback } from \"../../internal/hooks/useDebouncedCallback\";\nimport { OptionsPopover } from \"../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../internal/components/OptionsDialog/OptionsDialog\";\nimport { MenuFooter } from \"../../internal/components/MenuFooter/MenuFooter\";\nimport { AddNewItemButton } from \"../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../internal/types/addNewItemTypes\";\nimport { useProcessedOptions } from \"../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../internal/functions/buildSelectItems\";\nimport { useMenuInteraction } from \"./internal/useMenuInteraction\";\nimport type { SelectItem } from \"../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../internal/hooks/useSelectOrchestration\";\nimport { SearchField } from \"../../components\";\n\n/**\n * SelectMenu component for selecting a single option from a dropdown triggered by any element.\n *\n * Features:\n * - Attaches to any trigger element via a render prop\n * - Optional search input rendered inside the popover/dialog\n * - Lazy loading with pagination (page, offset, or group modes)\n * - Pinned options support\n * - Grouped options support\n * - Supports both popover and dialog display modes\n * - Adaptive display based on device (mobile uses dialog)\n * - Cache support for loadOptions results\n * - Full accessibility support with ARIA attributes\n * - Controlled selection state\n * - Configurable popover width\n * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n *\n * @example\n * <SelectMenu\n * trigger={(props) => <Button {...props}>Select a book</Button>}\n * label=\"Books\"\n * value={selectedOption}\n * onSelectedOptionChange={setSelectedOption}\n * loadOptions={loadOptions}\n * />\n */\nexport const SelectMenu = forwardRef<SelectMenuHandle, SelectMenuProps>(\n (props, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const {\n id: idProp,\n value: selectedOption,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n searchPlaceholder,\n debounceMs = 200,\n onSelectedOptionChange,\n cache,\n pinned,\n virtualize,\n disableSearch,\n popoverWidth,\n trigger,\n onSearchChange,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n addItemLabel,\n onAddNewItem,\n clear,\n } = props;\n\n const groupToString =\n \"groupToString\" in props ? props.groupToString : undefined;\n const groupSorter = \"groupSorter\" in props ? props.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\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: \"lazyOptions\" in props ? props.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const [inputValue, setInputValue] = useState(\"\");\n\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } =\n useProcessedOptions({\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n });\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedItemIds = useMemo(\n () => new Set(selectedOption ? [selectedOption.id] : []),\n [selectedOption],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n if (\n item.type === \"option\" ||\n item.type === \"pinned-option\" ||\n item.type === \"grouped-option\"\n ) {\n onSelectedOptionChange(item.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n [onSelectedOptionChange],\n );\n\n const [isOpen, setIsOpen] = useState(false);\n\n const {\n closeMenu,\n highlightedIndex,\n setHighlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n } = useMenuInteraction({\n items: items,\n sectionsMeta,\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs,\n closeOnActivate: true,\n id,\n triggerRef,\n label,\n isOpen,\n setIsOpen,\n onImplicitClose,\n onExplicitClose,\n });\n\n const debouncedOptionLoader = useDebouncedCallback((value: string) => {\n loadOptions(value, { initial: true });\n }, debounceMs);\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n debouncedOptionLoader(value);\n onSearchChange?.(value);\n },\n [debouncedOptionLoader, onSearchChange],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n handleKeyDown(e);\n },\n [handleKeyDown, onMenuKeyDown],\n );\n\n const getMenuPropsWithKeyDown: typeof getMenuProps = useCallback(\n (opts) => {\n const menuProps = getMenuProps(opts);\n if (!onMenuKeyDown) return menuProps;\n return {\n ...menuProps,\n onKeyDown: (e: KeyboardEvent) => {\n onMenuKeyDown(e);\n menuProps.onKeyDown(e);\n },\n };\n },\n [getMenuProps, onMenuKeyDown],\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 }, [\n loadOptions,\n initialLoadPerformed,\n initialLoad,\n setInitialLoadPerformed,\n ]);\n\n const prevIsOpenRef = useRef(false);\n useEffect(() => {\n const wasOpen = prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen && !wasOpen) {\n if (initialLoad === \"open\" && !initialLoadPerformed) {\n loadOptions(\"\", { initial: true }).then(() => {\n setInitialLoadPerformed(true);\n });\n }\n const selectedIdx = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n if (selectedIdx >= 0) {\n setHighlightedIndex(selectedIdx);\n }\n }\n\n if (!isOpen && wasOpen) {\n setInputValue(\"\");\n loadOptions(\"\", { initial: true });\n }\n }, [\n isOpen,\n initialLoad,\n initialLoadPerformed,\n loadOptions,\n setInitialLoadPerformed,\n items,\n selectedOption?.id,\n setHighlightedIndex,\n ]);\n\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n menuContainerRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch, menuContainerRef]);\n\n const handleLoadMore = async () => {\n await loadMore(searchValue);\n };\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = getTriggerProps();\n\n const menuPropsForAria = getMenuProps();\n const activeDescendant = menuPropsForAria[\"aria-activedescendant\"];\n\n const handleSearchClear = useCallback(() => {\n setInputValue(\"\");\n debouncedOptionLoader(\"\");\n onSearchChange?.(\"\");\n }, [debouncedOptionLoader, onSearchChange]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={\n handleInputChange as React.ChangeEventHandler<HTMLInputElement>\n }\n onKeyDown={\n handleInputKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={activeDescendant}\n aria-controls={menuPropsForAria.id}\n placeholder={searchPlaceholder}\n type=\"search\"\n />\n ) : null;\n\n const addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n inputValue,\n ) ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={() => closeMenu({ restoreFocus: false })}\n />\n ) : null;\n\n // Wrap clear's onClick so clicking Clear always also closes the menu and\n // returns focus to the trigger.\n const wrappedClear = clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n closeMenu();\n },\n }\n : undefined;\n // Only render a footer when at least one slot has content; passing an empty\n // <MenuFooter/> would still draw the popover's footer divider.\n const hasFooter = !!wrappedClear || !!addNewItemButton;\n const footer = hasFooter ? (\n <MenuFooter clear={wrappedClear} addNew={addNewItemButton} />\n ) : undefined;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={searchInput ?? undefined}\n footer={footer ?? undefined}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={handleClickOutside}\n width={popoverWidth ?? 320}\n footer={footer ?? undefined}\n >\n {searchInput}\n <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </>\n );\n },\n);\n\nSelectMenu.displayName = \"SelectMenu\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { SelectMenu } from \"./SelectMenu\";\nimport type {\n SelectMenuHandle,\n SelectMenuProps,\n SelectMenuOption,\n SelectMenuGroupByValue,\n} from \"./types\";\nimport {\n type SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n sortByGroup,\n} from \"../../internal/functions/syncFilterUtils\";\n\nexport type SelectMenuSyncProps = Omit<\n SelectMenuProps,\n \"loadOptions\" | \"lazy\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /**\n * The options to display in the select menu.\n */\n options: SelectMenuOption[];\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 * By default, options are filtered by `label` and `searchText` using match-sorter.\n */\n filter?: SyncFilterFn | MatchSorterOptions<SelectMenuOption>;\n /**\n * Custom comparator function to sort groups.\n */\n groupSorter?: (\n a: SelectMenuGroupByValue,\n b: SelectMenuGroupByValue,\n ) => number;\n};\n\n/**\n * SelectMenuSync is a simplified version of SelectMenu for client-side option sets.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`\n * - Performs client-side filtering of the options\n * - Optionally accepts a custom filter function or MatchSorterOptions\n * - Supports grouping with optional group sorting via `groupSorter`\n * - Supports all other props of SelectMenu\n *\n * @example\n * <SelectMenuSync\n * trigger={(props) => <Button {...props}>Pick a book</Button>}\n * label=\"Books\"\n * options={bookOptions}\n * value={selectedOption}\n * onSelectedOptionChange={setSelectedOption}\n * />\n */\nexport const SelectMenuSync = (props: SelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n groupSorter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const loadOptions = (searchValue: string) => {\n const filtered = filter(options, searchValue);\n return groupSorter ? sortByGroup(filtered, groupSorter) : filtered;\n };\n\n const fieldRef = useRef<SelectMenuHandle>(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 <SelectMenu\n ref={fieldRef}\n lazy={false}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n"],"names":[],"mappings":"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"}