@servicetitan/anvil2 1.45.2 → 1.46.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 (109) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/{Calendar-BK861SAW.js → Calendar-BQ5F2ENO.js} +2 -2
  3. package/dist/{Calendar-BK861SAW.js.map → Calendar-BQ5F2ENO.js.map} +1 -1
  4. package/dist/Calendar.js +1 -1
  5. package/dist/{Checkbox-ZphVb1l0.js → Checkbox-DDrmVC-u.js} +2 -2
  6. package/dist/{Checkbox-ZphVb1l0.js.map → Checkbox-DDrmVC-u.js.map} +1 -1
  7. package/dist/{Checkbox-CYNjFdtO.js → Checkbox-Dl4KTwEJ.js} +2 -2
  8. package/dist/{Checkbox-CYNjFdtO.js.map → Checkbox-Dl4KTwEJ.js.map} +1 -1
  9. package/dist/Checkbox.js +2 -2
  10. package/dist/{useInfiniteCombobox-BaYWUxjg.js → Combobox-B9nesJuc.js} +18 -185
  11. package/dist/Combobox-B9nesJuc.js.map +1 -0
  12. package/dist/Combobox.js +2 -1
  13. package/dist/Combobox.js.map +1 -1
  14. package/dist/{DateField-DnasO2rB.js → DateField-DXxPsRtf.js} +2 -2
  15. package/dist/{DateField-DnasO2rB.js.map → DateField-DXxPsRtf.js.map} +1 -1
  16. package/dist/DateField.js +1 -1
  17. package/dist/{DateFieldRange-Ba-8T-Nz.js → DateFieldRange-Xauviu1w.js} +6 -6
  18. package/dist/DateFieldRange-Xauviu1w.js.map +1 -0
  19. package/dist/DateFieldRange.js +1 -1
  20. package/dist/{DateFieldSingle-BBu5Hi9c.js → DateFieldSingle-yLnwpVzd.js} +4 -4
  21. package/dist/{DateFieldSingle-BBu5Hi9c.js.map → DateFieldSingle-yLnwpVzd.js.map} +1 -1
  22. package/dist/DateFieldSingle.js +1 -1
  23. package/dist/Dnd.js +1 -1
  24. package/dist/DndSort.js +1 -1
  25. package/dist/{ListView-DEAMQopB.js → ListView-pb3rIcze.js} +2 -2
  26. package/dist/{ListView-DEAMQopB.js.map → ListView-pb3rIcze.js.map} +1 -1
  27. package/dist/ListView.js +1 -1
  28. package/dist/{Menu-C8we5CHP.js → Menu-DEVZz9xZ.js} +8 -3
  29. package/dist/Menu-DEVZz9xZ.js.map +1 -0
  30. package/dist/Menu.js +1 -1
  31. package/dist/{Page-cKXkjMmd.js → Page-BMDkbDcU.js} +2 -2
  32. package/dist/{Page-cKXkjMmd.js.map → Page-BMDkbDcU.js.map} +1 -1
  33. package/dist/Page.js +1 -1
  34. package/dist/{Pagination-ta8a2cJN.js → Pagination-BJsCppgW.js} +2 -2
  35. package/dist/{Pagination-ta8a2cJN.js.map → Pagination-BJsCppgW.js.map} +1 -1
  36. package/dist/Pagination.js +1 -1
  37. package/dist/{SearchField-BKXkoWPs.js → SearchField-Bb0uObwG.js} +2 -2
  38. package/dist/{SearchField-BKXkoWPs.js.map → SearchField-Bb0uObwG.js.map} +1 -1
  39. package/dist/SearchField.js +1 -1
  40. package/dist/{SelectCard-BWh8Yp7T.js → SelectCard-BTYZg9TG.js} +2 -2
  41. package/dist/{SelectCard-BWh8Yp7T.js.map → SelectCard-BTYZg9TG.js.map} +1 -1
  42. package/dist/SelectCard.js +1 -1
  43. package/dist/Toolbar-D4zuUFhb.js +2077 -0
  44. package/dist/Toolbar-D4zuUFhb.js.map +1 -0
  45. package/dist/Toolbar.css +139 -28
  46. package/dist/Toolbar.d.ts +3 -3
  47. package/dist/Toolbar.js +1 -1
  48. package/dist/assets/icons/st/gnav_legacy_search_filled.svg +1 -1
  49. package/dist/assets/icons/st/gnav_legacy_search_outline.svg +1 -1
  50. package/dist/beta/components/Toolbar/Filters/FilterButton.d.ts +30 -0
  51. package/dist/beta/components/Toolbar/Filters/FilterDateRange.d.ts +37 -0
  52. package/dist/beta/components/Toolbar/Filters/FilterDateSingle.d.ts +30 -0
  53. package/dist/beta/components/Toolbar/Filters/FilterDrawer.d.ts +15 -0
  54. package/dist/beta/components/Toolbar/Filters/FilterGroup.d.ts +25 -0
  55. package/dist/beta/components/Toolbar/Filters/FilterItemWrapper.d.ts +24 -0
  56. package/dist/beta/components/Toolbar/Filters/FilterSelect.d.ts +29 -0
  57. package/dist/beta/components/Toolbar/Filters/FilterToggleButton.d.ts +24 -0
  58. package/dist/beta/components/Toolbar/Filters/internal/FilterGroupContext.d.ts +40 -0
  59. package/dist/beta/components/Toolbar/Filters/internal/types.d.ts +130 -0
  60. package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +40 -0
  61. package/dist/beta/components/Toolbar/Filters/internal/utils/test.d.ts +57 -0
  62. package/dist/beta/components/Toolbar/Toolbar.d.ts +302 -0
  63. package/dist/beta/components/Toolbar/ToolbarButton.d.ts +41 -0
  64. package/dist/beta/components/Toolbar/ToolbarButtonLink.d.ts +43 -0
  65. package/dist/beta/components/Toolbar/ToolbarButtonToggle.d.ts +42 -0
  66. package/dist/beta/components/Toolbar/ToolbarControlGroup.d.ts +20 -0
  67. package/dist/beta/components/Toolbar/ToolbarSearchField.d.ts +20 -0
  68. package/dist/beta/components/Toolbar/ToolbarSelect.d.ts +108 -0
  69. package/dist/beta/components/Toolbar/index.d.ts +9 -0
  70. package/dist/beta/components/Toolbar/internal/ToolbarItemOverflowContext.d.ts +19 -0
  71. package/dist/beta/components/Toolbar/internal/ToolbarItemWrapper.d.ts +40 -0
  72. package/dist/beta/components/Toolbar/internal/ToolbarOverflowContext.d.ts +35 -0
  73. package/dist/beta/components/Toolbar/internal/ToolbarOverflowMenu.d.ts +29 -0
  74. package/dist/beta/components/Toolbar/internal/utils/accessibility.d.ts +26 -0
  75. package/dist/beta/components/Toolbar/internal/utils/test.d.ts +29 -0
  76. package/dist/beta/components/Toolbar/types.d.ts +50 -0
  77. package/dist/beta/components/index.d.ts +1 -0
  78. package/dist/beta/index.d.ts +1 -0
  79. package/dist/beta.d.ts +2 -0
  80. package/dist/beta.js +2 -0
  81. package/dist/beta.js.map +1 -0
  82. package/dist/components/Combobox/ComboboxTypes.d.ts +8 -0
  83. package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +1 -1
  84. package/dist/components/Dialog/index.d.ts +1 -1
  85. package/dist/{indeterminate_check_box-Bg24oeHy.js → indeterminate_check_box-RY9zr3xS.js} +17 -17
  86. package/dist/{indeterminate_check_box-Bg24oeHy.js.map → indeterminate_check_box-RY9zr3xS.js.map} +1 -1
  87. package/dist/indeterminate_check_box.css +72 -66
  88. package/dist/{index-CqdP5W00.js → index-V5Ez2gq_.js} +2 -2
  89. package/dist/{index-CqdP5W00.js.map → index-V5Ez2gq_.js.map} +1 -1
  90. package/dist/index.css +125 -26
  91. package/dist/index.js +759 -27
  92. package/dist/index.js.map +1 -1
  93. package/dist/index2.css +88 -105
  94. package/dist/internal/hooks/index.d.ts +1 -0
  95. package/dist/internal/hooks/useContainerQuery/index.d.ts +1 -0
  96. package/dist/internal/hooks/useContainerQuery/useContainerQuery.d.ts +46 -0
  97. package/dist/{useDateFieldOrchestration-DPLftOxu.js → useDateFieldOrchestration-BNJCsRkS.js} +2 -2
  98. package/dist/{useDateFieldOrchestration-DPLftOxu.js.map → useDateFieldOrchestration-BNJCsRkS.js.map} +1 -1
  99. package/dist/useInfiniteCombobox-WcRgC9p6.js +179 -0
  100. package/dist/useInfiniteCombobox-WcRgC9p6.js.map +1 -0
  101. package/dist/useIntersectionObserver-BEmMDO3P.js +70 -0
  102. package/dist/useIntersectionObserver-BEmMDO3P.js.map +1 -0
  103. package/package.json +2 -1
  104. package/dist/DateFieldRange-Ba-8T-Nz.js.map +0 -1
  105. package/dist/Menu-C8we5CHP.js.map +0 -1
  106. package/dist/Toolbar-DK7tXy_W.js +0 -807
  107. package/dist/Toolbar-DK7tXy_W.js.map +0 -1
  108. package/dist/useInfiniteCombobox-BaYWUxjg.js.map +0 -1
  109. /package/dist/{useInfiniteCombobox.css → Combobox.css} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"Menu-C8we5CHP.js","sources":["../../hammer-icon/mdi/round/arrow_drop_up.svg","../src/components/Menu/internal/MenuContext.ts","../../hammer-icon/mdi/round/navigate_next.svg","../src/components/Menu/internal/MenuLegacy/MenuLegacyContext.ts","../src/components/Menu/internal/MenuLegacy/MenuLegacyItem.tsx","../src/components/Menu/internal/MenuLegacy/MenuLegacy.tsx","../src/components/Menu/MenuItem.tsx","../src/components/Menu/internal/MenuNested.tsx","../src/components/Menu/Menu.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgArrowDropUp = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M8.71 12.29 11.3 9.7a.996.996 0 0 1 1.41 0l2.59 2.59c.63.63.18 1.71-.71 1.71H9.41c-.89 0-1.33-1.08-.7-1.71z\" }));\nexport default SvgArrowDropUp;\n","import { createContext } from \"react\";\n\nimport { MenuProps } from \"../Menu\";\n\n/**\n * Context props for Menu components\n */\nexport type MenuContextProps = {\n /**\n * Function to close the root menu\n */\n closeRootMenu: () => void;\n /**\n * Whether auto height is disabled\n */\n disableAutoHeight: MenuProps[\"disableAutoHeight\"];\n};\nexport const MenuContext = createContext<MenuContextProps | null>(null);\n","import * as React from \"react\";\nconst SvgNavigateNext = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M9.31 6.71a.996.996 0 0 0 0 1.41L13.19 12l-3.88 3.88a.996.996 0 1 0 1.41 1.41l4.59-4.59a.996.996 0 0 0 0-1.41L10.72 6.7c-.38-.38-1.02-.38-1.41.01z\" }));\nexport default SvgNavigateNext;\n","import { Dispatch, HTMLProps, SetStateAction, createContext } from \"react\";\n\nimport { PopoverControlProps } from \"./MenuLegacy\";\n\nexport const MenuLegacyContext = createContext<\n {\n getItemProps: (\n userProps?: HTMLProps<HTMLElement>,\n ) => Record<string, unknown>;\n activeIndex: number | null;\n setActiveIndex?: Dispatch<SetStateAction<number | null>>;\n setHasFocusInside?: Dispatch<SetStateAction<boolean>>;\n isOpen: boolean;\n } & PopoverControlProps\n>({\n getItemProps: () => ({}),\n activeIndex: null,\n isOpen: false,\n});\n","import { useFloatingTree, useListItem } from \"@floating-ui/react\";\nimport {\n ButtonHTMLAttributes,\n MouseEvent,\n forwardRef,\n useContext,\n FocusEvent,\n ComponentPropsWithoutRef,\n ReactNode,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport { childrenToString } from \"../../../../internal/functions\";\nimport { Icon, IconProps } from \"../../../Icon\";\nimport { useMergeRefs } from \"../../../../hooks\";\n\nimport { MenuLegacyContext } from \"./MenuLegacyContext\";\n\nimport styles from \"./MenuLegacy.module.scss\";\n\nexport type MenuLegacyItemProps = {\n icon?: IconProps[\"svg\"];\n label: ReactNode;\n disabled?: boolean;\n} & ComponentPropsWithoutRef<\"button\">;\n\nexport const MenuLegacyItem = forwardRef<\n HTMLButtonElement,\n MenuLegacyItemProps & ButtonHTMLAttributes<HTMLButtonElement>\n>(({ label, disabled, icon, className, ...props }, forwardedRef) => {\n const MenuLegacy = useContext(MenuLegacyContext);\n const item = useListItem({\n label: disabled ? null : childrenToString(label),\n });\n const tree = useFloatingTree();\n const isActive = item.index === MenuLegacy.activeIndex;\n const itemCx = cx([styles[\"item\"]], className);\n return (\n <button\n {...props}\n ref={useMergeRefs([item.ref, forwardedRef])}\n type=\"button\"\n role=\"menuitem\"\n data-anv=\"menu-item\"\n className={itemCx}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n {...MenuLegacy.getItemProps({\n onClick(event: MouseEvent<HTMLButtonElement>) {\n props.onClick?.(event);\n tree?.events.emit(\"click\");\n },\n onFocus(event: FocusEvent<HTMLButtonElement>) {\n props.onFocus?.(event);\n MenuLegacy.setHasFocusInside?.(true);\n },\n })}\n >\n {icon ? <Icon inherit aria-hidden svg={icon} /> : null}\n {label}\n </button>\n );\n});\n\nMenuLegacyItem.displayName = \"MenuLegacyItem\";\n","import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingList,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n shift,\n size,\n useHover,\n safePolygon,\n useClick,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingParentNodeId,\n useFloatingTree,\n useInteractions,\n useListItem,\n useListNavigation,\n useRole,\n useTypeahead,\n limitShift,\n Placement,\n} from \"@floating-ui/react\";\nimport {\n forwardRef,\n HTMLProps,\n useContext,\n useEffect,\n useRef,\n useState,\n FocusEvent,\n MouseEvent,\n AriaAttributes,\n ReactElement,\n useMemo,\n} from \"react\";\nimport cx from \"classnames\";\nimport Next from \"@servicetitan/hammer-icon/mdi/round/navigate_next.svg\";\nimport Up from \"@servicetitan/hammer-icon/mdi/round/arrow_drop_up.svg\";\nimport Down from \"@servicetitan/hammer-icon/mdi/round/arrow_drop_down.svg\";\n\nimport { Button, ButtonProps } from \"../../../Button\";\nimport { DialogContext } from \"../../../Dialog/internal/DialogContext\";\nimport { DrawerContext } from \"../../../Drawer/internal/DrawerContext\";\nimport { Icon, IconProps } from \"../../../Icon\";\nimport { ThemeProvider, PortalProviderContext } from \"../../../../providers\";\nimport { ThemeProviderContext } from \"../../../../providers/ThemeProvider/internal/ThemeProviderContext\";\nimport { useMergeRefs } from \"../../../../hooks\";\n\nimport { MenuLegacyItem } from \"./MenuLegacyItem\";\nimport { MenuLegacyContext } from \"./MenuLegacyContext\";\n\nimport styles from \"./MenuLegacy.module.scss\";\n\nexport type PopoverControlProps = {\n disableAutoHeight?: boolean;\n root?: HTMLElement | React.MutableRefObject<HTMLElement | null> | null;\n placement?: \"bottom-start\" | \"top-start\" | \"bottom-end\" | \"top-end\";\n};\n\ntype TriggerReturnProps = {\n \"data-open\"?: boolean;\n \"data-focus-inside\"?: boolean;\n \"aria-controls\"?: AriaAttributes[\"aria-controls\"];\n \"aria-expanded\"?: AriaAttributes[\"aria-expanded\"];\n \"aria-haspopup\"?: AriaAttributes[\"aria-haspopup\"];\n id?: string;\n onClick?: () => void;\n onFocus?: () => void;\n onKeyDown?: () => void;\n onKeyUp?: () => void;\n onMouseDown?: () => void;\n onPointerDown?: () => void;\n ref?: ((instance: HTMLElement | null) => void) | null;\n};\n\ntype DefaultTriggerProps = {\n trigger?: never;\n open?: boolean;\n icon?: IconProps[\"svg\"];\n} & (\n | {\n label: string;\n }\n | {\n \"aria-label\": string;\n }\n | {\n \"aria-labellbedby\": string;\n }\n) &\n Omit<ButtonProps, \"icon\"> &\n PopoverControlProps;\n\ntype CustomTriggerProps = {\n trigger: (props: TriggerReturnProps) => ReactElement;\n icon?: IconProps[\"svg\"];\n label?: never;\n open?: boolean;\n // This is to allow any type of element to be used as a custom trigger element\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n} & Omit<HTMLProps<any>, \"ref\"> &\n PopoverControlProps;\n\nexport type MenuLegacyProps = DefaultTriggerProps | CustomTriggerProps;\n\nexport const MenuLegacyComponent = forwardRef<HTMLElement, MenuLegacyProps>(\n (\n {\n children,\n disableAutoHeight,\n open,\n icon,\n root,\n placement = \"bottom-start\",\n ...props\n },\n forwardedRef,\n ) => {\n const [isOpen, setIsOpen] = useState(!!open || false);\n const [hasFocusInside, setHasFocusInside] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n\n const scrollRef = useRef<HTMLDivElement>(null);\n const [scrollTop, setScrollTop] = useState(0);\n const [menuHeight, setMenuLegacyHeight] = useState<number | null>(null);\n const [arrowStart, setArrowStart] = useState(false);\n const [arrowEnd, setArrowEnd] = useState(false);\n\n const elementsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const labelsRef = useRef<Array<string | null>>([]);\n const parent = useContext(MenuLegacyContext);\n const { root: portalRoot } = useContext(PortalProviderContext);\n\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n const parentId = useFloatingParentNodeId();\n const item = useListItem();\n\n const isNested = parentId != null;\n\n const { theme, mode = \"light\" } = useContext(ThemeProviderContext);\n\n const dialogContext = useContext(DialogContext);\n const drawerContext = useContext(DrawerContext);\n\n const fallbackArr = () => {\n if (!isNested) {\n if (placement.startsWith(\"top\")) {\n return disableAutoHeight\n ? placement\n : [\"top-start\", \"top-end\", \"bottom-start\", \"bottom-end\"];\n }\n return disableAutoHeight\n ? placement\n : [\"bottom-start\", \"bottom-end\", \"top-start\", \"top-end\"];\n }\n\n return parent.disableAutoHeight\n ? [\"right-start\"]\n : [\"right-start\", \"right-end\", \"left-start\", \"left-end\"];\n };\n\n const handleIsOpenChange = (internalOpen: boolean) => {\n if (typeof open === \"boolean\") {\n setIsOpen(open);\n return;\n }\n setIsOpen(internalOpen);\n };\n\n const { floatingStyles, refs, context } = useFloating<HTMLButtonElement>({\n nodeId,\n open: isOpen,\n onOpenChange: handleIsOpenChange,\n placement: isNested ? \"right-start\" : placement,\n middleware: [\n offset({\n mainAxis: isNested ? 0 : 4,\n alignmentAxis: isNested ? -4 : 0,\n }),\n flip({\n fallbackStrategy: \"bestFit\",\n fallbackPlacements: fallbackArr() as Placement[],\n }),\n shift({\n mainAxis: !parent.disableAutoHeight,\n crossAxis: false,\n limiter: limitShift({\n mainAxis: !parent.disableAutoHeight,\n }),\n }),\n size({\n padding: 8,\n apply({ availableWidth, availableHeight, elements }) {\n if (disableAutoHeight ?? parent.disableAutoHeight) return;\n setMenuLegacyHeight(availableHeight);\n Object.assign(elements.floating.style, {\n maxWidth: `${availableWidth}px`,\n maxHeight: `${availableHeight}px`,\n });\n },\n }),\n ],\n whileElementsMounted: autoUpdate,\n });\n const [hoverEnabled, setHoverEnabled] = useState(false);\n const hover = useHover(context, {\n enabled: hoverEnabled,\n delay: { open: 75 },\n handleClose: safePolygon({ blockPointerEvents: true }),\n });\n const click = useClick(context, {\n event: \"mousedown\",\n toggle: !isNested,\n ignoreMouse: isNested,\n });\n const role = useRole(context, { role: \"menu\" });\n const dismiss = useDismiss(context, { bubbles: true });\n const listNavigation = useListNavigation(context, {\n listRef: elementsRef,\n activeIndex,\n nested: isNested,\n onNavigate: setActiveIndex,\n });\n const typeahead = useTypeahead(context, {\n listRef: labelsRef,\n onMatch: isOpen ? setActiveIndex : undefined,\n activeIndex,\n });\n\n const { getReferenceProps, getFloatingProps, getItemProps } =\n useInteractions([hover, click, role, dismiss, listNavigation, typeahead]);\n\n // Event emitter allows you to communicate across tree components.\n // This effect closes all menus when an item gets clicked anywhere\n // in the tree.\n useEffect(() => {\n if (!tree) return;\n\n function handleTreeClick() {\n setIsOpen(!!open || false);\n }\n\n function onSubMenuLegacyOpen(event: {\n nodeId: string;\n parentId: string;\n }) {\n if (event.nodeId === nodeId || event.parentId !== parentId) {\n return;\n }\n setIsOpen(!!open || false);\n }\n\n tree.events.on(\"click\", handleTreeClick);\n tree.events.on(\"menuopen\", onSubMenuLegacyOpen);\n\n return () => {\n tree.events.off(\"click\", handleTreeClick);\n tree.events.off(\"menuopen\", onSubMenuLegacyOpen);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tree, nodeId, parentId]);\n\n useEffect(() => {\n if (disableAutoHeight ?? parent.disableAutoHeight) return;\n if (!isOpen) {\n setMenuLegacyHeight(null);\n return;\n }\n setTimeout(() => {\n if (!scrollRef.current || !refs.floating.current) return;\n setMenuLegacyHeight(refs.floating.current.clientHeight);\n const isOverflow =\n scrollRef.current.scrollHeight > refs.floating.current.clientHeight;\n if (!isOverflow) return;\n const showTop = scrollRef.current.scrollTop > 0;\n const showBottom =\n scrollRef.current.scrollHeight -\n refs.floating.current.clientHeight -\n scrollTop -\n 16 >\n 0;\n setArrowStart(showTop);\n setArrowEnd(showBottom);\n }, 0);\n }, [\n disableAutoHeight,\n isOpen,\n parent.disableAutoHeight,\n refs.floating,\n scrollTop,\n ]);\n\n useEffect(() => {\n if (!isOpen || !tree) return;\n tree.events.emit(\"menuopen\", { parentId, nodeId });\n }, [tree, isOpen, nodeId, parentId]);\n\n const menuComponentCX = cx({\n [styles[\"nested-menu\"]]: isNested,\n [styles[\"item\"]]: !isNested,\n });\n\n const menuRefs = useMergeRefs([refs.setReference, item.ref, forwardedRef]);\n\n const triggerProps: TriggerReturnProps = {\n \"data-open\": isOpen,\n \"data-focus-inside\": hasFocusInside,\n ref: menuRefs,\n ...getReferenceProps(\n parent.getItemProps({\n ...props,\n // This is to allow any type of element to be used as a custom trigger element\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onFocus(event: FocusEvent<any>) {\n props.onFocus?.(event);\n setHasFocusInside(false);\n parent.setHasFocusInside?.(true);\n },\n // This is to allow any type of element to be used as a custom trigger element\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as HTMLProps<any>),\n ),\n };\n\n const value = useMemo(\n () => ({\n activeIndex,\n setActiveIndex,\n getItemProps,\n setHasFocusInside,\n isOpen,\n disableAutoHeight: disableAutoHeight ?? parent.disableAutoHeight,\n }),\n [\n activeIndex,\n disableAutoHeight,\n getItemProps,\n isOpen,\n parent.disableAutoHeight,\n ],\n );\n\n return (\n <FloatingNode id={nodeId}>\n {isNested ? (\n <button\n ref={menuRefs}\n tabIndex={parent.activeIndex === item.index ? 0 : -1}\n role=\"menuitem\"\n data-anv=\"menu-item\"\n data-open={isOpen ? \"\" : undefined}\n data-nested=\"\"\n data-focus-inside={hasFocusInside ? \"\" : undefined}\n className={menuComponentCX}\n {...getReferenceProps(\n parent.getItemProps({\n ...props,\n onFocus(event: FocusEvent<HTMLButtonElement>) {\n props.onFocus?.(event);\n setHasFocusInside(false);\n parent.setHasFocusInside?.(true);\n },\n onMouseEnter: () => setHoverEnabled(true),\n } as HTMLProps<HTMLButtonElement>),\n )}\n >\n {icon ? <Icon inherit aria-hidden svg={icon} /> : null}\n {\"label\" in props && props.label}\n <div style={{ flexGrow: 1 }} />\n <Icon aria-hidden svg={Next} />\n </button>\n ) : \"trigger\" in props ? (\n props.trigger?.(triggerProps)\n ) : (\n <Button\n {...(props as ButtonProps)}\n {...(triggerProps as DefaultTriggerProps)}\n {...getReferenceProps({\n onFocus: (event) => props.onFocus?.(event),\n } as HTMLProps<HTMLButtonElement>)}\n icon={icon}\n data-anv=\"menu\"\n >\n {\"label\" in props && props.label}\n </Button>\n )}\n\n <MenuLegacyContext.Provider value={value}>\n <FloatingList elementsRef={elementsRef} labelsRef={labelsRef}>\n {isOpen &&\n (dialogContext == null ||\n dialogContext?.ref?.current != null) && (\n <FloatingPortal\n root={\n root ??\n dialogContext?.ref?.current ??\n drawerContext?.ref?.current ??\n portalRoot\n }\n >\n <FloatingFocusManager\n context={context}\n modal={false}\n initialFocus={isNested ? -1 : 0}\n returnFocus={!isNested}\n >\n <ThemeProvider theme={theme} mode={mode}>\n <div\n ref={refs.setFloating}\n className={styles[\"menu\"]}\n style={floatingStyles}\n {...getFloatingProps({\n onMouseEnter: () => {\n setHoverEnabled(false);\n },\n onKeyDown: (e) => {\n if (\n e.code === \"ArrowLeft\" ||\n e.code === \"ArrowRight\"\n ) {\n e.stopPropagation();\n }\n },\n })}\n >\n {arrowStart && (\n <div className={styles[\"arrow-up\"]} aria-hidden>\n <Icon\n svg={Up}\n size=\"xlarge\"\n className={styles[\"arrow-icon\"]}\n />\n </div>\n )}\n <div\n ref={scrollRef}\n className={styles[\"scroll\"]}\n style={{\n position: \"relative\",\n maxHeight: menuHeight ?? \"inherit\",\n }}\n onScroll={(e: MouseEvent<HTMLDivElement>) =>\n setScrollTop(e.currentTarget.scrollTop)\n }\n >\n {children}\n </div>\n {arrowEnd && (\n <div className={styles[\"arrow-down\"]} aria-hidden>\n <Icon\n svg={Down}\n size=\"xlarge\"\n className={styles[\"arrow-icon\"]}\n />\n </div>\n )}\n </div>\n </ThemeProvider>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </FloatingList>\n </MenuLegacyContext.Provider>\n </FloatingNode>\n );\n },\n);\n\nMenuLegacyComponent.displayName = \"MenuLegacyComponent\";\n\nconst MenuLegacyElement = forwardRef<HTMLElement, MenuLegacyProps>(\n (props, ref) => {\n const parentId = useFloatingParentNodeId();\n\n if (parentId === null) {\n return (\n <FloatingTree>\n <MenuLegacyComponent {...props} ref={ref} />\n </FloatingTree>\n );\n }\n\n return <MenuLegacyComponent {...props} ref={ref} />;\n },\n);\n\nMenuLegacyElement.displayName = \"MenuLegacy\";\n\nexport const MenuLegacy = Object.assign(MenuLegacyElement, {\n Item: MenuLegacyItem,\n});\n","import {\n ButtonHTMLAttributes,\n forwardRef,\n useContext,\n ComponentPropsWithoutRef,\n ReactNode,\n MouseEvent,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport { childrenToString, supportsPopover } from \"../../internal/functions\";\nimport { DataTrackingId } from \"../../types\";\nimport { Icon, IconProps } from \"../Icon\";\nimport { MenuContext } from \"./internal/MenuContext\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\n\nimport { MenuLegacyItem } from \"./internal/MenuLegacy\";\n\nimport styles from \"./Menu.module.scss\";\n\n/**\n * Props for the MenuItem component\n * @extends ComponentPropsWithoutRef<\"button\">\n */\nexport type MenuItemProps = {\n /**\n * Icon to display next to the menu item label\n */\n icon?: IconProps[\"svg\"];\n /**\n * The label text or content for the menu item\n */\n label: ReactNode;\n /**\n * Whether the menu item is disabled\n * @default false\n */\n disabled?: boolean;\n} & ComponentPropsWithoutRef<\"button\"> &\n DataTrackingId;\n\n/**\n * MenuItem component for individual menu options within a Menu.\n *\n * Features:\n * - Supports icons and labels\n * - Keyboard navigation support\n * - Disabled state handling\n * - Automatic menu closing on selection\n * - Fully accessible with proper ARIA attributes\n * - Focus management and tab index handling\n * - Click and mouse enter event handling\n * - Legacy popover support with fallback\n *\n * @example\n * <MenuItem\n * label=\"Edit Profile\"\n * icon={EditIcon}\n * onClick={() => console.log('Edit profile clicked')}\n * />\n */\nexport const MenuItem = forwardRef<\n HTMLButtonElement,\n MenuItemProps & ButtonHTMLAttributes<HTMLButtonElement>\n>((props, ref) => {\n const {\n label,\n disabled,\n icon,\n className,\n onClick,\n onMouseEnter,\n id: idProp,\n ...rest\n } = props;\n const menuContext = useContext(MenuContext);\n const uid = useId();\n const buttonRef = useRef<HTMLButtonElement>(null);\n const combinedRef = useMergeRefs([buttonRef, ref]);\n const [tabIndex, setTabIndex] = useState(-1);\n const itemCx = cx([styles[\"item\"]], className);\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n onClick?.(e);\n menuContext?.closeRootMenu();\n };\n const onMouseEnterHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onMouseEnter?.(e);\n buttonRef.current?.focus();\n };\n\n const onFocusHandler = () => {\n setTabIndex(0);\n };\n const onBlurHandler = () => {\n setTabIndex(-1);\n };\n\n const data = {\n label: childrenToString(props.label),\n };\n\n const trackingId = useTrackingId({\n name: \"MenuItem\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n if (!supportsPopover())\n return (\n <MenuLegacyItem data-tracking-id={trackingId} {...props} ref={ref} />\n );\n\n return (\n <button\n data-tracking-id={trackingId}\n {...rest}\n ref={combinedRef}\n type=\"button\"\n role=\"menuitem\"\n data-anv=\"menu-item\"\n id={idProp ?? `menuitem-${uid.replace(/:/g, \"\")}`}\n className={itemCx}\n tabIndex={tabIndex}\n aria-disabled={disabled}\n onClick={onClickHandler}\n onMouseEnter={onMouseEnterHandler}\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n >\n {icon ? <Icon inherit aria-hidden svg={icon} /> : null}\n {label}\n </button>\n );\n});\n\nMenuItem.displayName = \"MenuItem\";\n","import {\n Placement,\n size,\n flip,\n limitShift,\n offset,\n shift,\n computePosition,\n autoUpdate,\n} from \"@floating-ui/react\";\nimport {\n ComponentPropsWithoutRef,\n useEffect,\n useId,\n useRef,\n useState,\n useLayoutEffect,\n useCallback,\n useContext,\n MouseEvent,\n KeyboardEvent,\n} from \"react\";\nimport cx from \"classnames\";\nimport Next from \"@servicetitan/hammer-icon/mdi/round/navigate_next.svg\";\nimport Up from \"@servicetitan/hammer-icon/mdi/round/arrow_drop_up.svg\";\nimport Down from \"@servicetitan/hammer-icon/mdi/round/arrow_drop_down.svg\";\n\nimport {\n getActiveElement,\n safeHidePopover,\n safeShowPopover,\n} from \"../../../internal/functions\";\nimport { Icon, IconProps } from \"../../Icon\";\n\nimport { MenuCommonProps } from \"../types\";\nimport { MenuContext } from \"./MenuContext\";\n\nimport styles from \"../Menu.module.scss\";\n\n/**\n * Props for the MenuNested component\n * @extends ComponentPropsWithoutRef<\"button\">\n * @extends MenuCommonProps\n */\nexport type MenuNestedProps = ComponentPropsWithoutRef<\"button\"> &\n MenuCommonProps & {\n /**\n * Icon to display on the nested menu button\n */\n icon?: IconProps[\"svg\"];\n };\n\n/**\n * MenuNested component for creating nested submenus within a Menu.\n *\n * Features:\n * - Hover-based menu opening and closing\n * - Automatic positioning with fallback strategies\n * - Keyboard navigation with arrow keys\n * - Scroll indicators for overflow content\n * - Automatic height adjustment\n * - Focus management and accessibility\n * - Popover API support with legacy fallback\n * - Smooth transitions and animations\n * - Context integration with parent menus\n *\n * @example\n * <Menu label=\"Edit\">\n * <Menu.Item label=\"Cut\" onClick={() => console.log('Cut clicked')} />\n * <Menu label=\"Copy as\">\n * <Menu.Item label=\"Text\" onClick={() => console.log('Copy as Text')} />\n * <Menu.Item label=\"Video\" onClick={() => console.log('Copy as Video')} />\n * <Menu label=\"Image\">\n * <Menu.Item label=\".png\" onClick={() => console.log('Copy as PNG')} />\n * <Menu.Item label=\".jpg\" onClick={() => console.log('Copy as JPG')} />\n * </Menu>\n * </Menu>\n * </Menu>\n */\nexport const MenuNested = (props: MenuNestedProps) => {\n const { children, open, defaultOpen = false, label, className, icon } = props;\n const uid = useId();\n const [tabIndex, setTabIndex] = useState(-1);\n const [openState, setOpenState] = useState<boolean>(open ?? defaultOpen);\n const [scrollTop, setScrollTop] = useState(0);\n const [menuHeight, setMenuHeight] = useState<number | null>(null);\n const [arrowStart, setArrowStart] = useState(false);\n const [arrowEnd, setArrowEnd] = useState(false);\n const invokerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const childrenRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [focusItems, setFocusItems] = useState<HTMLElement[]>();\n const menuContext = useContext(MenuContext);\n\n // TODO: Find a way to test these properly!\n // Stryker disable all : Currently relying on Chromatic test for all visuals\n /* istanbul ignore next */\n const fallbackArr = useCallback(() => {\n return menuContext?.disableAutoHeight\n ? [\"right-start\"]\n : [\"right-start\", \"right-end\", \"left-start\", \"left-end\"];\n }, [menuContext?.disableAutoHeight]);\n\n const updatePosition = useCallback(() => {\n if (!invokerRef.current || !menuRef.current) return;\n const timeoutId = setTimeout(() => {\n if (!invokerRef.current || !menuRef.current) return;\n computePosition(invokerRef.current, menuRef.current, {\n placement: \"right-start\",\n middleware: [\n offset({\n mainAxis: 0,\n alignmentAxis: -4,\n }),\n flip({\n fallbackStrategy: \"bestFit\",\n fallbackPlacements: fallbackArr() as Placement[],\n }),\n shift({\n mainAxis: !menuContext?.disableAutoHeight,\n crossAxis: false,\n limiter: limitShift({\n mainAxis: !menuContext?.disableAutoHeight,\n }),\n }),\n size({\n padding: 8,\n apply({ availableWidth, availableHeight, elements }) {\n if (menuContext?.disableAutoHeight) return;\n const newHeight = availableHeight;\n if (Math.abs((menuHeight ?? 0) - newHeight) > 1) {\n setMenuHeight(newHeight);\n Object.assign(elements.floating.style, {\n maxWidth: `${availableWidth - 16}px`,\n maxHeight: `${availableHeight - 16}px`,\n });\n }\n },\n }),\n ],\n }).then(({ x, y }) => {\n if (!menuRef.current) return;\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y + 8}px`,\n });\n });\n }, 50);\n return () => clearTimeout(timeoutId);\n }, [fallbackArr, menuContext?.disableAutoHeight, menuHeight]);\n\n const menuReference = useRef<HTMLDivElement | null>(null);\n useLayoutEffect(() => {\n if (!openState) {\n setMenuHeight(null);\n setScrollTop(0);\n return;\n }\n\n if (!menuRef.current) return;\n menuReference.current = menuRef.current;\n\n let resizeTimeout: number | null = null;\n const lastDimensions = {\n height: menuReference.current.clientHeight,\n scrollHeight: childrenRef.current?.scrollHeight ?? 0,\n };\n\n const updateArrows = (height: number, scrollHeight: number) => {\n if (!childrenRef.current) return;\n const isOverflow = scrollHeight > height;\n setArrowStart(isOverflow && childrenRef.current.scrollTop > 0);\n setArrowEnd(isOverflow && scrollHeight - height - scrollTop - 16 > 0);\n };\n\n const observer = new ResizeObserver(() => {\n if (!childrenRef.current || !menuReference.current) return;\n\n if (resizeTimeout) {\n window.clearTimeout(resizeTimeout);\n }\n\n resizeTimeout = window.setTimeout(() => {\n const newHeight = menuReference.current?.clientHeight ?? 0;\n const newScrollHeight = childrenRef.current?.scrollHeight ?? 0;\n\n if (!newHeight) return;\n\n lastDimensions.height = newHeight;\n lastDimensions.scrollHeight = newScrollHeight;\n\n setMenuHeight(newHeight);\n updateArrows(newHeight, newScrollHeight);\n }, 100); // Shorter debounce for nested menu\n });\n\n if (menuReference.current) {\n observer.observe(menuReference.current);\n }\n\n return () => {\n if (resizeTimeout) {\n window.clearTimeout(resizeTimeout);\n }\n if (menuReference.current) {\n observer.unobserve(menuReference.current);\n }\n observer.disconnect();\n };\n }, [openState, scrollTop]);\n\n // Effect to add autoUpdate to eventListener\n // while the popover is opened\n useLayoutEffect(() => {\n if (!menuRef.current || !invokerRef.current) return;\n\n const cleanup = autoUpdate(invokerRef.current, menuRef.current, () => {\n updatePosition();\n });\n\n return () => {\n cleanup();\n };\n }, [updatePosition]);\n // Stryker restore all\n\n const popoverHoverTriggered = useRef<boolean>();\n\n // Main function to open menu\n // This gets canceled if close is called before the promise is resolved\n // Ex) Allows cursor jump from invoker to menu\n // without closing\n const openMenu = useCallback(async () => {\n popoverHoverTriggered.current = true;\n await new Promise((resolve) => setTimeout(resolve, 100));\n if (\n !popoverHoverTriggered.current ||\n !menuRef.current ||\n !childrenRef.current\n )\n return;\n\n // Show the menu but keep it transparent\n menuRef.current.style.opacity = \"0\";\n safeShowPopover(menuRef.current);\n\n // Position the menu before showing it\n if (!invokerRef.current || !menuRef.current) return;\n\n await computePosition(invokerRef.current, menuRef.current, {\n placement: \"right-start\",\n middleware: [\n offset({\n mainAxis: 0,\n alignmentAxis: -4,\n }),\n flip({\n fallbackStrategy: \"bestFit\",\n fallbackPlacements: fallbackArr() as Placement[],\n }),\n shift({\n mainAxis: !menuContext?.disableAutoHeight,\n crossAxis: false,\n limiter: limitShift({\n mainAxis: !menuContext?.disableAutoHeight,\n }),\n }),\n ],\n }).then(({ x, y }) => {\n if (!menuRef.current) return;\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y + 8}px`,\n });\n });\n\n setOpenState(true);\n const focusables = Array.from(\n childrenRef.current.querySelectorAll(\n `#scroller-${uid.replace(/:/g, \"\")} > button, #scroller-${uid.replace(/:/g, \"\")} > div[data-nested=\"true\"] > button, #scroller-${uid.replace(/:/g, \"\")} > a[href]`,\n ),\n ) as HTMLElement[];\n setFocusItems(focusables);\n\n // Make the menu visible with a short delay to ensure smooth transition\n requestAnimationFrame(() => {\n if (!menuRef.current) return;\n menuRef.current.style.opacity = \"1\";\n });\n }, [uid, fallbackArr, menuContext?.disableAutoHeight]);\n\n // Main function to close menu\n // This gets canceled if close is called before the promise is resolved\n // Ex) Allows menu to be kept closed when cursor\n // moves out of the invoker and menu\n const closeMenu = useCallback(async (fn?: () => void) => {\n popoverHoverTriggered.current = false;\n await new Promise((resolve) => setTimeout(resolve, 100));\n if (popoverHoverTriggered.current || !menuRef.current) return;\n fn?.();\n safeHidePopover(menuRef.current);\n setOpenState(false);\n }, []);\n\n const isControlled = typeof open !== \"undefined\";\n\n // Updating openness for controlled\n const initialRender = useRef(true);\n useEffect(() => {\n if (!isControlled) return;\n if (initialRender.current === true) {\n if (open && menuRef.current) {\n openMenu();\n }\n initialRender.current = false;\n return;\n }\n setOpenState(open);\n if (open) {\n openMenu();\n } else {\n closeMenu();\n }\n }, [closeMenu, isControlled, open, openMenu]);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const nestedContainer = containerRef.current;\n nestedContainer.addEventListener(\"focusin\", (_e) => {\n openMenu();\n });\n nestedContainer.addEventListener(\"focusout\", () => closeMenu());\n return () => {\n nestedContainer.removeEventListener(\"focusin\", () => openMenu());\n nestedContainer.removeEventListener(\"focusout\", () => closeMenu());\n };\n }, [closeMenu, openMenu]);\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDivElement>) => {\n if (!openState || !childrenRef.current) return;\n\n const currentActiveIndex = focusItems?.findIndex(\n (item) => item.id === getActiveElement(document)?.id,\n );\n\n const firstItem = focusItems?.[0] as HTMLElement;\n const lastItem = focusItems?.[focusItems.length - 1] as HTMLElement;\n\n if (e.code === \"Escape\") {\n menuContext?.closeRootMenu();\n }\n if (e.code === \"ArrowLeft\") {\n e.stopPropagation();\n e.preventDefault();\n invokerRef.current?.focus();\n closeMenu();\n }\n if (e.code === \"ArrowDown\") {\n e.stopPropagation();\n if (currentActiveIndex === (focusItems?.length ?? 0) - 1) {\n firstItem.focus();\n return;\n }\n const nextItem = focusItems?.[\n (currentActiveIndex ?? 0) + 1\n ] as HTMLElement;\n nextItem.focus();\n return;\n }\n if (e.code === \"ArrowUp\") {\n e.stopPropagation();\n e.preventDefault();\n if (currentActiveIndex === 0) {\n lastItem.focus();\n return;\n }\n const prevItem = focusItems?.[\n (currentActiveIndex ?? 0) - 1\n ] as HTMLElement;\n prevItem.focus();\n return;\n }\n };\n\n const onFocusHandler = () => {\n setTabIndex(0);\n };\n const onBlurHandler = () => {\n setTabIndex(-1);\n };\n\n const MenuButtonOnKeyDownHandler = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.code === \"ArrowRight\") {\n e.stopPropagation();\n e.preventDefault();\n openMenu();\n const firstItem = menuRef.current?.querySelectorAll(\n `#scroller-${uid.replace(/:/g, \"\")} > button, #scroller-${uid.replace(/:/g, \"\")} > a[href]`,\n )[0];\n (firstItem as HTMLButtonElement).focus();\n }\n };\n\n const MenuButtonOnClick = () => {\n if (isControlled) return;\n openMenu();\n };\n\n const itemCx = cx([styles[\"item\"]], className);\n\n return (\n <div ref={containerRef} data-nested=\"true\">\n <button\n role=\"menuitem\"\n data-anv=\"menu-item\"\n data-state={openState ? \"open\" : \"close\"}\n ref={invokerRef}\n id={`menuitem-${uid.replace(/:/g, \"\")}`}\n aria-expanded={openState}\n onMouseEnter={(e) => {\n e.currentTarget.focus();\n }}\n onKeyDown={MenuButtonOnKeyDownHandler}\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onClick={MenuButtonOnClick}\n aria-haspopup={true}\n aria-controls={`menu-${uid.replace(/:/g, \"\")}`}\n className={itemCx}\n tabIndex={tabIndex}\n >\n {icon ? <Icon inherit aria-hidden svg={icon} /> : null}\n {label}\n <div style={{ flexGrow: 1 }} />\n <Icon aria-hidden svg={Next} />\n </button>\n <div\n popover=\"auto\"\n id={`menu-${uid.replace(/:/g, \"\")}`}\n data-anv=\"menu-content\"\n className={styles.content}\n ref={menuRef}\n role=\"presentation\"\n onKeyDown={onKeyDownHandler}\n >\n {arrowStart && (\n <div className={styles[\"arrow-up\"]} aria-hidden>\n <Icon svg={Up} size=\"xlarge\" className={styles[\"arrow-icon\"]} />\n </div>\n )}\n <div\n className={styles.scroller}\n tabIndex={-1}\n ref={childrenRef}\n style={{\n position: \"relative\",\n maxHeight: menuHeight ?? \"inherit\",\n }}\n onScroll={(e: MouseEvent<HTMLDivElement>) =>\n setScrollTop(e.currentTarget.scrollTop)\n }\n role=\"menu\"\n id={`scroller-${uid.replace(/:/g, \"\")}`}\n >\n {children}\n </div>\n {arrowEnd && (\n <div className={styles[\"arrow-down\"]} aria-hidden>\n <Icon svg={Down} size=\"xlarge\" className={styles[\"arrow-icon\"]} />\n </div>\n )}\n </div>\n </div>\n );\n};\n","import {\n useEffect,\n useId,\n useRef,\n useState,\n useMemo,\n useLayoutEffect,\n useCallback,\n useContext,\n KeyboardEvent,\n MouseEvent,\n forwardRef,\n} from \"react\";\nimport {\n Placement,\n size,\n flip,\n limitShift,\n offset,\n shift,\n computePosition,\n autoUpdate,\n} from \"@floating-ui/react\";\nimport cx from \"classnames\";\nimport Up from \"@servicetitan/hammer-icon/mdi/round/arrow_drop_up.svg\";\nimport Down from \"@servicetitan/hammer-icon/mdi/round/arrow_drop_down.svg\";\n\nimport { Button, ButtonProps } from \"../Button\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { DialogContext } from \"../Dialog/internal/DialogContext\";\nimport { getActiveElement } from \"../../internal/functions\";\nimport { Icon, IconProps } from \"../Icon\";\nimport {\n supportsPopover,\n safeHidePopover,\n safeShowPopover,\n} from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\n\nimport { MenuContext } from \"./internal/MenuContext\";\nimport { MenuItem } from \"./MenuItem\";\nimport {\n MenuLegacy as MenuLegacyComponent,\n MenuLegacyProps,\n} from \"./internal/MenuLegacy\";\nimport { MenuNested } from \"./internal/MenuNested\";\nimport { MenuCommonProps } from \"./types\";\n\nimport styles from \"./Menu.module.scss\";\n\n/**\n * Props for the Menu component\n * @extends Omit<ButtonProps, \"icon\">\n * @extends MenuCommonProps\n */\nexport type MenuProps = Omit<ButtonProps, \"icon\"> &\n MenuCommonProps & {\n /**\n * Icon to display on the menu button\n */\n icon?: IconProps[\"svg\"];\n } & DataTrackingId;\n\nconst MenuElement = forwardRef<HTMLElement, MenuProps>(\n (props: MenuProps, ref) => {\n const {\n children,\n placement = \"bottom-start\",\n open,\n defaultOpen = false,\n disableAutoHeight,\n label,\n onOutsidePress,\n trigger,\n root,\n contentClassName,\n maxHeight,\n ...rest\n } = props;\n const uid = useId();\n const [openState, setOpenState] = useState<boolean>(open ?? defaultOpen);\n const [scrollTop, setScrollTop] = useState(0);\n const [menuHeight, setMenuHeight] = useState<number | null>(null);\n const [arrowStart, setArrowStart] = useState(false);\n const [arrowEnd, setArrowEnd] = useState(false);\n const invokerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const childrenRef = useRef<HTMLDivElement>(null);\n const [focusItems, setFocusItems] = useState<HTMLElement[]>();\n const dialogContext = useContext(DialogContext);\n const menuContext = useContext(MenuContext);\n\n // TODO: Find a way to test these properly!\n // Stryker disable all : Currently relying on Chromatic test for all visuals\n const fallbackArr = useCallback(() => {\n if (placement.startsWith(\"top\")) {\n return disableAutoHeight\n ? placement\n : [\"top-start\", \"top-end\", \"bottom-start\", \"bottom-end\"];\n }\n return disableAutoHeight\n ? placement\n : [\"bottom-start\", \"bottom-end\", \"top-start\", \"top-end\"];\n }, [disableAutoHeight, placement]);\n\n /* istanbul ignore next */\n const updatePosition = useCallback(() => {\n if (!invokerRef.current || !menuRef.current) return;\n const timeoutId = setTimeout(() => {\n if (!invokerRef.current || !menuRef.current) return;\n computePosition(invokerRef.current, menuRef.current, {\n placement: placement,\n middleware: [\n offset({\n mainAxis: 5,\n alignmentAxis: 0,\n }),\n flip({\n fallbackStrategy: \"bestFit\",\n fallbackPlacements: fallbackArr() as Placement[],\n }),\n shift({\n mainAxis: !menuContext?.disableAutoHeight,\n crossAxis: false,\n limiter: limitShift({\n mainAxis: !menuContext?.disableAutoHeight,\n }),\n }),\n size({\n padding: 8,\n apply({ availableWidth, availableHeight, elements }) {\n if (disableAutoHeight ?? menuContext?.disableAutoHeight) return;\n const newHeight = availableHeight;\n if (Math.abs((menuHeight ?? 0) - newHeight) > 1) {\n setMenuHeight(newHeight);\n Object.assign(elements.floating.style, {\n maxWidth: `${availableWidth - 16}px`,\n maxHeight: maxHeight\n ? `${Math.min(availableHeight - 16, typeof maxHeight === \"number\" ? maxHeight : parseInt(maxHeight.toString()))}px`\n : `${availableHeight - 16}px`,\n });\n }\n },\n }),\n ],\n }).then(({ x, y }) => {\n if (!menuRef.current) return;\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n });\n }, 50);\n return () => clearTimeout(timeoutId);\n }, [\n placement,\n fallbackArr,\n menuContext?.disableAutoHeight,\n disableAutoHeight,\n menuHeight,\n maxHeight,\n ]);\n\n const menuReference = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n if (!openState) {\n setMenuHeight(null);\n setScrollTop(0);\n return;\n }\n if (!menuRef.current) return;\n menuReference.current = menuRef.current;\n\n let resizeTimeout: number | null = null;\n const lastDimensions = {\n height: menuReference.current.clientHeight,\n scrollHeight: childrenRef.current?.scrollHeight ?? 0,\n };\n\n const updateArrows = (height: number, scrollHeight: number) => {\n if (!childrenRef.current) return;\n const isOverflow = scrollHeight > height;\n setArrowStart(isOverflow && childrenRef.current.scrollTop > 0);\n setArrowEnd(isOverflow && scrollHeight - height - scrollTop - 16 > 0);\n };\n\n const observer = new ResizeObserver(() => {\n if (!childrenRef.current || !menuReference.current) return;\n\n if (resizeTimeout) {\n window.clearTimeout(resizeTimeout);\n }\n\n resizeTimeout = window.setTimeout(() => {\n const newHeight = menuReference.current?.clientHeight ?? 0;\n const newScrollHeight = childrenRef.current?.scrollHeight ?? 0;\n\n if (!newHeight) return;\n\n lastDimensions.height = newHeight;\n lastDimensions.scrollHeight = newScrollHeight;\n\n setMenuHeight(newHeight);\n updateArrows(newHeight, newScrollHeight);\n }, 150);\n });\n\n if (menuReference.current) {\n observer.observe(menuReference.current);\n }\n\n return () => {\n if (resizeTimeout) {\n window.clearTimeout(resizeTimeout);\n }\n if (menuReference.current) {\n observer.unobserve(menuReference.current);\n }\n observer.disconnect();\n };\n }, [openState, scrollTop]);\n\n // Effect to add autoUpdate to eventListener\n // while the popover is opened\n useLayoutEffect(() => {\n if (!menuRef.current || !invokerRef.current) return;\n\n const cleanup = autoUpdate(invokerRef.current, menuRef.current, () => {\n updatePosition();\n });\n\n return () => {\n cleanup();\n };\n }, [updatePosition]);\n // Stryker restore all\n\n // Main function to open menu\n // This gets canceled if close is called before the promise is resolved\n // Ex) Allows cursor jump from invoker to menu\n // without closing\n const openMenu = useCallback(async () => {\n if (!menuRef.current || !childrenRef.current) return;\n\n safeShowPopover(menuRef.current);\n\n // Position the menu before showing it\n if (!invokerRef.current || !menuRef.current) return;\n\n await computePosition(invokerRef.current, menuRef.current, {\n placement: placement,\n middleware: [\n offset({\n mainAxis: 5,\n alignmentAxis: 0,\n }),\n flip({\n fallbackStrategy: \"bestFit\",\n fallbackPlacements: fallbackArr() as Placement[],\n }),\n shift({\n mainAxis: !menuContext?.disableAutoHeight,\n crossAxis: false,\n limiter: limitShift({\n mainAxis: !menuContext?.disableAutoHeight,\n }),\n }),\n ],\n }).then(({ x, y }) => {\n if (!menuRef.current) return;\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n menuRef.current.dataset.positioned = \"true\";\n });\n\n setOpenState(true);\n\n // Wait for next frame to ensure DOM is updated\n requestAnimationFrame(() => {\n if (!childrenRef.current) return;\n const focusables = Array.from(\n childrenRef.current.querySelectorAll(\n `#scroller-${uid.replace(/:/g, \"\")} > button, #scroller-${uid.replace(/:/g, \"\")} > div[data-nested=\"true\"] > button, #scroller-${uid.replace(/:/g, \"\")} > a[href]`,\n ),\n ) as HTMLElement[];\n setFocusItems(focusables);\n });\n\n dialogContext?.setHasOpenPopover?.(true);\n }, [\n dialogContext,\n uid,\n placement,\n fallbackArr,\n menuContext?.disableAutoHeight,\n ]);\n\n // Main function to close menu\n // This gets canceled if close is called before the promise is resolved\n // Ex) Allows popover to be kept closed when cursor\n // moves out of the invoker and menu\n const closeMenu = useCallback(\n async (fn?: () => void) => {\n if (!menuRef.current || !openState) return;\n fn?.();\n setOpenState(false);\n safeHidePopover(menuRef.current);\n dialogContext?.setHasOpenPopover?.(false);\n invokerRef.current?.focus();\n },\n [openState, dialogContext],\n );\n\n const isControlled = typeof open !== \"undefined\";\n\n // Updating openness for controlled\n const initialRender = useRef(true);\n useEffect(() => {\n if (!isControlled) return;\n if (initialRender.current === true) {\n if (open && menuRef.current) {\n openMenu();\n }\n initialRender.current = false;\n return;\n }\n if (open) {\n openMenu();\n } else {\n closeMenu();\n }\n // open ? openMenu() : closeMenu();\n }, [closeMenu, isControlled, open, openMenu, dialogContext]);\n\n // Effect to attach eventListener for reading click state from\n // globalThis.MouseEvent for composedPath to detect if target is\n // part of the composedPath, then to attempt to close\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n let isClosable = false;\n const onMouseDownHandler = (e: globalThis.MouseEvent) => {\n if (!invokerRef.current || !menuRef.current) return;\n const isInvoker = e.composedPath().includes(invokerRef.current);\n const isPopover = e.composedPath().includes(menuRef.current);\n if (!isInvoker && !isPopover && openState) {\n onOutsidePress?.(e);\n isClosable = true;\n }\n };\n const onMouseUpHandler = (e: globalThis.MouseEvent) => {\n if (!invokerRef.current || !menuRef.current) return;\n const isInvoker = e.composedPath().includes(invokerRef.current);\n const isPopover = e.composedPath().includes(menuRef.current);\n if (!isInvoker && !isPopover && openState) {\n if (isControlled || !isClosable || !openState) return;\n\n closeMenu();\n }\n };\n\n document.addEventListener(\"mousedown\", onMouseDownHandler);\n document.addEventListener(\"mouseup\", onMouseUpHandler);\n return () => {\n document.removeEventListener(\"mousedown\", onMouseDownHandler);\n document.removeEventListener(\"mouseup\", onMouseUpHandler);\n };\n }, [isControlled, openState, onOutsidePress, closeMenu]);\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDivElement>) => {\n if (!openState || !childrenRef.current || menuContext) return;\n if (e.code === \"Escape\") {\n e.stopPropagation();\n e.preventDefault();\n closeMenu();\n }\n\n const currentActiveIndex = focusItems?.findIndex(\n (item) => item.id === getActiveElement(document)?.id,\n );\n\n const firstItem = focusItems?.[0] as HTMLElement;\n const lastItem = focusItems?.[focusItems.length - 1] as HTMLElement;\n\n if (e.code === \"ArrowDown\") {\n e.stopPropagation();\n e.preventDefault();\n if (currentActiveIndex === (focusItems?.length ?? 0) - 1) {\n firstItem.focus();\n return;\n }\n const nextItem = focusItems?.[\n (currentActiveIndex ?? 0) + 1\n ] as HTMLElement;\n nextItem.focus();\n return;\n }\n if (e.code === \"ArrowUp\") {\n e.stopPropagation();\n e.preventDefault();\n if (currentActiveIndex === 0) {\n lastItem.focus();\n return;\n }\n const prevItem = focusItems?.[\n (currentActiveIndex ?? 0) - 1\n ] as HTMLElement;\n prevItem.focus();\n return;\n }\n };\n\n const value = useMemo(() => {\n return {\n disableAutoHeight,\n closeRootMenu: menuContext?.closeRootMenu ?? closeMenu,\n };\n }, [disableAutoHeight, menuContext, closeMenu]);\n\n const MenuButtonOnKeyDownHandler = (\n e: KeyboardEvent<HTMLButtonElement>,\n ) => {\n if (e.code === \"ArrowDown\") {\n focusItems?.[0].focus();\n e.stopPropagation();\n e.preventDefault();\n }\n };\n const MenuButtonOnClick = () => {\n if (isControlled) return;\n if (openState) {\n closeMenu();\n return;\n }\n openMenu();\n };\n\n const data = {\n label: childrenToString(props.label),\n };\n\n const trackingId = useTrackingId({\n name: \"Menu\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n if (!supportsPopover())\n return (\n <MenuLegacyComponent\n data-tracking-id={trackingId}\n {...(props as MenuLegacyProps)}\n ref={ref}\n />\n );\n\n if (menuContext) {\n return (\n <MenuContext.Provider value={value}>\n <MenuNested\n data-tracking-id={trackingId}\n open={open}\n defaultOpen={defaultOpen}\n className={props.className}\n icon={props.icon}\n label={label}\n >\n {children}\n </MenuNested>\n </MenuContext.Provider>\n );\n }\n return (\n <MenuContext.Provider value={value}>\n {trigger ? (\n trigger({\n ref: invokerRef,\n onClick: () => MenuButtonOnClick(),\n \"aria-haspopup\": true,\n \"aria-controls\": `menu-${uid.replace(/:/g, \"\")}`,\n \"aria-expanded\": openState,\n \"data-state\": openState ? \"open\" : \"close\",\n })\n ) : (\n <Button\n ref={invokerRef}\n onClick={MenuButtonOnClick}\n onKeyDown={MenuButtonOnKeyDownHandler}\n aria-haspopup={true}\n aria-controls={`menu-${uid.replace(/:/g, \"\")}`}\n data-state={openState ? \"open\" : \"close\"}\n aria-expanded={openState}\n {...rest}\n >\n {label}\n </Button>\n )}\n <div\n popover=\"manual\"\n id={`menu-${uid.replace(/:/g, \"\")}`}\n data-anv=\"menu-content\"\n className={cx(styles.content, contentClassName)}\n onKeyDown={onKeyDownHandler}\n ref={menuRef}\n role=\"presentation\"\n >\n {arrowStart && (\n <div className={styles[\"arrow-up\"]} aria-hidden>\n <Icon svg={Up} size=\"xlarge\" className={styles[\"arrow-icon\"]} />\n </div>\n )}\n <div\n className={styles.scroller}\n tabIndex={-1}\n ref={childrenRef}\n style={{\n position: \"relative\",\n maxHeight: maxHeight\n ? `${Math.min(menuHeight ?? Infinity, typeof maxHeight === \"number\" ? maxHeight : parseInt(maxHeight.toString()))}px`\n : (menuHeight ?? \"inherit\"),\n }}\n onScroll={(e: MouseEvent<HTMLDivElement>) =>\n setScrollTop(e.currentTarget.scrollTop)\n }\n role=\"menu\"\n id={`scroller-${uid.replace(/:/g, \"\")}`}\n >\n {children}\n </div>\n {arrowEnd && (\n <div className={styles[\"arrow-down\"]} aria-hidden>\n <Icon svg={Down} size=\"xlarge\" className={styles[\"arrow-icon\"]} />\n </div>\n )}\n </div>\n </MenuContext.Provider>\n );\n },\n);\n\nMenuElement.displayName = \"Menu\";\n\n/**\n * Menu component for displaying dropdown menus with navigation and actions.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Automatic positioning with fallback strategies\n * - Keyboard navigation with arrow keys and escape\n * - Custom trigger elements\n * - Nested menu support\n * - Automatic height adjustment\n * - Scroll indicators for overflow content\n * - Fully accessible with proper ARIA attributes\n * - Popover API support with legacy fallback\n * - Outside click detection and handling\n *\n * @example\n * <Menu label=\"Edit\">\n * <Menu.Item label=\"Cut\" onClick={() => console.log('Cut clicked')} />\n * <Menu.Item label=\"Copy\" onClick={() => console.log('Copy clicked')} />\n * <Menu label=\"Copy as\">\n * <Menu.Item label=\"Text\" onClick={() => console.log('Copy as Text')} />\n * <Menu.Item label=\"Video\" onClick={() => console.log('Copy as Video')} />\n * <Menu label=\"Image\">\n * <Menu.Item label=\".png\" onClick={() => console.log('Copy as PNG')} />\n * <Menu.Item label=\".jpg\" onClick={() => console.log('Copy as JPG')} />\n * </Menu>\n * </Menu>\n */\nexport const Menu = Object.assign(MenuElement, {\n /**\n * MenuItem component for individual menu options.\n *\n * Features:\n * - Supports icons and labels\n * - Keyboard navigation support\n * - Disabled state handling\n * - Automatic menu closing on selection\n * - Fully accessible with proper ARIA attributes\n * - Focus management and tab index handling\n * - Click and mouse enter event handling\n *\n * @example\n * <Menu.Item\n * label=\"Edit Profile\"\n * icon={EditIcon}\n * onClick={() => console.log('Edit profile clicked')}\n * />\n */\n Item: MenuItem,\n});\n"],"names":["styles","Next","Up","Down","MenuLegacyComponent"],"mappings":"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"}