serverHandoffComplete ? genId() : undefined);\n index(() => {\n if (id == null) {\n setId(genId());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n serverHandoffComplete = true;\n }, []);\n return id;\n}\nconst useReactId = SafeReact.useId;\n\n/**\n * Uses React 18's built-in `useId()` when available, or falls back to a\n * slightly less performant (requiring a double render) implementation for\n * earlier React versions.\n * @see https://floating-ui.com/docs/react-utils#useid\n */\nconst useId = useReactId || useFloatingId;\n\nlet devMessageSet;\nif (process.env.NODE_ENV !== \"production\") {\n devMessageSet = /*#__PURE__*/new Set();\n}\nfunction warn() {\n var _devMessageSet;\n for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n const message = \"Floating UI: \" + messages.join(' ');\n if (!((_devMessageSet = devMessageSet) != null && _devMessageSet.has(message))) {\n var _devMessageSet2;\n (_devMessageSet2 = devMessageSet) == null || _devMessageSet2.add(message);\n console.warn(message);\n }\n}\nfunction error() {\n var _devMessageSet3;\n for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n messages[_key2] = arguments[_key2];\n }\n const message = \"Floating UI: \" + messages.join(' ');\n if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {\n var _devMessageSet4;\n (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);\n console.error(message);\n }\n}\n\n/**\n * Renders a pointing arrow triangle.\n * @see https://floating-ui.com/docs/FloatingArrow\n */\nconst FloatingArrow = /*#__PURE__*/React.forwardRef(function FloatingArrow(props, ref) {\n const {\n context: {\n placement,\n elements: {\n floating\n },\n middlewareData: {\n arrow,\n shift\n }\n },\n width = 14,\n height = 7,\n tipRadius = 0,\n strokeWidth = 0,\n staticOffset,\n stroke,\n d,\n style: {\n transform,\n ...restStyle\n } = {},\n ...rest\n } = props;\n if (process.env.NODE_ENV !== \"production\") {\n if (!ref) {\n warn('The `ref` prop is required for `FloatingArrow`.');\n }\n }\n const clipPathId = useId();\n const [isRTL, setIsRTL] = React.useState(false);\n\n // https://github.com/floating-ui/floating-ui/issues/2932\n index(() => {\n if (!floating) return;\n const isRTL = getComputedStyle(floating).direction === 'rtl';\n if (isRTL) {\n setIsRTL(true);\n }\n }, [floating]);\n if (!floating) {\n return null;\n }\n const [side, alignment] = placement.split('-');\n const isVerticalSide = side === 'top' || side === 'bottom';\n let computedStaticOffset = staticOffset;\n if (isVerticalSide && shift != null && shift.x || !isVerticalSide && shift != null && shift.y) {\n computedStaticOffset = null;\n }\n\n // Strokes must be double the border width, this ensures the stroke's width\n // works as you'd expect.\n const computedStrokeWidth = strokeWidth * 2;\n const halfStrokeWidth = computedStrokeWidth / 2;\n const svgX = width / 2 * (tipRadius / -8 + 1);\n const svgY = height / 2 * tipRadius / 4;\n const isCustomShape = !!d;\n const yOffsetProp = computedStaticOffset && alignment === 'end' ? 'bottom' : 'top';\n let xOffsetProp = computedStaticOffset && alignment === 'end' ? 'right' : 'left';\n if (computedStaticOffset && isRTL) {\n xOffsetProp = alignment === 'end' ? 'left' : 'right';\n }\n const arrowX = (arrow == null ? void 0 : arrow.x) != null ? computedStaticOffset || arrow.x : '';\n const arrowY = (arrow == null ? void 0 : arrow.y) != null ? computedStaticOffset || arrow.y : '';\n const dValue = d || 'M0,0' + (\" H\" + width) + (\" L\" + (width - svgX) + \",\" + (height - svgY)) + (\" Q\" + width / 2 + \",\" + height + \" \" + svgX + \",\" + (height - svgY)) + ' Z';\n const rotation = {\n top: isCustomShape ? 'rotate(180deg)' : '',\n left: isCustomShape ? 'rotate(90deg)' : 'rotate(-90deg)',\n bottom: isCustomShape ? '' : 'rotate(180deg)',\n right: isCustomShape ? 'rotate(-90deg)' : 'rotate(90deg)'\n }[side];\n return /*#__PURE__*/React.createElement(\"svg\", _extends({}, rest, {\n \"aria-hidden\": true,\n ref: ref,\n width: isCustomShape ? width : width + computedStrokeWidth,\n height: width,\n viewBox: \"0 0 \" + width + \" \" + (height > width ? height : width),\n style: {\n position: 'absolute',\n pointerEvents: 'none',\n [xOffsetProp]: arrowX,\n [yOffsetProp]: arrowY,\n [side]: isVerticalSide || isCustomShape ? '100%' : \"calc(100% - \" + computedStrokeWidth / 2 + \"px)\",\n transform: [rotation, transform].filter(t => !!t).join(' '),\n ...restStyle\n }\n }), computedStrokeWidth > 0 && /*#__PURE__*/React.createElement(\"path\", {\n clipPath: \"url(#\" + clipPathId + \")\",\n fill: \"none\",\n stroke: stroke\n // Account for the stroke on the fill path rendered below.\n ,\n strokeWidth: computedStrokeWidth + (d ? 0 : 1),\n d: dValue\n }), /*#__PURE__*/React.createElement(\"path\", {\n stroke: computedStrokeWidth && !d ? rest.fill : 'none',\n d: dValue\n }), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: clipPathId\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: -halfStrokeWidth,\n y: halfStrokeWidth * (isCustomShape ? -1 : 1),\n width: width + computedStrokeWidth,\n height: width\n })));\n});\n\nfunction createPubSub() {\n const map = new Map();\n return {\n emit(event, data) {\n var _map$get;\n (_map$get = map.get(event)) == null || _map$get.forEach(handler => handler(data));\n },\n on(event, listener) {\n map.set(event, [...(map.get(event) || []), listener]);\n },\n off(event, listener) {\n var _map$get2;\n map.set(event, ((_map$get2 = map.get(event)) == null ? void 0 : _map$get2.filter(l => l !== listener)) || []);\n }\n };\n}\n\nconst FloatingNodeContext = /*#__PURE__*/React.createContext(null);\nconst FloatingTreeContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */\nconst useFloatingParentNodeId = () => {\n var _React$useContext;\n return ((_React$useContext = React.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;\n};\n\n/**\n * Returns the nearest floating tree context, if available.\n */\nconst useFloatingTree = () => React.useContext(FloatingTreeContext);\n\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction useFloatingNodeId(customParentId) {\n const id = useId();\n const tree = useFloatingTree();\n const reactParentId = useFloatingParentNodeId();\n const parentId = customParentId || reactParentId;\n index(() => {\n const node = {\n id,\n parentId\n };\n tree == null || tree.addNode(node);\n return () => {\n tree == null || tree.removeNode(node);\n };\n }, [tree, id, parentId]);\n return id;\n}\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingNode(props) {\n const {\n children,\n id\n } = props;\n const parentId = useFloatingParentNodeId();\n return /*#__PURE__*/React.createElement(FloatingNodeContext.Provider, {\n value: React.useMemo(() => ({\n id,\n parentId\n }), [id, parentId])\n }, children);\n}\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingTree(props) {\n const {\n children\n } = props;\n const nodesRef = React.useRef([]);\n const addNode = React.useCallback(node => {\n nodesRef.current = [...nodesRef.current, node];\n }, []);\n const removeNode = React.useCallback(node => {\n nodesRef.current = nodesRef.current.filter(n => n !== node);\n }, []);\n const events = React.useState(() => createPubSub())[0];\n return /*#__PURE__*/React.createElement(FloatingTreeContext.Provider, {\n value: React.useMemo(() => ({\n nodesRef,\n addNode,\n removeNode,\n events\n }), [addNode, removeNode, events])\n }, children);\n}\n\nfunction createAttribute(name) {\n return \"data-floating-ui-\" + name;\n}\n\nfunction useLatestRef(value) {\n const ref = useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\nconst safePolygonIdentifier = /*#__PURE__*/createAttribute('safe-polygon');\nfunction getDelay(value, prop, pointerType) {\n if (pointerType && !isMouseLikePointerType(pointerType)) {\n return 0;\n }\n if (typeof value === 'number') {\n return value;\n }\n return value == null ? void 0 : value[prop];\n}\n/**\n * Opens the floating element while hovering over the reference element, like\n * CSS `:hover`.\n * @see https://floating-ui.com/docs/useHover\n */\nfunction useHover(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n dataRef,\n events,\n elements\n } = context;\n const {\n enabled = true,\n delay = 0,\n handleClose = null,\n mouseOnly = false,\n restMs = 0,\n move = true\n } = props;\n const tree = useFloatingTree();\n const parentId = useFloatingParentNodeId();\n const handleCloseRef = useLatestRef(handleClose);\n const delayRef = useLatestRef(delay);\n const openRef = useLatestRef(open);\n const pointerTypeRef = React.useRef();\n const timeoutRef = React.useRef(-1);\n const handlerRef = React.useRef();\n const restTimeoutRef = React.useRef(-1);\n const blockMouseMoveRef = React.useRef(true);\n const performedPointerEventsMutationRef = React.useRef(false);\n const unbindMouseMoveRef = React.useRef(() => {});\n const restTimeoutPendingRef = React.useRef(false);\n const isHoverOpen = React.useCallback(() => {\n var _dataRef$current$open;\n const type = (_dataRef$current$open = dataRef.current.openEvent) == null ? void 0 : _dataRef$current$open.type;\n return (type == null ? void 0 : type.includes('mouse')) && type !== 'mousedown';\n }, [dataRef]);\n\n // When closing before opening, clear the delay timeouts to cancel it\n // from showing.\n React.useEffect(() => {\n if (!enabled) return;\n function onOpenChange(_ref) {\n let {\n open\n } = _ref;\n if (!open) {\n clearTimeout(timeoutRef.current);\n clearTimeout(restTimeoutRef.current);\n blockMouseMoveRef.current = true;\n restTimeoutPendingRef.current = false;\n }\n }\n events.on('openchange', onOpenChange);\n return () => {\n events.off('openchange', onOpenChange);\n };\n }, [enabled, events]);\n React.useEffect(() => {\n if (!enabled) return;\n if (!handleCloseRef.current) return;\n if (!open) return;\n function onLeave(event) {\n if (isHoverOpen()) {\n onOpenChange(false, event, 'hover');\n }\n }\n const html = getDocument(elements.floating).documentElement;\n html.addEventListener('mouseleave', onLeave);\n return () => {\n html.removeEventListener('mouseleave', onLeave);\n };\n }, [elements.floating, open, onOpenChange, enabled, handleCloseRef, isHoverOpen]);\n const closeWithDelay = React.useCallback(function (event, runElseBranch, reason) {\n if (runElseBranch === void 0) {\n runElseBranch = true;\n }\n if (reason === void 0) {\n reason = 'hover';\n }\n const closeDelay = getDelay(delayRef.current, 'close', pointerTypeRef.current);\n if (closeDelay && !handlerRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(() => onOpenChange(false, event, reason), closeDelay);\n } else if (runElseBranch) {\n clearTimeout(timeoutRef.current);\n onOpenChange(false, event, reason);\n }\n }, [delayRef, onOpenChange]);\n const cleanupMouseMoveHandler = useEffectEvent(() => {\n unbindMouseMoveRef.current();\n handlerRef.current = undefined;\n });\n const clearPointerEvents = useEffectEvent(() => {\n if (performedPointerEventsMutationRef.current) {\n const body = getDocument(elements.floating).body;\n body.style.pointerEvents = '';\n body.removeAttribute(safePolygonIdentifier);\n performedPointerEventsMutationRef.current = false;\n }\n });\n const isClickLikeOpenEvent = useEffectEvent(() => {\n return dataRef.current.openEvent ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type) : false;\n });\n\n // Registering the mouse events on the reference directly to bypass React's\n // delegation system. If the cursor was on a disabled element and then entered\n // the reference (no gap), `mouseenter` doesn't fire in the delegation system.\n React.useEffect(() => {\n if (!enabled) return;\n function onMouseEnter(event) {\n clearTimeout(timeoutRef.current);\n blockMouseMoveRef.current = false;\n if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current) || restMs > 0 && !getDelay(delayRef.current, 'open')) {\n return;\n }\n const openDelay = getDelay(delayRef.current, 'open', pointerTypeRef.current);\n if (openDelay) {\n timeoutRef.current = window.setTimeout(() => {\n if (!openRef.current) {\n onOpenChange(true, event, 'hover');\n }\n }, openDelay);\n } else if (!open) {\n onOpenChange(true, event, 'hover');\n }\n }\n function onMouseLeave(event) {\n if (isClickLikeOpenEvent()) return;\n unbindMouseMoveRef.current();\n const doc = getDocument(elements.floating);\n clearTimeout(restTimeoutRef.current);\n restTimeoutPendingRef.current = false;\n if (handleCloseRef.current && dataRef.current.floatingContext) {\n // Prevent clearing `onScrollMouseLeave` timeout.\n if (!open) {\n clearTimeout(timeoutRef.current);\n }\n handlerRef.current = handleCloseRef.current({\n ...dataRef.current.floatingContext,\n tree,\n x: event.clientX,\n y: event.clientY,\n onClose() {\n clearPointerEvents();\n cleanupMouseMoveHandler();\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event, true, 'safe-polygon');\n }\n }\n });\n const handler = handlerRef.current;\n doc.addEventListener('mousemove', handler);\n unbindMouseMoveRef.current = () => {\n doc.removeEventListener('mousemove', handler);\n };\n return;\n }\n\n // Allow interactivity without `safePolygon` on touch devices. With a\n // pointer, a short close delay is an alternative, so it should work\n // consistently.\n const shouldClose = pointerTypeRef.current === 'touch' ? !contains(elements.floating, event.relatedTarget) : true;\n if (shouldClose) {\n closeWithDelay(event);\n }\n }\n\n // Ensure the floating element closes after scrolling even if the pointer\n // did not move.\n // https://github.com/floating-ui/floating-ui/discussions/1692\n function onScrollMouseLeave(event) {\n if (isClickLikeOpenEvent()) return;\n if (!dataRef.current.floatingContext) return;\n handleCloseRef.current == null || handleCloseRef.current({\n ...dataRef.current.floatingContext,\n tree,\n x: event.clientX,\n y: event.clientY,\n onClose() {\n clearPointerEvents();\n cleanupMouseMoveHandler();\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event);\n }\n }\n })(event);\n }\n if (isElement(elements.domReference)) {\n var _elements$floating;\n const ref = elements.domReference;\n open && ref.addEventListener('mouseleave', onScrollMouseLeave);\n (_elements$floating = elements.floating) == null || _elements$floating.addEventListener('mouseleave', onScrollMouseLeave);\n move && ref.addEventListener('mousemove', onMouseEnter, {\n once: true\n });\n ref.addEventListener('mouseenter', onMouseEnter);\n ref.addEventListener('mouseleave', onMouseLeave);\n return () => {\n var _elements$floating2;\n open && ref.removeEventListener('mouseleave', onScrollMouseLeave);\n (_elements$floating2 = elements.floating) == null || _elements$floating2.removeEventListener('mouseleave', onScrollMouseLeave);\n move && ref.removeEventListener('mousemove', onMouseEnter);\n ref.removeEventListener('mouseenter', onMouseEnter);\n ref.removeEventListener('mouseleave', onMouseLeave);\n };\n }\n }, [elements, enabled, context, mouseOnly, restMs, move, closeWithDelay, cleanupMouseMoveHandler, clearPointerEvents, onOpenChange, open, openRef, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent]);\n\n // Block pointer-events of every element other than the reference and floating\n // while the floating element is open and has a `handleClose` handler. Also\n // handles nested floating elements.\n // https://github.com/floating-ui/floating-ui/issues/1722\n index(() => {\n var _handleCloseRef$curre;\n if (!enabled) return;\n if (open && (_handleCloseRef$curre = handleCloseRef.current) != null && _handleCloseRef$curre.__options.blockPointerEvents && isHoverOpen()) {\n performedPointerEventsMutationRef.current = true;\n const floatingEl = elements.floating;\n if (isElement(elements.domReference) && floatingEl) {\n var _tree$nodesRef$curren;\n const body = getDocument(elements.floating).body;\n body.setAttribute(safePolygonIdentifier, '');\n const ref = elements.domReference;\n const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating;\n if (parentFloating) {\n parentFloating.style.pointerEvents = '';\n }\n body.style.pointerEvents = 'none';\n ref.style.pointerEvents = 'auto';\n floatingEl.style.pointerEvents = 'auto';\n return () => {\n body.style.pointerEvents = '';\n ref.style.pointerEvents = '';\n floatingEl.style.pointerEvents = '';\n };\n }\n }\n }, [enabled, open, parentId, elements, tree, handleCloseRef, isHoverOpen]);\n index(() => {\n if (!open) {\n pointerTypeRef.current = undefined;\n restTimeoutPendingRef.current = false;\n cleanupMouseMoveHandler();\n clearPointerEvents();\n }\n }, [open, cleanupMouseMoveHandler, clearPointerEvents]);\n React.useEffect(() => {\n return () => {\n cleanupMouseMoveHandler();\n clearTimeout(timeoutRef.current);\n clearTimeout(restTimeoutRef.current);\n clearPointerEvents();\n };\n }, [enabled, elements.domReference, cleanupMouseMoveHandler, clearPointerEvents]);\n const reference = React.useMemo(() => {\n function setPointerRef(event) {\n pointerTypeRef.current = event.pointerType;\n }\n return {\n onPointerDown: setPointerRef,\n onPointerEnter: setPointerRef,\n onMouseMove(event) {\n const {\n nativeEvent\n } = event;\n function handleMouseMove() {\n if (!blockMouseMoveRef.current && !openRef.current) {\n onOpenChange(true, nativeEvent, 'hover');\n }\n }\n if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current)) {\n return;\n }\n if (open || restMs === 0) {\n return;\n }\n\n // Ignore insignificant movements to account for tremors.\n if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) {\n return;\n }\n clearTimeout(restTimeoutRef.current);\n if (pointerTypeRef.current === 'touch') {\n handleMouseMove();\n } else {\n restTimeoutPendingRef.current = true;\n restTimeoutRef.current = window.setTimeout(handleMouseMove, restMs);\n }\n }\n };\n }, [mouseOnly, onOpenChange, open, openRef, restMs]);\n const floating = React.useMemo(() => ({\n onMouseEnter() {\n clearTimeout(timeoutRef.current);\n },\n onMouseLeave(event) {\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event.nativeEvent, false);\n }\n }\n }), [closeWithDelay, isClickLikeOpenEvent]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nconst NOOP = () => {};\nconst FloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n delay: 0,\n initialDelay: 0,\n timeoutMs: 0,\n currentId: null,\n setCurrentId: NOOP,\n setState: NOOP,\n isInstantPhase: false\n});\n\n/**\n * @deprecated\n * Use the return value of `useDelayGroup()` instead.\n */\nconst useDelayGroupContext = () => React.useContext(FloatingDelayGroupContext);\n/**\n * Provides context for a group of floating elements that should share a\n * `delay`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction FloatingDelayGroup(props) {\n const {\n children,\n delay,\n timeoutMs = 0\n } = props;\n const [state, setState] = React.useReducer((prev, next) => ({\n ...prev,\n ...next\n }), {\n delay,\n timeoutMs,\n initialDelay: delay,\n currentId: null,\n isInstantPhase: false\n });\n const initialCurrentIdRef = React.useRef(null);\n const setCurrentId = React.useCallback(currentId => {\n setState({\n currentId\n });\n }, []);\n index(() => {\n if (state.currentId) {\n if (initialCurrentIdRef.current === null) {\n initialCurrentIdRef.current = state.currentId;\n } else if (!state.isInstantPhase) {\n setState({\n isInstantPhase: true\n });\n }\n } else {\n if (state.isInstantPhase) {\n setState({\n isInstantPhase: false\n });\n }\n initialCurrentIdRef.current = null;\n }\n }, [state.currentId, state.isInstantPhase]);\n return /*#__PURE__*/React.createElement(FloatingDelayGroupContext.Provider, {\n value: React.useMemo(() => ({\n ...state,\n setState,\n setCurrentId\n }), [state, setCurrentId])\n }, children);\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `FloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useDelayGroup(context, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n open,\n onOpenChange,\n floatingId\n } = context;\n const {\n id: optionId,\n enabled = true\n } = options;\n const id = optionId != null ? optionId : floatingId;\n const groupContext = useDelayGroupContext();\n const {\n currentId,\n setCurrentId,\n initialDelay,\n setState,\n timeoutMs\n } = groupContext;\n index(() => {\n if (!enabled) return;\n if (!currentId) return;\n setState({\n delay: {\n open: 1,\n close: getDelay(initialDelay, 'close')\n }\n });\n if (currentId !== id) {\n onOpenChange(false);\n }\n }, [enabled, id, onOpenChange, setState, currentId, initialDelay]);\n index(() => {\n function unset() {\n onOpenChange(false);\n setState({\n delay: initialDelay,\n currentId: null\n });\n }\n if (!enabled) return;\n if (!currentId) return;\n if (!open && currentId === id) {\n if (timeoutMs) {\n const timeout = window.setTimeout(unset, timeoutMs);\n return () => {\n clearTimeout(timeout);\n };\n }\n unset();\n }\n }, [enabled, open, setState, currentId, id, onOpenChange, initialDelay, timeoutMs]);\n index(() => {\n if (!enabled) return;\n if (setCurrentId === NOOP || !open) return;\n setCurrentId(id);\n }, [enabled, open, setCurrentId, id]);\n return groupContext;\n}\n\nlet rafId = 0;\nfunction enqueueFocus(el, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n preventScroll = false,\n cancelPrevious = true,\n sync = false\n } = options;\n cancelPrevious && cancelAnimationFrame(rafId);\n const exec = () => el == null ? void 0 : el.focus({\n preventScroll\n });\n if (sync) {\n exec();\n } else {\n rafId = requestAnimationFrame(exec);\n }\n}\n\nfunction getAncestors(nodes, id) {\n var _nodes$find;\n let allAncestors = [];\n let currentParentId = (_nodes$find = nodes.find(node => node.id === id)) == null ? void 0 : _nodes$find.parentId;\n while (currentParentId) {\n const currentNode = nodes.find(node => node.id === currentParentId);\n currentParentId = currentNode == null ? void 0 : currentNode.parentId;\n if (currentNode) {\n allAncestors = allAncestors.concat(currentNode);\n }\n }\n return allAncestors;\n}\n\nfunction getChildren(nodes, id) {\n let allChildren = nodes.filter(node => {\n var _node$context;\n return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n });\n let currentChildren = allChildren;\n while (currentChildren.length) {\n currentChildren = nodes.filter(node => {\n var _currentChildren;\n return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n var _node$context2;\n return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n });\n });\n allChildren = allChildren.concat(currentChildren);\n }\n return allChildren;\n}\nfunction getDeepestNode(nodes, id) {\n let deepestNodeId;\n let maxDepth = -1;\n function findDeepest(nodeId, depth) {\n if (depth > maxDepth) {\n deepestNodeId = nodeId;\n maxDepth = depth;\n }\n const children = getChildren(nodes, nodeId);\n children.forEach(child => {\n findDeepest(child.id, depth + 1);\n });\n }\n findDeepest(id, 0);\n return nodes.find(node => node.id === deepestNodeId);\n}\n\n// Modified to add conditional `aria-hidden` support:\n// https://github.com/theKashey/aria-hidden/blob/9220c8f4a4fd35f63bee5510a9f41a37264382d4/src/index.ts\nlet counterMap = /*#__PURE__*/new WeakMap();\nlet uncontrolledElementsSet = /*#__PURE__*/new WeakSet();\nlet markerMap = {};\nlet lockCount$1 = 0;\nconst supportsInert = () => typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nconst unwrapHost = node => node && (node.host || unwrapHost(node.parentNode));\nconst correctElements = (parent, targets) => targets.map(target => {\n if (parent.contains(target)) {\n return target;\n }\n const correctedTarget = unwrapHost(target);\n if (parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n return null;\n}).filter(x => x != null);\nfunction applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert) {\n const markerName = 'data-floating-ui-inert';\n const controlAttribute = inert ? 'inert' : ariaHidden ? 'aria-hidden' : null;\n const avoidElements = correctElements(body, uncorrectedAvoidElements);\n const elementsToKeep = new Set();\n const elementsToStop = new Set(avoidElements);\n const hiddenElements = [];\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n const markerCounter = markerMap[markerName];\n avoidElements.forEach(keep);\n deep(body);\n elementsToKeep.clear();\n function keep(el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n el.parentNode && keep(el.parentNode);\n }\n function deep(parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n [].forEach.call(parent.children, node => {\n if (getNodeName(node) === 'script') return;\n if (elementsToKeep.has(node)) {\n deep(node);\n } else {\n const attr = controlAttribute ? node.getAttribute(controlAttribute) : null;\n const alreadyHidden = attr !== null && attr !== 'false';\n const counterValue = (counterMap.get(node) || 0) + 1;\n const markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenElements.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledElementsSet.add(node);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, '');\n }\n if (!alreadyHidden && controlAttribute) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n });\n }\n lockCount$1++;\n return () => {\n hiddenElements.forEach(element => {\n const counterValue = (counterMap.get(element) || 0) - 1;\n const markerValue = (markerCounter.get(element) || 0) - 1;\n counterMap.set(element, counterValue);\n markerCounter.set(element, markerValue);\n if (!counterValue) {\n if (!uncontrolledElementsSet.has(element) && controlAttribute) {\n element.removeAttribute(controlAttribute);\n }\n uncontrolledElementsSet.delete(element);\n }\n if (!markerValue) {\n element.removeAttribute(markerName);\n }\n });\n lockCount$1--;\n if (!lockCount$1) {\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledElementsSet = new WeakSet();\n markerMap = {};\n }\n };\n}\nfunction markOthers(avoidElements, ariaHidden, inert) {\n if (ariaHidden === void 0) {\n ariaHidden = false;\n }\n if (inert === void 0) {\n inert = false;\n }\n const body = getDocument(avoidElements[0]).body;\n return applyAttributeToOthers(avoidElements.concat(Array.from(body.querySelectorAll('[aria-live]'))), body, ariaHidden, inert);\n}\n\nconst getTabbableOptions = () => ({\n getShadowRoot: true,\n displayCheck:\n // JSDOM does not support the `tabbable` library. To solve this we can\n // check if `ResizeObserver` is a real function (not polyfilled), which\n // determines if the current environment is JSDOM-like.\n typeof ResizeObserver === 'function' && ResizeObserver.toString().includes('[native code]') ? 'full' : 'none'\n});\nfunction getTabbableIn(container, direction) {\n const allTabbable = tabbable(container, getTabbableOptions());\n if (direction === 'prev') {\n allTabbable.reverse();\n }\n const activeIndex = allTabbable.indexOf(activeElement(getDocument(container)));\n const nextTabbableElements = allTabbable.slice(activeIndex + 1);\n return nextTabbableElements[0];\n}\nfunction getNextTabbable() {\n return getTabbableIn(document.body, 'next');\n}\nfunction getPreviousTabbable() {\n return getTabbableIn(document.body, 'prev');\n}\nfunction isOutsideEvent(event, container) {\n const containerElement = container || event.currentTarget;\n const relatedTarget = event.relatedTarget;\n return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nfunction disableFocusInside(container) {\n const tabbableElements = tabbable(container, getTabbableOptions());\n tabbableElements.forEach(element => {\n element.dataset.tabindex = element.getAttribute('tabindex') || '';\n element.setAttribute('tabindex', '-1');\n });\n}\nfunction enableFocusInside(container) {\n const elements = container.querySelectorAll('[data-tabindex]');\n elements.forEach(element => {\n const tabindex = element.dataset.tabindex;\n delete element.dataset.tabindex;\n if (tabindex) {\n element.setAttribute('tabindex', tabindex);\n } else {\n element.removeAttribute('tabindex');\n }\n });\n}\n\n// See Diego Haz's Sandbox for making this logic work well on Safari/iOS:\n// https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/FocusTrap.tsx\n\nconst HIDDEN_STYLES = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'fixed',\n whiteSpace: 'nowrap',\n width: '1px',\n top: 0,\n left: 0\n};\nlet timeoutId;\nfunction setActiveElementOnTab(event) {\n if (event.key === 'Tab') {\n event.target;\n clearTimeout(timeoutId);\n }\n}\nconst FocusGuard = /*#__PURE__*/React.forwardRef(function FocusGuard(props, ref) {\n const [role, setRole] = React.useState();\n index(() => {\n if (isSafari()) {\n // Unlike other screen readers such as NVDA and JAWS, the virtual cursor\n // on VoiceOver does trigger the onFocus event, so we can use the focus\n // trap element. On Safari, only buttons trigger the onFocus event.\n // NB: \"group\" role in the Sandbox no longer appears to work, must be a\n // button role.\n setRole('button');\n }\n document.addEventListener('keydown', setActiveElementOnTab);\n return () => {\n document.removeEventListener('keydown', setActiveElementOnTab);\n };\n }, []);\n const restProps = {\n ref,\n tabIndex: 0,\n // Role is only for VoiceOver\n role,\n 'aria-hidden': role ? undefined : true,\n [createAttribute('focus-guard')]: '',\n style: HIDDEN_STYLES\n };\n return /*#__PURE__*/React.createElement(\"span\", _extends({}, props, restProps));\n});\n\nconst PortalContext = /*#__PURE__*/React.createContext(null);\nconst attr = /*#__PURE__*/createAttribute('portal');\n/**\n * @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode\n */\nfunction useFloatingPortalNode(props) {\n if (props === void 0) {\n props = {};\n }\n const {\n id,\n root\n } = props;\n const uniqueId = useId();\n const portalContext = usePortalContext();\n const [portalNode, setPortalNode] = React.useState(null);\n const portalNodeRef = React.useRef(null);\n index(() => {\n return () => {\n portalNode == null || portalNode.remove();\n // Allow the subsequent layout effects to create a new node on updates.\n // The portal node will still be cleaned up on unmount.\n // https://github.com/floating-ui/floating-ui/issues/2454\n queueMicrotask(() => {\n portalNodeRef.current = null;\n });\n };\n }, [portalNode]);\n index(() => {\n // Wait for the uniqueId to be generated before creating the portal node in\n // React <18 (using `useFloatingId` instead of the native `useId`).\n // https://github.com/floating-ui/floating-ui/issues/2778\n if (!uniqueId) return;\n if (portalNodeRef.current) return;\n const existingIdRoot = id ? document.getElementById(id) : null;\n if (!existingIdRoot) return;\n const subRoot = document.createElement('div');\n subRoot.id = uniqueId;\n subRoot.setAttribute(attr, '');\n existingIdRoot.appendChild(subRoot);\n portalNodeRef.current = subRoot;\n setPortalNode(subRoot);\n }, [id, uniqueId]);\n index(() => {\n // Wait for the root to exist before creating the portal node. The root must\n // be stored in state, not a ref, for this to work reactively.\n if (root === null) return;\n if (!uniqueId) return;\n if (portalNodeRef.current) return;\n let container = root || (portalContext == null ? void 0 : portalContext.portalNode);\n if (container && !isElement(container)) container = container.current;\n container = container || document.body;\n let idWrapper = null;\n if (id) {\n idWrapper = document.createElement('div');\n idWrapper.id = id;\n container.appendChild(idWrapper);\n }\n const subRoot = document.createElement('div');\n subRoot.id = uniqueId;\n subRoot.setAttribute(attr, '');\n container = idWrapper || container;\n container.appendChild(subRoot);\n portalNodeRef.current = subRoot;\n setPortalNode(subRoot);\n }, [id, root, uniqueId, portalContext]);\n return portalNode;\n}\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n */\nfunction FloatingPortal(props) {\n const {\n children,\n id,\n root,\n preserveTabOrder = true\n } = props;\n const portalNode = useFloatingPortalNode({\n id,\n root\n });\n const [focusManagerState, setFocusManagerState] = React.useState(null);\n const beforeOutsideRef = React.useRef(null);\n const afterOutsideRef = React.useRef(null);\n const beforeInsideRef = React.useRef(null);\n const afterInsideRef = React.useRef(null);\n const modal = focusManagerState == null ? void 0 : focusManagerState.modal;\n const open = focusManagerState == null ? void 0 : focusManagerState.open;\n const shouldRenderGuards =\n // The FocusManager and therefore floating element are currently open/\n // rendered.\n !!focusManagerState &&\n // Guards are only for non-modal focus management.\n !focusManagerState.modal &&\n // Don't render if unmount is transitioning.\n focusManagerState.open && preserveTabOrder && !!(root || portalNode);\n\n // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n React.useEffect(() => {\n if (!portalNode || !preserveTabOrder || modal) {\n return;\n }\n\n // Make sure elements inside the portal element are tabbable only when the\n // portal has already been focused, either by tabbing into a focus trap\n // element outside or using the mouse.\n function onFocus(event) {\n if (portalNode && isOutsideEvent(event)) {\n const focusing = event.type === 'focusin';\n const manageFocus = focusing ? enableFocusInside : disableFocusInside;\n manageFocus(portalNode);\n }\n }\n // Listen to the event on the capture phase so they run before the focus\n // trap elements onFocus prop is called.\n portalNode.addEventListener('focusin', onFocus, true);\n portalNode.addEventListener('focusout', onFocus, true);\n return () => {\n portalNode.removeEventListener('focusin', onFocus, true);\n portalNode.removeEventListener('focusout', onFocus, true);\n };\n }, [portalNode, preserveTabOrder, modal]);\n React.useEffect(() => {\n if (!portalNode) return;\n if (open) return;\n enableFocusInside(portalNode);\n }, [open, portalNode]);\n return /*#__PURE__*/React.createElement(PortalContext.Provider, {\n value: React.useMemo(() => ({\n preserveTabOrder,\n beforeOutsideRef,\n afterOutsideRef,\n beforeInsideRef,\n afterInsideRef,\n portalNode,\n setFocusManagerState\n }), [preserveTabOrder, portalNode])\n }, shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(FocusGuard, {\n \"data-type\": \"outside\",\n ref: beforeOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n var _beforeInsideRef$curr;\n (_beforeInsideRef$curr = beforeInsideRef.current) == null || _beforeInsideRef$curr.focus();\n } else {\n const prevTabbable = getPreviousTabbable() || (focusManagerState == null ? void 0 : focusManagerState.refs.domReference.current);\n prevTabbable == null || prevTabbable.focus();\n }\n }\n }), shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(\"span\", {\n \"aria-owns\": portalNode.id,\n style: HIDDEN_STYLES\n }), portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode), shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(FocusGuard, {\n \"data-type\": \"outside\",\n ref: afterOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n var _afterInsideRef$curre;\n (_afterInsideRef$curre = afterInsideRef.current) == null || _afterInsideRef$curre.focus();\n } else {\n const nextTabbable = getNextTabbable() || (focusManagerState == null ? void 0 : focusManagerState.refs.domReference.current);\n nextTabbable == null || nextTabbable.focus();\n (focusManagerState == null ? void 0 : focusManagerState.closeOnFocusOut) && (focusManagerState == null ? void 0 : focusManagerState.onOpenChange(false, event.nativeEvent, 'focus-out'));\n }\n }\n }));\n}\nconst usePortalContext = () => React.useContext(PortalContext);\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nfunction getFloatingFocusElement(floatingElement) {\n if (!floatingElement) {\n return null;\n }\n // Try to find the element that has `{...getFloatingProps()}` spread on it.\n // This indicates the floating element is acting as a positioning wrapper, and\n // so focus should be managed on the child element with the event handlers and\n // aria props.\n return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(\"[\" + FOCUSABLE_ATTRIBUTE + \"]\") || floatingElement;\n}\n\nconst LIST_LIMIT = 20;\nlet previouslyFocusedElements = [];\nfunction addPreviouslyFocusedElement(element) {\n previouslyFocusedElements = previouslyFocusedElements.filter(el => el.isConnected);\n let tabbableEl = element;\n if (!tabbableEl || getNodeName(tabbableEl) === 'body') return;\n if (!isTabbable(tabbableEl, getTabbableOptions())) {\n const tabbableChild = tabbable(tabbableEl, getTabbableOptions())[0];\n if (tabbableChild) {\n tabbableEl = tabbableChild;\n }\n }\n previouslyFocusedElements.push(tabbableEl);\n if (previouslyFocusedElements.length > LIST_LIMIT) {\n previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT);\n }\n}\nfunction getPreviouslyFocusedElement() {\n return previouslyFocusedElements.slice().reverse().find(el => el.isConnected);\n}\nconst VisuallyHiddenDismiss = /*#__PURE__*/React.forwardRef(function VisuallyHiddenDismiss(props, ref) {\n return /*#__PURE__*/React.createElement(\"button\", _extends({}, props, {\n type: \"button\",\n ref: ref,\n tabIndex: -1,\n style: HIDDEN_STYLES\n }));\n});\n/**\n * Provides focus management for the floating element.\n * @see https://floating-ui.com/docs/FloatingFocusManager\n */\nfunction FloatingFocusManager(props) {\n const {\n context,\n children,\n disabled = false,\n order = ['content'],\n guards: _guards = true,\n initialFocus = 0,\n returnFocus = true,\n restoreFocus = false,\n modal = true,\n visuallyHiddenDismiss = false,\n closeOnFocusOut = true\n } = props;\n const {\n open,\n refs,\n nodeId,\n onOpenChange,\n events,\n dataRef,\n floatingId,\n elements: {\n domReference,\n floating\n }\n } = context;\n const ignoreInitialFocus = typeof initialFocus === 'number' && initialFocus < 0;\n // If the reference is a combobox and is typeable (e.g. input/textarea),\n // there are different focus semantics. The guards should not be rendered, but\n // aria-hidden should be applied to all nodes still. Further, the visually\n // hidden dismiss button should only appear at the end of the list, not the\n // start.\n const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;\n\n // Force the guards to be rendered if the `inert` attribute is not supported.\n const guards = supportsInert() ? _guards : true;\n const orderRef = useLatestRef(order);\n const initialFocusRef = useLatestRef(initialFocus);\n const returnFocusRef = useLatestRef(returnFocus);\n const tree = useFloatingTree();\n const portalContext = usePortalContext();\n const startDismissButtonRef = React.useRef(null);\n const endDismissButtonRef = React.useRef(null);\n const preventReturnFocusRef = React.useRef(false);\n const isPointerDownRef = React.useRef(false);\n const tabbableIndexRef = React.useRef(-1);\n const isInsidePortal = portalContext != null;\n const floatingFocusElement = getFloatingFocusElement(floating);\n const getTabbableContent = useEffectEvent(function (container) {\n if (container === void 0) {\n container = floatingFocusElement;\n }\n return container ? tabbable(container, getTabbableOptions()) : [];\n });\n const getTabbableElements = useEffectEvent(container => {\n const content = getTabbableContent(container);\n return orderRef.current.map(type => {\n if (domReference && type === 'reference') {\n return domReference;\n }\n if (floatingFocusElement && type === 'floating') {\n return floatingFocusElement;\n }\n return content;\n }).filter(Boolean).flat();\n });\n React.useEffect(() => {\n if (disabled) return;\n if (!modal) return;\n function onKeyDown(event) {\n if (event.key === 'Tab') {\n // The focus guards have nothing to focus, so we need to stop the event.\n if (contains(floatingFocusElement, activeElement(getDocument(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {\n stopEvent(event);\n }\n const els = getTabbableElements();\n const target = getTarget(event);\n if (orderRef.current[0] === 'reference' && target === domReference) {\n stopEvent(event);\n if (event.shiftKey) {\n enqueueFocus(els[els.length - 1]);\n } else {\n enqueueFocus(els[1]);\n }\n }\n if (orderRef.current[1] === 'floating' && target === floatingFocusElement && event.shiftKey) {\n stopEvent(event);\n enqueueFocus(els[0]);\n }\n }\n }\n const doc = getDocument(floatingFocusElement);\n doc.addEventListener('keydown', onKeyDown);\n return () => {\n doc.removeEventListener('keydown', onKeyDown);\n };\n }, [disabled, domReference, floatingFocusElement, modal, orderRef, isUntrappedTypeableCombobox, getTabbableContent, getTabbableElements]);\n React.useEffect(() => {\n if (disabled) return;\n if (!floating) return;\n function handleFocusIn(event) {\n const target = getTarget(event);\n const tabbableContent = getTabbableContent();\n const tabbableIndex = tabbableContent.indexOf(target);\n if (tabbableIndex !== -1) {\n tabbableIndexRef.current = tabbableIndex;\n }\n }\n floating.addEventListener('focusin', handleFocusIn);\n return () => {\n floating.removeEventListener('focusin', handleFocusIn);\n };\n }, [disabled, floating, getTabbableContent]);\n React.useEffect(() => {\n if (disabled) return;\n if (!closeOnFocusOut) return;\n\n // In Safari, buttons lose focus when pressing them.\n function handlePointerDown() {\n isPointerDownRef.current = true;\n setTimeout(() => {\n isPointerDownRef.current = false;\n });\n }\n function handleFocusOutside(event) {\n const relatedTarget = event.relatedTarget;\n queueMicrotask(() => {\n const movedToUnrelatedNode = !(contains(domReference, relatedTarget) || contains(floating, relatedTarget) || contains(relatedTarget, floating) || contains(portalContext == null ? void 0 : portalContext.portalNode, relatedTarget) || relatedTarget != null && relatedTarget.hasAttribute(createAttribute('focus-guard')) || tree && (getChildren(tree.nodesRef.current, nodeId).find(node => {\n var _node$context, _node$context2;\n return contains((_node$context = node.context) == null ? void 0 : _node$context.elements.floating, relatedTarget) || contains((_node$context2 = node.context) == null ? void 0 : _node$context2.elements.domReference, relatedTarget);\n }) || getAncestors(tree.nodesRef.current, nodeId).find(node => {\n var _node$context3, _node$context4;\n return ((_node$context3 = node.context) == null ? void 0 : _node$context3.elements.floating) === relatedTarget || ((_node$context4 = node.context) == null ? void 0 : _node$context4.elements.domReference) === relatedTarget;\n })));\n\n // Restore focus to the previous tabbable element index to prevent\n // focus from being lost outside the floating tree.\n if (restoreFocus && movedToUnrelatedNode && activeElement(getDocument(floatingFocusElement)) === getDocument(floatingFocusElement).body) {\n // Let `FloatingPortal` effect knows that focus is still inside the\n // floating tree.\n if (isHTMLElement(floatingFocusElement)) {\n floatingFocusElement.focus();\n }\n const prevTabbableIndex = tabbableIndexRef.current;\n const tabbableContent = getTabbableContent();\n const nodeToFocus = tabbableContent[prevTabbableIndex] || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;\n if (isHTMLElement(nodeToFocus)) {\n nodeToFocus.focus();\n }\n }\n\n // Focus did not move inside the floating tree, and there are no tabbable\n // portal guards to handle closing.\n if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current &&\n // Fix React 18 Strict Mode returnFocus due to double rendering.\n relatedTarget !== getPreviouslyFocusedElement()) {\n preventReturnFocusRef.current = true;\n onOpenChange(false, event, 'focus-out');\n }\n });\n }\n if (floating && isHTMLElement(domReference)) {\n domReference.addEventListener('focusout', handleFocusOutside);\n domReference.addEventListener('pointerdown', handlePointerDown);\n floating.addEventListener('focusout', handleFocusOutside);\n return () => {\n domReference.removeEventListener('focusout', handleFocusOutside);\n domReference.removeEventListener('pointerdown', handlePointerDown);\n floating.removeEventListener('focusout', handleFocusOutside);\n };\n }\n }, [disabled, domReference, floating, floatingFocusElement, modal, nodeId, tree, portalContext, onOpenChange, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox]);\n React.useEffect(() => {\n var _portalContext$portal;\n if (disabled) return;\n\n // Don't hide portals nested within the parent portal.\n const portalNodes = Array.from((portalContext == null || (_portalContext$portal = portalContext.portalNode) == null ? void 0 : _portalContext$portal.querySelectorAll(\"[\" + createAttribute('portal') + \"]\")) || []);\n if (floating) {\n const insideElements = [floating, ...portalNodes, startDismissButtonRef.current, endDismissButtonRef.current, orderRef.current.includes('reference') || isUntrappedTypeableCombobox ? domReference : null].filter(x => x != null);\n const cleanup = modal || isUntrappedTypeableCombobox ? markOthers(insideElements, guards, !guards) : markOthers(insideElements);\n return () => {\n cleanup();\n };\n }\n }, [disabled, domReference, floating, modal, orderRef, portalContext, isUntrappedTypeableCombobox, guards]);\n index(() => {\n if (disabled || !isHTMLElement(floatingFocusElement)) return;\n const doc = getDocument(floatingFocusElement);\n const previouslyFocusedElement = activeElement(doc);\n\n // Wait for any layout effect state setters to execute to set `tabIndex`.\n queueMicrotask(() => {\n const focusableElements = getTabbableElements(floatingFocusElement);\n const initialFocusValue = initialFocusRef.current;\n const elToFocus = (typeof initialFocusValue === 'number' ? focusableElements[initialFocusValue] : initialFocusValue.current) || floatingFocusElement;\n const focusAlreadyInsideFloatingEl = contains(floatingFocusElement, previouslyFocusedElement);\n if (!ignoreInitialFocus && !focusAlreadyInsideFloatingEl && open) {\n enqueueFocus(elToFocus, {\n preventScroll: elToFocus === floatingFocusElement\n });\n }\n });\n }, [disabled, open, floatingFocusElement, ignoreInitialFocus, getTabbableElements, initialFocusRef]);\n index(() => {\n if (disabled || !floatingFocusElement) return;\n let preventReturnFocusScroll = false;\n const doc = getDocument(floatingFocusElement);\n const previouslyFocusedElement = activeElement(doc);\n const contextData = dataRef.current;\n let openEvent = contextData.openEvent;\n addPreviouslyFocusedElement(previouslyFocusedElement);\n\n // Dismissing via outside press should always ignore `returnFocus` to\n // prevent unwanted scrolling.\n function onOpenChange(_ref) {\n let {\n open,\n reason,\n event,\n nested\n } = _ref;\n if (open) {\n openEvent = event;\n }\n if (reason === 'escape-key' && refs.domReference.current) {\n addPreviouslyFocusedElement(refs.domReference.current);\n }\n if (reason === 'hover' && event.type === 'mouseleave') {\n preventReturnFocusRef.current = true;\n }\n if (reason !== 'outside-press') return;\n if (nested) {\n preventReturnFocusRef.current = false;\n preventReturnFocusScroll = true;\n } else {\n preventReturnFocusRef.current = !(isVirtualClick(event) || isVirtualPointerEvent(event));\n }\n }\n events.on('openchange', onOpenChange);\n const fallbackEl = doc.createElement('span');\n fallbackEl.setAttribute('tabindex', '-1');\n fallbackEl.setAttribute('aria-hidden', 'true');\n Object.assign(fallbackEl.style, HIDDEN_STYLES);\n if (isInsidePortal && domReference) {\n domReference.insertAdjacentElement('afterend', fallbackEl);\n }\n function getReturnElement() {\n if (typeof returnFocusRef.current === 'boolean') {\n return getPreviouslyFocusedElement() || fallbackEl;\n }\n return returnFocusRef.current.current || fallbackEl;\n }\n return () => {\n events.off('openchange', onOpenChange);\n const activeEl = activeElement(doc);\n const isFocusInsideFloatingTree = contains(floating, activeEl) || tree && getChildren(tree.nodesRef.current, nodeId).some(node => {\n var _node$context5;\n return contains((_node$context5 = node.context) == null ? void 0 : _node$context5.elements.floating, activeEl);\n });\n const shouldFocusReference = isFocusInsideFloatingTree || openEvent && ['click', 'mousedown'].includes(openEvent.type);\n if (shouldFocusReference && refs.domReference.current) {\n addPreviouslyFocusedElement(refs.domReference.current);\n }\n const returnElement = getReturnElement();\n queueMicrotask(() => {\n if (\n // eslint-disable-next-line react-hooks/exhaustive-deps\n returnFocusRef.current && !preventReturnFocusRef.current && isHTMLElement(returnElement) && (\n // If the focus moved somewhere else after mount, avoid returning focus\n // since it likely entered a different element which should be\n // respected: https://github.com/floating-ui/floating-ui/issues/2607\n returnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {\n returnElement.focus({\n preventScroll: preventReturnFocusScroll\n });\n }\n fallbackEl.remove();\n });\n };\n }, [disabled, floating, floatingFocusElement, returnFocusRef, dataRef, refs, events, tree, nodeId, isInsidePortal, domReference]);\n React.useEffect(() => {\n // The `returnFocus` cleanup behavior is inside a microtask; ensure we\n // wait for it to complete before resetting the flag.\n queueMicrotask(() => {\n preventReturnFocusRef.current = false;\n });\n }, [disabled]);\n\n // Synchronize the `context` & `modal` value to the FloatingPortal context.\n // It will decide whether or not it needs to render its own guards.\n index(() => {\n if (disabled) return;\n if (!portalContext) return;\n portalContext.setFocusManagerState({\n modal,\n closeOnFocusOut,\n open,\n onOpenChange,\n refs\n });\n return () => {\n portalContext.setFocusManagerState(null);\n };\n }, [disabled, portalContext, modal, open, onOpenChange, refs, closeOnFocusOut]);\n index(() => {\n if (disabled) return;\n if (!floatingFocusElement) return;\n if (typeof MutationObserver !== 'function') return;\n if (ignoreInitialFocus) return;\n const handleMutation = () => {\n const tabIndex = floatingFocusElement.getAttribute('tabindex');\n const tabbableContent = getTabbableContent();\n const activeEl = activeElement(getDocument(floating));\n const tabbableIndex = tabbableContent.indexOf(activeEl);\n if (tabbableIndex !== -1) {\n tabbableIndexRef.current = tabbableIndex;\n }\n if (orderRef.current.includes('floating') || activeEl !== refs.domReference.current && tabbableContent.length === 0) {\n if (tabIndex !== '0') {\n floatingFocusElement.setAttribute('tabindex', '0');\n }\n } else if (tabIndex !== '-1') {\n floatingFocusElement.setAttribute('tabindex', '-1');\n }\n };\n handleMutation();\n const observer = new MutationObserver(handleMutation);\n observer.observe(floatingFocusElement, {\n childList: true,\n subtree: true,\n attributes: true\n });\n return () => {\n observer.disconnect();\n };\n }, [disabled, floating, floatingFocusElement, refs, orderRef, getTabbableContent, ignoreInitialFocus]);\n function renderDismissButton(location) {\n if (disabled || !visuallyHiddenDismiss || !modal) {\n return null;\n }\n return /*#__PURE__*/React.createElement(VisuallyHiddenDismiss, {\n ref: location === 'start' ? startDismissButtonRef : endDismissButtonRef,\n onClick: event => onOpenChange(false, event.nativeEvent)\n }, typeof visuallyHiddenDismiss === 'string' ? visuallyHiddenDismiss : 'Dismiss');\n }\n const shouldRenderGuards = !disabled && guards && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);\n return /*#__PURE__*/React.createElement(React.Fragment, null, shouldRenderGuards && /*#__PURE__*/React.createElement(FocusGuard, {\n \"data-type\": \"inside\",\n ref: portalContext == null ? void 0 : portalContext.beforeInsideRef,\n onFocus: event => {\n if (modal) {\n const els = getTabbableElements();\n enqueueFocus(order[0] === 'reference' ? els[0] : els[els.length - 1]);\n } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n preventReturnFocusRef.current = false;\n if (isOutsideEvent(event, portalContext.portalNode)) {\n const nextTabbable = getNextTabbable() || domReference;\n nextTabbable == null || nextTabbable.focus();\n } else {\n var _portalContext$before;\n (_portalContext$before = portalContext.beforeOutsideRef.current) == null || _portalContext$before.focus();\n }\n }\n }\n }), !isUntrappedTypeableCombobox && renderDismissButton('start'), children, renderDismissButton('end'), shouldRenderGuards && /*#__PURE__*/React.createElement(FocusGuard, {\n \"data-type\": \"inside\",\n ref: portalContext == null ? void 0 : portalContext.afterInsideRef,\n onFocus: event => {\n if (modal) {\n enqueueFocus(getTabbableElements()[0]);\n } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n if (closeOnFocusOut) {\n preventReturnFocusRef.current = true;\n }\n if (isOutsideEvent(event, portalContext.portalNode)) {\n const prevTabbable = getPreviousTabbable() || domReference;\n prevTabbable == null || prevTabbable.focus();\n } else {\n var _portalContext$afterO;\n (_portalContext$afterO = portalContext.afterOutsideRef.current) == null || _portalContext$afterO.focus();\n }\n }\n }\n }));\n}\n\nlet lockCount = 0;\nfunction enableScrollLock() {\n const isIOS = /iP(hone|ad|od)|iOS/.test(getPlatform());\n const bodyStyle = document.body.style;\n // RTL scrollbar\n const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;\n const paddingProp = scrollbarX ? 'paddingLeft' : 'paddingRight';\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;\n const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;\n bodyStyle.overflow = 'hidden';\n if (scrollbarWidth) {\n bodyStyle[paddingProp] = scrollbarWidth + \"px\";\n }\n\n // Only iOS doesn't respect `overflow: hidden` on document.body, and this\n // technique has fewer side effects.\n if (isIOS) {\n var _window$visualViewpor, _window$visualViewpor2;\n // iOS 12 does not support `visualViewport`.\n const offsetLeft = ((_window$visualViewpor = window.visualViewport) == null ? void 0 : _window$visualViewpor.offsetLeft) || 0;\n const offsetTop = ((_window$visualViewpor2 = window.visualViewport) == null ? void 0 : _window$visualViewpor2.offsetTop) || 0;\n Object.assign(bodyStyle, {\n position: 'fixed',\n top: -(scrollY - Math.floor(offsetTop)) + \"px\",\n left: -(scrollX - Math.floor(offsetLeft)) + \"px\",\n right: '0'\n });\n }\n return () => {\n Object.assign(bodyStyle, {\n overflow: '',\n [paddingProp]: ''\n });\n if (isIOS) {\n Object.assign(bodyStyle, {\n position: '',\n top: '',\n left: '',\n right: ''\n });\n window.scrollTo(scrollX, scrollY);\n }\n };\n}\nlet cleanup = () => {};\n\n/**\n * Provides base styling for a fixed overlay element to dim content or block\n * pointer events behind a floating element.\n * It's a regular ``, so it can be styled via any CSS solution you prefer.\n * @see https://floating-ui.com/docs/FloatingOverlay\n */\nconst FloatingOverlay = /*#__PURE__*/React.forwardRef(function FloatingOverlay(props, ref) {\n const {\n lockScroll = false,\n ...rest\n } = props;\n index(() => {\n if (!lockScroll) return;\n lockCount++;\n if (lockCount === 1) {\n cleanup = enableScrollLock();\n }\n return () => {\n lockCount--;\n if (lockCount === 0) {\n cleanup();\n }\n };\n }, [lockScroll]);\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: ref\n }, rest, {\n style: {\n position: 'fixed',\n overflow: 'auto',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...rest.style\n }\n }));\n});\n\nfunction isButtonTarget(event) {\n return isHTMLElement(event.target) && event.target.tagName === 'BUTTON';\n}\nfunction isSpaceIgnored(element) {\n return isTypeableElement(element);\n}\n/**\n * Opens or closes the floating element when clicking the reference element.\n * @see https://floating-ui.com/docs/useClick\n */\nfunction useClick(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n dataRef,\n elements: {\n domReference\n }\n } = context;\n const {\n enabled = true,\n event: eventOption = 'click',\n toggle = true,\n ignoreMouse = false,\n keyboardHandlers = true,\n stickIfOpen = true\n } = props;\n const pointerTypeRef = React.useRef();\n const didKeyDownRef = React.useRef(false);\n const reference = React.useMemo(() => ({\n onPointerDown(event) {\n pointerTypeRef.current = event.pointerType;\n },\n onMouseDown(event) {\n const pointerType = pointerTypeRef.current;\n\n // Ignore all buttons except for the \"main\" button.\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n if (event.button !== 0) return;\n if (eventOption === 'click') return;\n if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'mousedown' : true)) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n // Prevent stealing focus from the floating element\n event.preventDefault();\n onOpenChange(true, event.nativeEvent, 'click');\n }\n },\n onClick(event) {\n const pointerType = pointerTypeRef.current;\n if (eventOption === 'mousedown' && pointerTypeRef.current) {\n pointerTypeRef.current = undefined;\n return;\n }\n if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'click' : true)) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n },\n onKeyDown(event) {\n pointerTypeRef.current = undefined;\n if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event)) {\n return;\n }\n if (event.key === ' ' && !isSpaceIgnored(domReference)) {\n // Prevent scrolling\n event.preventDefault();\n didKeyDownRef.current = true;\n }\n if (event.key === 'Enter') {\n if (open && toggle) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n }\n },\n onKeyUp(event) {\n if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event) || isSpaceIgnored(domReference)) {\n return;\n }\n if (event.key === ' ' && didKeyDownRef.current) {\n didKeyDownRef.current = false;\n if (open && toggle) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n }\n }\n }), [dataRef, domReference, eventOption, ignoreMouse, keyboardHandlers, onOpenChange, open, stickIfOpen, toggle]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nfunction createVirtualElement(domElement, data) {\n let offsetX = null;\n let offsetY = null;\n let isAutoUpdateEvent = false;\n return {\n contextElement: domElement || undefined,\n getBoundingClientRect() {\n var _data$dataRef$current;\n const domRect = (domElement == null ? void 0 : domElement.getBoundingClientRect()) || {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n const isXAxis = data.axis === 'x' || data.axis === 'both';\n const isYAxis = data.axis === 'y' || data.axis === 'both';\n const canTrackCursorOnAutoUpdate = ['mouseenter', 'mousemove'].includes(((_data$dataRef$current = data.dataRef.current.openEvent) == null ? void 0 : _data$dataRef$current.type) || '') && data.pointerType !== 'touch';\n let width = domRect.width;\n let height = domRect.height;\n let x = domRect.x;\n let y = domRect.y;\n if (offsetX == null && data.x && isXAxis) {\n offsetX = domRect.x - data.x;\n }\n if (offsetY == null && data.y && isYAxis) {\n offsetY = domRect.y - data.y;\n }\n x -= offsetX || 0;\n y -= offsetY || 0;\n width = 0;\n height = 0;\n if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {\n width = data.axis === 'y' ? domRect.width : 0;\n height = data.axis === 'x' ? domRect.height : 0;\n x = isXAxis && data.x != null ? data.x : x;\n y = isYAxis && data.y != null ? data.y : y;\n } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {\n height = data.axis === 'x' ? domRect.height : height;\n width = data.axis === 'y' ? domRect.width : width;\n }\n isAutoUpdateEvent = true;\n return {\n width,\n height,\n x,\n y,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x\n };\n }\n };\n}\nfunction isMouseBasedEvent(event) {\n return event != null && event.clientX != null;\n}\n/**\n * Positions the floating element relative to a client point (in the viewport),\n * such as the mouse position. By default, it follows the mouse cursor.\n * @see https://floating-ui.com/docs/useClientPoint\n */\nfunction useClientPoint(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n dataRef,\n elements: {\n floating,\n domReference\n },\n refs\n } = context;\n const {\n enabled = true,\n axis = 'both',\n x = null,\n y = null\n } = props;\n const initialRef = React.useRef(false);\n const cleanupListenerRef = React.useRef(null);\n const [pointerType, setPointerType] = React.useState();\n const [reactive, setReactive] = React.useState([]);\n const setReference = useEffectEvent((x, y) => {\n if (initialRef.current) return;\n\n // Prevent setting if the open event was not a mouse-like one\n // (e.g. focus to open, then hover over the reference element).\n // Only apply if the event exists.\n if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {\n return;\n }\n refs.setPositionReference(createVirtualElement(domReference, {\n x,\n y,\n axis,\n dataRef,\n pointerType\n }));\n });\n const handleReferenceEnterOrMove = useEffectEvent(event => {\n if (x != null || y != null) return;\n if (!open) {\n setReference(event.clientX, event.clientY);\n } else if (!cleanupListenerRef.current) {\n // If there's no cleanup, there's no listener, but we want to ensure\n // we add the listener if the cursor landed on the floating element and\n // then back on the reference (i.e. it's interactive).\n setReactive([]);\n }\n });\n\n // If the pointer is a mouse-like pointer, we want to continue following the\n // mouse even if the floating element is transitioning out. On touch\n // devices, this is undesirable because the floating element will move to\n // the dismissal touch point.\n const openCheck = isMouseLikePointerType(pointerType) ? floating : open;\n const addListener = React.useCallback(() => {\n // Explicitly specified `x`/`y` coordinates shouldn't add a listener.\n if (!openCheck || !enabled || x != null || y != null) return;\n const win = getWindow(floating);\n function handleMouseMove(event) {\n const target = getTarget(event);\n if (!contains(floating, target)) {\n setReference(event.clientX, event.clientY);\n } else {\n win.removeEventListener('mousemove', handleMouseMove);\n cleanupListenerRef.current = null;\n }\n }\n if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {\n win.addEventListener('mousemove', handleMouseMove);\n const cleanup = () => {\n win.removeEventListener('mousemove', handleMouseMove);\n cleanupListenerRef.current = null;\n };\n cleanupListenerRef.current = cleanup;\n return cleanup;\n }\n refs.setPositionReference(domReference);\n }, [openCheck, enabled, x, y, floating, dataRef, refs, domReference, setReference]);\n React.useEffect(() => {\n return addListener();\n }, [addListener, reactive]);\n React.useEffect(() => {\n if (enabled && !floating) {\n initialRef.current = false;\n }\n }, [enabled, floating]);\n React.useEffect(() => {\n if (!enabled && open) {\n initialRef.current = true;\n }\n }, [enabled, open]);\n index(() => {\n if (enabled && (x != null || y != null)) {\n initialRef.current = false;\n setReference(x, y);\n }\n }, [enabled, x, y, setReference]);\n const reference = React.useMemo(() => {\n function setPointerTypeRef(_ref) {\n let {\n pointerType\n } = _ref;\n setPointerType(pointerType);\n }\n return {\n onPointerDown: setPointerTypeRef,\n onPointerEnter: setPointerTypeRef,\n onMouseMove: handleReferenceEnterOrMove,\n onMouseEnter: handleReferenceEnterOrMove\n };\n }, [handleReferenceEnterOrMove]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nconst bubbleHandlerKeys = {\n pointerdown: 'onPointerDown',\n mousedown: 'onMouseDown',\n click: 'onClick'\n};\nconst captureHandlerKeys = {\n pointerdown: 'onPointerDownCapture',\n mousedown: 'onMouseDownCapture',\n click: 'onClickCapture'\n};\nconst normalizeProp = normalizable => {\n var _normalizable$escapeK, _normalizable$outside;\n return {\n escapeKey: typeof normalizable === 'boolean' ? normalizable : (_normalizable$escapeK = normalizable == null ? void 0 : normalizable.escapeKey) != null ? _normalizable$escapeK : false,\n outsidePress: typeof normalizable === 'boolean' ? normalizable : (_normalizable$outside = normalizable == null ? void 0 : normalizable.outsidePress) != null ? _normalizable$outside : true\n };\n};\n/**\n * Closes the floating element when a dismissal is requested — by default, when\n * the user presses the `escape` key or outside of the floating element.\n * @see https://floating-ui.com/docs/useDismiss\n */\nfunction useDismiss(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n elements,\n dataRef\n } = context;\n const {\n enabled = true,\n escapeKey = true,\n outsidePress: unstable_outsidePress = true,\n outsidePressEvent = 'pointerdown',\n referencePress = false,\n referencePressEvent = 'pointerdown',\n ancestorScroll = false,\n bubbles,\n capture\n } = props;\n const tree = useFloatingTree();\n const outsidePressFn = useEffectEvent(typeof unstable_outsidePress === 'function' ? unstable_outsidePress : () => false);\n const outsidePress = typeof unstable_outsidePress === 'function' ? outsidePressFn : unstable_outsidePress;\n const insideReactTreeRef = React.useRef(false);\n const endedOrStartedInsideRef = React.useRef(false);\n const {\n escapeKey: escapeKeyBubbles,\n outsidePress: outsidePressBubbles\n } = normalizeProp(bubbles);\n const {\n escapeKey: escapeKeyCapture,\n outsidePress: outsidePressCapture\n } = normalizeProp(capture);\n const isComposingRef = React.useRef(false);\n const closeOnEscapeKeyDown = useEffectEvent(event => {\n var _dataRef$current$floa;\n if (!open || !enabled || !escapeKey || event.key !== 'Escape') {\n return;\n }\n\n // Wait until IME is settled. Pressing `Escape` while composing should\n // close the compose menu, but not the floating element.\n if (isComposingRef.current) {\n return;\n }\n const nodeId = (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n const children = tree ? getChildren(tree.nodesRef.current, nodeId) : [];\n if (!escapeKeyBubbles) {\n event.stopPropagation();\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach(child => {\n var _child$context;\n if ((_child$context = child.context) != null && _child$context.open && !child.context.dataRef.current.__escapeKeyBubbles) {\n shouldDismiss = false;\n return;\n }\n });\n if (!shouldDismiss) {\n return;\n }\n }\n }\n onOpenChange(false, isReactEvent(event) ? event.nativeEvent : event, 'escape-key');\n });\n const closeOnEscapeKeyDownCapture = useEffectEvent(event => {\n var _getTarget2;\n const callback = () => {\n var _getTarget;\n closeOnEscapeKeyDown(event);\n (_getTarget = getTarget(event)) == null || _getTarget.removeEventListener('keydown', callback);\n };\n (_getTarget2 = getTarget(event)) == null || _getTarget2.addEventListener('keydown', callback);\n });\n const closeOnPressOutside = useEffectEvent(event => {\n var _dataRef$current$floa2;\n // Given developers can stop the propagation of the synthetic event,\n // we can only be confident with a positive value.\n const insideReactTree = insideReactTreeRef.current;\n insideReactTreeRef.current = false;\n\n // When click outside is lazy (`click` event), handle dragging.\n // Don't close if:\n // - The click started inside the floating element.\n // - The click ended inside the floating element.\n const endedOrStartedInside = endedOrStartedInsideRef.current;\n endedOrStartedInsideRef.current = false;\n if (outsidePressEvent === 'click' && endedOrStartedInside) {\n return;\n }\n if (insideReactTree) {\n return;\n }\n if (typeof outsidePress === 'function' && !outsidePress(event)) {\n return;\n }\n const target = getTarget(event);\n const inertSelector = \"[\" + createAttribute('inert') + \"]\";\n const markers = getDocument(elements.floating).querySelectorAll(inertSelector);\n let targetRootAncestor = isElement(target) ? target : null;\n while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {\n const nextParent = getParentNode(targetRootAncestor);\n if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {\n break;\n }\n targetRootAncestor = nextParent;\n }\n\n // Check if the click occurred on a third-party element injected after the\n // floating element rendered.\n if (markers.length && isElement(target) && !isRootElement(target) &&\n // Clicked on a direct ancestor (e.g. FloatingOverlay).\n !contains(target, elements.floating) &&\n // If the target root element contains none of the markers, then the\n // element was injected after the floating element rendered.\n Array.from(markers).every(marker => !contains(targetRootAncestor, marker))) {\n return;\n }\n\n // Check if the click occurred on the scrollbar\n if (isHTMLElement(target) && floating) {\n // In Firefox, `target.scrollWidth > target.clientWidth` for inline\n // elements.\n const canScrollX = target.clientWidth > 0 && target.scrollWidth > target.clientWidth;\n const canScrollY = target.clientHeight > 0 && target.scrollHeight > target.clientHeight;\n let xCond = canScrollY && event.offsetX > target.clientWidth;\n\n // In some browsers it is possible to change the (or window)\n // scrollbar to the left side, but is very rare and is difficult to\n // check for. Plus, for modal dialogs with backdrops, it is more\n // important that the backdrop is checked but not so much the window.\n if (canScrollY) {\n const isRTL = getComputedStyle(target).direction === 'rtl';\n if (isRTL) {\n xCond = event.offsetX <= target.offsetWidth - target.clientWidth;\n }\n }\n if (xCond || canScrollX && event.offsetY > target.clientHeight) {\n return;\n }\n }\n const nodeId = (_dataRef$current$floa2 = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa2.nodeId;\n const targetIsInsideChildren = tree && getChildren(tree.nodesRef.current, nodeId).some(node => {\n var _node$context;\n return isEventTargetWithin(event, (_node$context = node.context) == null ? void 0 : _node$context.elements.floating);\n });\n if (isEventTargetWithin(event, elements.floating) || isEventTargetWithin(event, elements.domReference) || targetIsInsideChildren) {\n return;\n }\n const children = tree ? getChildren(tree.nodesRef.current, nodeId) : [];\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach(child => {\n var _child$context2;\n if ((_child$context2 = child.context) != null && _child$context2.open && !child.context.dataRef.current.__outsidePressBubbles) {\n shouldDismiss = false;\n return;\n }\n });\n if (!shouldDismiss) {\n return;\n }\n }\n onOpenChange(false, event, 'outside-press');\n });\n const closeOnPressOutsideCapture = useEffectEvent(event => {\n var _getTarget4;\n const callback = () => {\n var _getTarget3;\n closeOnPressOutside(event);\n (_getTarget3 = getTarget(event)) == null || _getTarget3.removeEventListener(outsidePressEvent, callback);\n };\n (_getTarget4 = getTarget(event)) == null || _getTarget4.addEventListener(outsidePressEvent, callback);\n });\n React.useEffect(() => {\n if (!open || !enabled) {\n return;\n }\n dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;\n dataRef.current.__outsidePressBubbles = outsidePressBubbles;\n let compositionTimeout = -1;\n function onScroll(event) {\n onOpenChange(false, event, 'ancestor-scroll');\n }\n function handleCompositionStart() {\n window.clearTimeout(compositionTimeout);\n isComposingRef.current = true;\n }\n function handleCompositionEnd() {\n // Safari fires `compositionend` before `keydown`, so we need to wait\n // until the next tick to set `isComposing` to `false`.\n // https://bugs.webkit.org/show_bug.cgi?id=165004\n compositionTimeout = window.setTimeout(() => {\n isComposingRef.current = false;\n },\n // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.\n // Only apply to WebKit for the test to remain 0ms.\n isWebKit() ? 5 : 0);\n }\n const doc = getDocument(elements.floating);\n if (escapeKey) {\n doc.addEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n doc.addEventListener('compositionstart', handleCompositionStart);\n doc.addEventListener('compositionend', handleCompositionEnd);\n }\n outsidePress && doc.addEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n let ancestors = [];\n if (ancestorScroll) {\n if (isElement(elements.domReference)) {\n ancestors = getOverflowAncestors(elements.domReference);\n }\n if (isElement(elements.floating)) {\n ancestors = ancestors.concat(getOverflowAncestors(elements.floating));\n }\n if (!isElement(elements.reference) && elements.reference && elements.reference.contextElement) {\n ancestors = ancestors.concat(getOverflowAncestors(elements.reference.contextElement));\n }\n }\n\n // Ignore the visual viewport for scrolling dismissal (allow pinch-zoom)\n ancestors = ancestors.filter(ancestor => {\n var _doc$defaultView;\n return ancestor !== ((_doc$defaultView = doc.defaultView) == null ? void 0 : _doc$defaultView.visualViewport);\n });\n ancestors.forEach(ancestor => {\n ancestor.addEventListener('scroll', onScroll, {\n passive: true\n });\n });\n return () => {\n if (escapeKey) {\n doc.removeEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n doc.removeEventListener('compositionstart', handleCompositionStart);\n doc.removeEventListener('compositionend', handleCompositionEnd);\n }\n outsidePress && doc.removeEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n ancestors.forEach(ancestor => {\n ancestor.removeEventListener('scroll', onScroll);\n });\n window.clearTimeout(compositionTimeout);\n };\n }, [dataRef, elements, escapeKey, outsidePress, outsidePressEvent, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, escapeKeyCapture, closeOnEscapeKeyDownCapture, closeOnPressOutside, outsidePressCapture, closeOnPressOutsideCapture]);\n React.useEffect(() => {\n insideReactTreeRef.current = false;\n }, [outsidePress, outsidePressEvent]);\n const reference = React.useMemo(() => ({\n onKeyDown: closeOnEscapeKeyDown,\n [bubbleHandlerKeys[referencePressEvent]]: event => {\n if (referencePress) {\n onOpenChange(false, event.nativeEvent, 'reference-press');\n }\n }\n }), [closeOnEscapeKeyDown, onOpenChange, referencePress, referencePressEvent]);\n const floating = React.useMemo(() => ({\n onKeyDown: closeOnEscapeKeyDown,\n onMouseDown() {\n endedOrStartedInsideRef.current = true;\n },\n onMouseUp() {\n endedOrStartedInsideRef.current = true;\n },\n [captureHandlerKeys[outsidePressEvent]]: () => {\n insideReactTreeRef.current = true;\n }\n }), [closeOnEscapeKeyDown, outsidePressEvent]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nfunction useFloatingRootContext(options) {\n const {\n open = false,\n onOpenChange: onOpenChangeProp,\n elements: elementsProp\n } = options;\n const floatingId = useId();\n const dataRef = React.useRef({});\n const [events] = React.useState(() => createPubSub());\n const nested = useFloatingParentNodeId() != null;\n if (process.env.NODE_ENV !== \"production\") {\n const optionDomReference = elementsProp.reference;\n if (optionDomReference && !isElement(optionDomReference)) {\n error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `refs.setPositionReference()`', 'instead.');\n }\n }\n const [positionReference, setPositionReference] = React.useState(elementsProp.reference);\n const onOpenChange = useEffectEvent((open, event, reason) => {\n dataRef.current.openEvent = open ? event : undefined;\n events.emit('openchange', {\n open,\n event,\n reason,\n nested\n });\n onOpenChangeProp == null || onOpenChangeProp(open, event, reason);\n });\n const refs = React.useMemo(() => ({\n setPositionReference\n }), []);\n const elements = React.useMemo(() => ({\n reference: positionReference || elementsProp.reference || null,\n floating: elementsProp.floating || null,\n domReference: elementsProp.reference\n }), [positionReference, elementsProp.reference, elementsProp.floating]);\n return React.useMemo(() => ({\n dataRef,\n open,\n onOpenChange,\n elements,\n events,\n floatingId,\n refs\n }), [open, onOpenChange, elements, events, floatingId, refs]);\n}\n\n/**\n * Provides data to position a floating element and context to add interactions.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n nodeId\n } = options;\n const internalRootContext = useFloatingRootContext({\n ...options,\n elements: {\n reference: null,\n floating: null,\n ...options.elements\n }\n });\n const rootContext = options.rootContext || internalRootContext;\n const computedElements = rootContext.elements;\n const [_domReference, setDomReference] = React.useState(null);\n const [positionReference, _setPositionReference] = React.useState(null);\n const optionDomReference = computedElements == null ? void 0 : computedElements.domReference;\n const domReference = optionDomReference || _domReference;\n const domReferenceRef = React.useRef(null);\n const tree = useFloatingTree();\n index(() => {\n if (domReference) {\n domReferenceRef.current = domReference;\n }\n }, [domReference]);\n const position = useFloating$1({\n ...options,\n elements: {\n ...computedElements,\n ...(positionReference && {\n reference: positionReference\n })\n }\n });\n const setPositionReference = React.useCallback(node => {\n const computedPositionReference = isElement(node) ? {\n getBoundingClientRect: () => node.getBoundingClientRect(),\n contextElement: node\n } : node;\n // Store the positionReference in state if the DOM reference is specified externally via the\n // `elements.reference` option. This ensures that it won't be overridden on future renders.\n _setPositionReference(computedPositionReference);\n position.refs.setReference(computedPositionReference);\n }, [position.refs]);\n const setReference = React.useCallback(node => {\n if (isElement(node) || node === null) {\n domReferenceRef.current = node;\n setDomReference(node);\n }\n\n // Backwards-compatibility for passing a virtual element to `reference`\n // after it has set the DOM reference.\n if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||\n // Don't allow setting virtual elements using the old technique back to\n // `null` to support `positionReference` + an unstable `reference`\n // callback ref.\n node !== null && !isElement(node)) {\n position.refs.setReference(node);\n }\n }, [position.refs]);\n const refs = React.useMemo(() => ({\n ...position.refs,\n setReference,\n setPositionReference,\n domReference: domReferenceRef\n }), [position.refs, setReference, setPositionReference]);\n const elements = React.useMemo(() => ({\n ...position.elements,\n domReference: domReference\n }), [position.elements, domReference]);\n const context = React.useMemo(() => ({\n ...position,\n ...rootContext,\n refs,\n elements,\n nodeId\n }), [position, refs, elements, nodeId, rootContext]);\n index(() => {\n rootContext.dataRef.current.floatingContext = context;\n const node = tree == null ? void 0 : tree.nodesRef.current.find(node => node.id === nodeId);\n if (node) {\n node.context = context;\n }\n });\n return React.useMemo(() => ({\n ...position,\n context,\n refs,\n elements\n }), [position, refs, elements, context]);\n}\n\n/**\n * Opens the floating element while the reference element has focus, like CSS\n * `:focus`.\n * @see https://floating-ui.com/docs/useFocus\n */\nfunction useFocus(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n events,\n dataRef,\n elements\n } = context;\n const {\n enabled = true,\n visibleOnly = true\n } = props;\n const blockFocusRef = React.useRef(false);\n const timeoutRef = React.useRef();\n const keyboardModalityRef = React.useRef(true);\n React.useEffect(() => {\n if (!enabled) return;\n const win = getWindow(elements.domReference);\n\n // If the reference was focused and the user left the tab/window, and the\n // floating element was not open, the focus should be blocked when they\n // return to the tab/window.\n function onBlur() {\n if (!open && isHTMLElement(elements.domReference) && elements.domReference === activeElement(getDocument(elements.domReference))) {\n blockFocusRef.current = true;\n }\n }\n function onKeyDown() {\n keyboardModalityRef.current = true;\n }\n win.addEventListener('blur', onBlur);\n win.addEventListener('keydown', onKeyDown, true);\n return () => {\n win.removeEventListener('blur', onBlur);\n win.removeEventListener('keydown', onKeyDown, true);\n };\n }, [elements.domReference, open, enabled]);\n React.useEffect(() => {\n if (!enabled) return;\n function onOpenChange(_ref) {\n let {\n reason\n } = _ref;\n if (reason === 'reference-press' || reason === 'escape-key') {\n blockFocusRef.current = true;\n }\n }\n events.on('openchange', onOpenChange);\n return () => {\n events.off('openchange', onOpenChange);\n };\n }, [events, enabled]);\n React.useEffect(() => {\n return () => {\n clearTimeout(timeoutRef.current);\n };\n }, []);\n const reference = React.useMemo(() => ({\n onPointerDown(event) {\n if (isVirtualPointerEvent(event.nativeEvent)) return;\n keyboardModalityRef.current = false;\n },\n onMouseLeave() {\n blockFocusRef.current = false;\n },\n onFocus(event) {\n if (blockFocusRef.current) return;\n const target = getTarget(event.nativeEvent);\n if (visibleOnly && isElement(target)) {\n try {\n // Mac Safari unreliably matches `:focus-visible` on the reference\n // if focus was outside the page initially - use the fallback\n // instead.\n if (isSafari() && isMac()) throw Error();\n if (!target.matches(':focus-visible')) return;\n } catch (e) {\n // Old browsers will throw an error when using `:focus-visible`.\n if (!keyboardModalityRef.current && !isTypeableElement(target)) {\n return;\n }\n }\n }\n onOpenChange(true, event.nativeEvent, 'focus');\n },\n onBlur(event) {\n blockFocusRef.current = false;\n const relatedTarget = event.relatedTarget;\n const nativeEvent = event.nativeEvent;\n\n // Hit the non-modal focus management portal guard. Focus will be\n // moved into the floating element immediately after.\n const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';\n\n // Wait for the window blur listener to fire.\n timeoutRef.current = window.setTimeout(() => {\n var _dataRef$current$floa;\n const activeEl = activeElement(elements.domReference ? elements.domReference.ownerDocument : document);\n\n // Focus left the page, keep it open.\n if (!relatedTarget && activeEl === elements.domReference) return;\n\n // When focusing the reference element (e.g. regular click), then\n // clicking into the floating element, prevent it from hiding.\n // Note: it must be focusable, e.g. `tabindex=\"-1\"`.\n // We can not rely on relatedTarget to point to the correct element\n // as it will only point to the shadow host of the newly focused element\n // and not the element that actually has received focus if it is located\n // inside a shadow root.\n if (contains((_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.refs.floating.current, activeEl) || contains(elements.domReference, activeEl) || movedToFocusGuard) {\n return;\n }\n onOpenChange(false, nativeEvent, 'focus');\n });\n }\n }), [dataRef, elements.domReference, onOpenChange, visibleOnly]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nconst ACTIVE_KEY = 'active';\nconst SELECTED_KEY = 'selected';\nfunction mergeProps(userProps, propsList, elementKey) {\n const map = new Map();\n const isItem = elementKey === 'item';\n let domUserProps = userProps;\n if (isItem && userProps) {\n const {\n [ACTIVE_KEY]: _,\n [SELECTED_KEY]: __,\n ...validProps\n } = userProps;\n domUserProps = validProps;\n }\n return {\n ...(elementKey === 'floating' && {\n tabIndex: -1,\n [FOCUSABLE_ATTRIBUTE]: ''\n }),\n ...domUserProps,\n ...propsList.map(value => {\n const propsOrGetProps = value ? value[elementKey] : null;\n if (typeof propsOrGetProps === 'function') {\n return userProps ? propsOrGetProps(userProps) : null;\n }\n return propsOrGetProps;\n }).concat(userProps).reduce((acc, props) => {\n if (!props) {\n return acc;\n }\n Object.entries(props).forEach(_ref => {\n let [key, value] = _ref;\n if (isItem && [ACTIVE_KEY, SELECTED_KEY].includes(key)) {\n return;\n }\n if (key.indexOf('on') === 0) {\n if (!map.has(key)) {\n map.set(key, []);\n }\n if (typeof value === 'function') {\n var _map$get;\n (_map$get = map.get(key)) == null || _map$get.push(value);\n acc[key] = function () {\n var _map$get2;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return (_map$get2 = map.get(key)) == null ? void 0 : _map$get2.map(fn => fn(...args)).find(val => val !== undefined);\n };\n }\n } else {\n acc[key] = value;\n }\n });\n return acc;\n }, {})\n };\n}\n/**\n * Merges an array of interaction hooks' props into prop getters, allowing\n * event handler functions to be composed together without overwriting one\n * another.\n * @see https://floating-ui.com/docs/useInteractions\n */\nfunction useInteractions(propsList) {\n if (propsList === void 0) {\n propsList = [];\n }\n const referenceDeps = propsList.map(key => key == null ? void 0 : key.reference);\n const floatingDeps = propsList.map(key => key == null ? void 0 : key.floating);\n const itemDeps = propsList.map(key => key == null ? void 0 : key.item);\n const getReferenceProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'reference'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n referenceDeps);\n const getFloatingProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'floating'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n floatingDeps);\n const getItemProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'item'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n itemDeps);\n return React.useMemo(() => ({\n getReferenceProps,\n getFloatingProps,\n getItemProps\n }), [getReferenceProps, getFloatingProps, getItemProps]);\n}\n\nlet isPreventScrollSupported = false;\nfunction doSwitch(orientation, vertical, horizontal) {\n switch (orientation) {\n case 'vertical':\n return vertical;\n case 'horizontal':\n return horizontal;\n default:\n return vertical || horizontal;\n }\n}\nfunction isMainOrientationKey(key, orientation) {\n const vertical = key === ARROW_UP || key === ARROW_DOWN;\n const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n const vertical = key === ARROW_DOWN;\n const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal) || key === 'Enter' || key === ' ' || key === '';\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n const horizontal = key === ARROW_DOWN;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl) {\n const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n const horizontal = key === ARROW_UP;\n return doSwitch(orientation, vertical, horizontal);\n}\n/**\n * Adds arrow key-based navigation of a list of items, either using real DOM\n * focus or virtual focus.\n * @see https://floating-ui.com/docs/useListNavigation\n */\nfunction useListNavigation(context, props) {\n const {\n open,\n onOpenChange,\n elements\n } = context;\n const {\n listRef,\n activeIndex,\n onNavigate: unstable_onNavigate = () => {},\n enabled = true,\n selectedIndex = null,\n allowEscape = false,\n loop = false,\n nested = false,\n rtl = false,\n virtual = false,\n focusItemOnOpen = 'auto',\n focusItemOnHover = true,\n openOnArrowKeyDown = true,\n disabledIndices = undefined,\n orientation = 'vertical',\n cols = 1,\n scrollItemIntoView = true,\n virtualItemRef,\n itemSizes,\n dense = false\n } = props;\n if (process.env.NODE_ENV !== \"production\") {\n if (allowEscape) {\n if (!loop) {\n warn('`useListNavigation` looping must be enabled to allow escaping.');\n }\n if (!virtual) {\n warn('`useListNavigation` must be virtual to allow escaping.');\n }\n }\n if (orientation === 'vertical' && cols > 1) {\n warn('In grid list navigation mode (`cols` > 1), the `orientation` should', 'be either \"horizontal\" or \"both\".');\n }\n }\n const floatingFocusElement = getFloatingFocusElement(elements.floating);\n const floatingFocusElementRef = useLatestRef(floatingFocusElement);\n const parentId = useFloatingParentNodeId();\n const tree = useFloatingTree();\n const onNavigate = useEffectEvent(unstable_onNavigate);\n const typeableComboboxReference = isTypeableCombobox(elements.domReference);\n const focusItemOnOpenRef = React.useRef(focusItemOnOpen);\n const indexRef = React.useRef(selectedIndex != null ? selectedIndex : -1);\n const keyRef = React.useRef(null);\n const isPointerModalityRef = React.useRef(true);\n const previousOnNavigateRef = React.useRef(onNavigate);\n const previousMountedRef = React.useRef(!!elements.floating);\n const previousOpenRef = React.useRef(open);\n const forceSyncFocus = React.useRef(false);\n const forceScrollIntoViewRef = React.useRef(false);\n const disabledIndicesRef = useLatestRef(disabledIndices);\n const latestOpenRef = useLatestRef(open);\n const scrollItemIntoViewRef = useLatestRef(scrollItemIntoView);\n const selectedIndexRef = useLatestRef(selectedIndex);\n const [activeId, setActiveId] = React.useState();\n const [virtualId, setVirtualId] = React.useState();\n const focusItem = useEffectEvent(function (listRef, indexRef, forceScrollIntoView) {\n if (forceScrollIntoView === void 0) {\n forceScrollIntoView = false;\n }\n function runFocus(item) {\n if (virtual) {\n setActiveId(item.id);\n tree == null || tree.events.emit('virtualfocus', item);\n if (virtualItemRef) {\n virtualItemRef.current = item;\n }\n } else {\n enqueueFocus(item, {\n preventScroll: true,\n // Mac Safari does not move the virtual cursor unless the focus call\n // is sync. However, for the very first focus call, we need to wait\n // for the position to be ready in order to prevent unwanted\n // scrolling. This means the virtual cursor will not move to the first\n // item when first opening the floating element, but will on\n // subsequent calls. `preventScroll` is supported in modern Safari,\n // so we can use that instead.\n // iOS Safari must be async or the first item will not be focused.\n sync: isMac() && isSafari() ? isPreventScrollSupported || forceSyncFocus.current : false\n });\n }\n }\n const initialItem = listRef.current[indexRef.current];\n if (initialItem) {\n runFocus(initialItem);\n }\n requestAnimationFrame(() => {\n const waitedItem = listRef.current[indexRef.current] || initialItem;\n if (!waitedItem) return;\n if (!initialItem) {\n runFocus(waitedItem);\n }\n const scrollIntoViewOptions = scrollItemIntoViewRef.current;\n const shouldScrollIntoView = scrollIntoViewOptions && item && (forceScrollIntoView || !isPointerModalityRef.current);\n if (shouldScrollIntoView) {\n // JSDOM doesn't support `.scrollIntoView()` but it's widely supported\n // by all browsers.\n waitedItem.scrollIntoView == null || waitedItem.scrollIntoView(typeof scrollIntoViewOptions === 'boolean' ? {\n block: 'nearest',\n inline: 'nearest'\n } : scrollIntoViewOptions);\n }\n });\n });\n index(() => {\n document.createElement('div').focus({\n get preventScroll() {\n isPreventScrollSupported = true;\n return false;\n }\n });\n }, []);\n\n // Sync `selectedIndex` to be the `activeIndex` upon opening the floating\n // element. Also, reset `activeIndex` upon closing the floating element.\n index(() => {\n if (!enabled) return;\n if (open && elements.floating) {\n if (focusItemOnOpenRef.current && selectedIndex != null) {\n // Regardless of the pointer modality, we want to ensure the selected\n // item comes into view when the floating element is opened.\n forceScrollIntoViewRef.current = true;\n indexRef.current = selectedIndex;\n onNavigate(selectedIndex);\n }\n } else if (previousMountedRef.current) {\n // Since the user can specify `onNavigate` conditionally\n // (onNavigate: open ? setActiveIndex : setSelectedIndex),\n // we store and call the previous function.\n indexRef.current = -1;\n previousOnNavigateRef.current(null);\n }\n }, [enabled, open, elements.floating, selectedIndex, onNavigate]);\n\n // Sync `activeIndex` to be the focused item while the floating element is\n // open.\n index(() => {\n if (!enabled) return;\n if (open && elements.floating) {\n if (activeIndex == null) {\n forceSyncFocus.current = false;\n if (selectedIndexRef.current != null) {\n return;\n }\n\n // Reset while the floating element was open (e.g. the list changed).\n if (previousMountedRef.current) {\n indexRef.current = -1;\n focusItem(listRef, indexRef);\n }\n\n // Initial sync.\n if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n let runs = 0;\n const waitForListPopulated = () => {\n if (listRef.current[0] == null) {\n // Avoid letting the browser paint if possible on the first try,\n // otherwise use rAF. Don't try more than twice, since something\n // is wrong otherwise.\n if (runs < 2) {\n const scheduler = runs ? requestAnimationFrame : queueMicrotask;\n scheduler(waitForListPopulated);\n }\n runs++;\n } else {\n indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinIndex(listRef, disabledIndicesRef.current) : getMaxIndex(listRef, disabledIndicesRef.current);\n keyRef.current = null;\n onNavigate(indexRef.current);\n }\n };\n waitForListPopulated();\n }\n } else if (!isIndexOutOfBounds(listRef, activeIndex)) {\n indexRef.current = activeIndex;\n focusItem(listRef, indexRef, forceScrollIntoViewRef.current);\n forceScrollIntoViewRef.current = false;\n }\n }\n }, [enabled, open, elements.floating, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, disabledIndicesRef]);\n\n // Ensure the parent floating element has focus when a nested child closes\n // to allow arrow key navigation to work after the pointer leaves the child.\n index(() => {\n var _nodes$find;\n if (!enabled || elements.floating || !tree || virtual || !previousMountedRef.current) {\n return;\n }\n const nodes = tree.nodesRef.current;\n const parent = (_nodes$find = nodes.find(node => node.id === parentId)) == null || (_nodes$find = _nodes$find.context) == null ? void 0 : _nodes$find.elements.floating;\n const activeEl = activeElement(getDocument(elements.floating));\n const treeContainsActiveEl = nodes.some(node => node.context && contains(node.context.elements.floating, activeEl));\n if (parent && !treeContainsActiveEl && isPointerModalityRef.current) {\n parent.focus({\n preventScroll: true\n });\n }\n }, [enabled, elements.floating, tree, parentId, virtual]);\n index(() => {\n if (!enabled) return;\n if (!tree) return;\n if (!virtual) return;\n if (parentId) return;\n function handleVirtualFocus(item) {\n setVirtualId(item.id);\n if (virtualItemRef) {\n virtualItemRef.current = item;\n }\n }\n tree.events.on('virtualfocus', handleVirtualFocus);\n return () => {\n tree.events.off('virtualfocus', handleVirtualFocus);\n };\n }, [enabled, tree, virtual, parentId, virtualItemRef]);\n index(() => {\n previousOnNavigateRef.current = onNavigate;\n previousMountedRef.current = !!elements.floating;\n });\n index(() => {\n if (!open) {\n keyRef.current = null;\n }\n }, [open]);\n index(() => {\n previousOpenRef.current = open;\n }, [open]);\n const hasActiveIndex = activeIndex != null;\n const item = React.useMemo(() => {\n function syncCurrentTarget(currentTarget) {\n if (!open) return;\n const index = listRef.current.indexOf(currentTarget);\n if (index !== -1) {\n onNavigate(index);\n }\n }\n const props = {\n onFocus(_ref) {\n let {\n currentTarget\n } = _ref;\n syncCurrentTarget(currentTarget);\n },\n onClick: _ref2 => {\n let {\n currentTarget\n } = _ref2;\n return currentTarget.focus({\n preventScroll: true\n });\n },\n // Safari\n ...(focusItemOnHover && {\n onMouseMove(_ref3) {\n let {\n currentTarget\n } = _ref3;\n syncCurrentTarget(currentTarget);\n },\n onPointerLeave(_ref4) {\n let {\n pointerType\n } = _ref4;\n if (!isPointerModalityRef.current || pointerType === 'touch') {\n return;\n }\n indexRef.current = -1;\n focusItem(listRef, indexRef);\n onNavigate(null);\n if (!virtual) {\n enqueueFocus(floatingFocusElementRef.current, {\n preventScroll: true\n });\n }\n }\n })\n };\n return props;\n }, [open, floatingFocusElementRef, focusItem, focusItemOnHover, listRef, onNavigate, virtual]);\n const commonOnKeyDown = useEffectEvent(event => {\n isPointerModalityRef.current = false;\n forceSyncFocus.current = true;\n\n // When composing a character, Chrome fires ArrowDown twice. Firefox/Safari\n // don't appear to suffer from this. `event.isComposing` is avoided due to\n // Safari not supporting it properly (although it's not needed in the first\n // place for Safari, just avoiding any possible issues).\n if (event.which === 229) {\n return;\n }\n\n // If the floating element is animating out, ignore navigation. Otherwise,\n // the `activeIndex` gets set to 0 despite not being open so the next time\n // the user ArrowDowns, the first item won't be focused.\n if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) {\n return;\n }\n if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl)) {\n stopEvent(event);\n onOpenChange(false, event.nativeEvent, 'list-navigation');\n if (isHTMLElement(elements.domReference)) {\n if (virtual) {\n tree == null || tree.events.emit('virtualfocus', elements.domReference);\n } else {\n elements.domReference.focus();\n }\n }\n return;\n }\n const currentIndex = indexRef.current;\n const minIndex = getMinIndex(listRef, disabledIndices);\n const maxIndex = getMaxIndex(listRef, disabledIndices);\n if (!typeableComboboxReference) {\n if (event.key === 'Home') {\n stopEvent(event);\n indexRef.current = minIndex;\n onNavigate(indexRef.current);\n }\n if (event.key === 'End') {\n stopEvent(event);\n indexRef.current = maxIndex;\n onNavigate(indexRef.current);\n }\n }\n\n // Grid navigation.\n if (cols > 1) {\n const sizes = itemSizes || Array.from({\n length: listRef.current.length\n }, () => ({\n width: 1,\n height: 1\n }));\n // To calculate movements on the grid, we use hypothetical cell indices\n // as if every item was 1x1, then convert back to real indices.\n const cellMap = buildCellMap(sizes, cols, dense);\n const minGridIndex = cellMap.findIndex(index => index != null && !isDisabled(listRef.current, index, disabledIndices));\n // last enabled index\n const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isDisabled(listRef.current, index, disabledIndices) ? cellIndex : foundIndex, -1);\n const index = cellMap[getGridNavigatedIndex({\n current: cellMap.map(itemIndex => itemIndex != null ? listRef.current[itemIndex] : null)\n }, {\n event,\n orientation,\n loop,\n rtl,\n cols,\n // treat undefined (empty grid spaces) as disabled indices so we\n // don't end up in them\n disabledIndices: getCellIndices([...(disabledIndices || listRef.current.map((_, index) => isDisabled(listRef.current, index) ? index : undefined)), undefined], cellMap),\n minIndex: minGridIndex,\n maxIndex: maxGridIndex,\n prevIndex: getCellIndexOfCorner(indexRef.current > maxIndex ? minIndex : indexRef.current, sizes, cellMap, cols,\n // use a corner matching the edge closest to the direction\n // we're moving in so we don't end up in the same item. Prefer\n // top/left over bottom/right.\n event.key === ARROW_DOWN ? 'bl' : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? 'tr' : 'tl'),\n stopEvent: true\n })];\n if (index != null) {\n indexRef.current = index;\n onNavigate(indexRef.current);\n }\n if (orientation === 'both') {\n return;\n }\n }\n if (isMainOrientationKey(event.key, orientation)) {\n stopEvent(event);\n\n // Reset the index if no item is focused.\n if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n onNavigate(indexRef.current);\n return;\n }\n if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n if (loop) {\n indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n });\n } else {\n indexRef.current = Math.min(maxIndex, findNonDisabledIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n }));\n }\n } else {\n if (loop) {\n indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n });\n } else {\n indexRef.current = Math.max(minIndex, findNonDisabledIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n }));\n }\n }\n if (isIndexOutOfBounds(listRef, indexRef.current)) {\n onNavigate(null);\n } else {\n onNavigate(indexRef.current);\n }\n }\n });\n const ariaActiveDescendantProp = React.useMemo(() => {\n return virtual && open && hasActiveIndex && {\n 'aria-activedescendant': virtualId || activeId\n };\n }, [virtual, open, hasActiveIndex, virtualId, activeId]);\n const floating = React.useMemo(() => {\n return {\n 'aria-orientation': orientation === 'both' ? undefined : orientation,\n ...(!isTypeableCombobox(elements.domReference) && ariaActiveDescendantProp),\n onKeyDown: commonOnKeyDown,\n onPointerMove() {\n isPointerModalityRef.current = true;\n }\n };\n }, [ariaActiveDescendantProp, commonOnKeyDown, elements.domReference, orientation]);\n const reference = React.useMemo(() => {\n function checkVirtualMouse(event) {\n if (focusItemOnOpen === 'auto' && isVirtualClick(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n function checkVirtualPointer(event) {\n // `pointerdown` fires first, reset the state then perform the checks.\n focusItemOnOpenRef.current = focusItemOnOpen;\n if (focusItemOnOpen === 'auto' && isVirtualPointerEvent(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n return {\n ...ariaActiveDescendantProp,\n onKeyDown(event) {\n isPointerModalityRef.current = false;\n const isArrowKey = event.key.startsWith('Arrow');\n const isHomeOrEndKey = ['Home', 'End'].includes(event.key);\n const isMoveKey = isArrowKey || isHomeOrEndKey;\n const isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n const isCrossCloseKey = isCrossOrientationCloseKey(event.key, orientation, rtl);\n const isMainKey = isMainOrientationKey(event.key, orientation);\n const isNavigationKey = (nested ? isCrossOpenKey : isMainKey) || event.key === 'Enter' || event.key.trim() === '';\n if (virtual && open) {\n const rootNode = tree == null ? void 0 : tree.nodesRef.current.find(node => node.parentId == null);\n const deepestNode = tree && rootNode ? getDeepestNode(tree.nodesRef.current, rootNode.id) : null;\n if (isMoveKey && deepestNode && virtualItemRef) {\n const eventObject = new KeyboardEvent('keydown', {\n key: event.key,\n bubbles: true\n });\n if (isCrossOpenKey || isCrossCloseKey) {\n var _deepestNode$context, _deepestNode$context2;\n const isCurrentTarget = ((_deepestNode$context = deepestNode.context) == null ? void 0 : _deepestNode$context.elements.domReference) === event.currentTarget;\n const dispatchItem = isCrossCloseKey && !isCurrentTarget ? (_deepestNode$context2 = deepestNode.context) == null ? void 0 : _deepestNode$context2.elements.domReference : isCrossOpenKey ? listRef.current.find(item => (item == null ? void 0 : item.id) === activeId) : null;\n if (dispatchItem) {\n stopEvent(event);\n dispatchItem.dispatchEvent(eventObject);\n setVirtualId(undefined);\n }\n }\n if ((isMainKey || isHomeOrEndKey) && deepestNode.context) {\n if (deepestNode.context.open && deepestNode.parentId && event.currentTarget !== deepestNode.context.elements.domReference) {\n var _deepestNode$context$;\n stopEvent(event);\n (_deepestNode$context$ = deepestNode.context.elements.domReference) == null || _deepestNode$context$.dispatchEvent(eventObject);\n return;\n }\n }\n }\n return commonOnKeyDown(event);\n }\n\n // If a floating element should not open on arrow key down, avoid\n // setting `activeIndex` while it's closed.\n if (!open && !openOnArrowKeyDown && isArrowKey) {\n return;\n }\n if (isNavigationKey) {\n keyRef.current = nested && isMainKey ? null : event.key;\n }\n if (nested) {\n if (isCrossOpenKey) {\n stopEvent(event);\n if (open) {\n indexRef.current = getMinIndex(listRef, disabledIndicesRef.current);\n onNavigate(indexRef.current);\n } else {\n onOpenChange(true, event.nativeEvent, 'list-navigation');\n }\n }\n return;\n }\n if (isMainKey) {\n if (selectedIndex != null) {\n indexRef.current = selectedIndex;\n }\n stopEvent(event);\n if (!open && openOnArrowKeyDown) {\n onOpenChange(true, event.nativeEvent, 'list-navigation');\n } else {\n commonOnKeyDown(event);\n }\n if (open) {\n onNavigate(indexRef.current);\n }\n }\n },\n onFocus() {\n if (open && !virtual) {\n onNavigate(null);\n }\n },\n onPointerDown: checkVirtualPointer,\n onMouseDown: checkVirtualMouse,\n onClick: checkVirtualMouse\n };\n }, [activeId, ariaActiveDescendantProp, commonOnKeyDown, disabledIndicesRef, focusItemOnOpen, listRef, nested, onNavigate, onOpenChange, open, openOnArrowKeyDown, orientation, rtl, selectedIndex, tree, virtual, virtualItemRef]);\n return React.useMemo(() => enabled ? {\n reference,\n floating,\n item\n } : {}, [enabled, reference, floating, item]);\n}\n\nconst componentRoleToAriaRoleMap = /*#__PURE__*/new Map([['select', 'listbox'], ['combobox', 'listbox'], ['label', false]]);\n\n/**\n * Adds base screen reader props to the reference and floating elements for a\n * given floating element `role`.\n * @see https://floating-ui.com/docs/useRole\n */\nfunction useRole(context, props) {\n var _componentRoleToAriaR;\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n floatingId\n } = context;\n const {\n enabled = true,\n role = 'dialog'\n } = props;\n const ariaRole = (_componentRoleToAriaR = componentRoleToAriaRoleMap.get(role)) != null ? _componentRoleToAriaR : role;\n const referenceId = useId();\n const parentId = useFloatingParentNodeId();\n const isNested = parentId != null;\n const reference = React.useMemo(() => {\n if (ariaRole === 'tooltip' || role === 'label') {\n return {\n [\"aria-\" + (role === 'label' ? 'labelledby' : 'describedby')]: open ? floatingId : undefined\n };\n }\n return {\n 'aria-expanded': open ? 'true' : 'false',\n 'aria-haspopup': ariaRole === 'alertdialog' ? 'dialog' : ariaRole,\n 'aria-controls': open ? floatingId : undefined,\n ...(ariaRole === 'listbox' && {\n role: 'combobox'\n }),\n ...(ariaRole === 'menu' && {\n id: referenceId\n }),\n ...(ariaRole === 'menu' && isNested && {\n role: 'menuitem'\n }),\n ...(role === 'select' && {\n 'aria-autocomplete': 'none'\n }),\n ...(role === 'combobox' && {\n 'aria-autocomplete': 'list'\n })\n };\n }, [ariaRole, floatingId, isNested, open, referenceId, role]);\n const floating = React.useMemo(() => {\n const floatingProps = {\n id: floatingId,\n ...(ariaRole && {\n role: ariaRole\n })\n };\n if (ariaRole === 'tooltip' || role === 'label') {\n return floatingProps;\n }\n return {\n ...floatingProps,\n ...(ariaRole === 'menu' && {\n 'aria-labelledby': referenceId\n })\n };\n }, [ariaRole, floatingId, referenceId, role]);\n const item = React.useCallback(_ref => {\n let {\n active,\n selected\n } = _ref;\n const commonProps = {\n role: 'option',\n ...(active && {\n id: floatingId + \"-option\"\n })\n };\n\n // For `menu`, we are unable to tell if the item is a `menuitemradio`\n // or `menuitemcheckbox`. For backwards-compatibility reasons, also\n // avoid defaulting to `menuitem` as it may overwrite custom role props.\n switch (role) {\n case 'select':\n return {\n ...commonProps,\n 'aria-selected': active && selected\n };\n case 'combobox':\n {\n return {\n ...commonProps,\n ...(active && {\n 'aria-selected': true\n })\n };\n }\n }\n return {};\n }, [floatingId, role]);\n return React.useMemo(() => enabled ? {\n reference,\n floating,\n item\n } : {}, [enabled, reference, floating, item]);\n}\n\n// Converts a JS style key like `backgroundColor` to a CSS transition-property\n// like `background-color`.\nconst camelCaseToKebabCase = str => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\nfunction execWithArgsOrReturn(valueOrFn, args) {\n return typeof valueOrFn === 'function' ? valueOrFn(args) : valueOrFn;\n}\nfunction useDelayUnmount(open, durationMs) {\n const [isMounted, setIsMounted] = React.useState(open);\n if (open && !isMounted) {\n setIsMounted(true);\n }\n React.useEffect(() => {\n if (!open && isMounted) {\n const timeout = setTimeout(() => setIsMounted(false), durationMs);\n return () => clearTimeout(timeout);\n }\n }, [open, isMounted, durationMs]);\n return isMounted;\n}\n/**\n * Provides a status string to apply CSS transitions to a floating element,\n * correctly handling placement-aware transitions.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstatus\n */\nfunction useTransitionStatus(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n elements: {\n floating\n }\n } = context;\n const {\n duration = 250\n } = props;\n const isNumberDuration = typeof duration === 'number';\n const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n const [status, setStatus] = React.useState('unmounted');\n const isMounted = useDelayUnmount(open, closeDuration);\n if (!isMounted && status === 'close') {\n setStatus('unmounted');\n }\n index(() => {\n if (!floating) return;\n if (open) {\n setStatus('initial');\n const frame = requestAnimationFrame(() => {\n setStatus('open');\n });\n return () => {\n cancelAnimationFrame(frame);\n };\n }\n setStatus('close');\n }, [open, floating]);\n return {\n isMounted,\n status\n };\n}\n/**\n * Provides styles to apply CSS transitions to a floating element, correctly\n * handling placement-aware transitions. Wrapper around `useTransitionStatus`.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstyles\n */\nfunction useTransitionStyles(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n initial: unstable_initial = {\n opacity: 0\n },\n open: unstable_open,\n close: unstable_close,\n common: unstable_common,\n duration = 250\n } = props;\n const placement = context.placement;\n const side = placement.split('-')[0];\n const fnArgs = React.useMemo(() => ({\n side,\n placement\n }), [side, placement]);\n const isNumberDuration = typeof duration === 'number';\n const openDuration = (isNumberDuration ? duration : duration.open) || 0;\n const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n const [styles, setStyles] = React.useState(() => ({\n ...execWithArgsOrReturn(unstable_common, fnArgs),\n ...execWithArgsOrReturn(unstable_initial, fnArgs)\n }));\n const {\n isMounted,\n status\n } = useTransitionStatus(context, {\n duration\n });\n const initialRef = useLatestRef(unstable_initial);\n const openRef = useLatestRef(unstable_open);\n const closeRef = useLatestRef(unstable_close);\n const commonRef = useLatestRef(unstable_common);\n index(() => {\n const initialStyles = execWithArgsOrReturn(initialRef.current, fnArgs);\n const closeStyles = execWithArgsOrReturn(closeRef.current, fnArgs);\n const commonStyles = execWithArgsOrReturn(commonRef.current, fnArgs);\n const openStyles = execWithArgsOrReturn(openRef.current, fnArgs) || Object.keys(initialStyles).reduce((acc, key) => {\n acc[key] = '';\n return acc;\n }, {});\n if (status === 'initial') {\n setStyles(styles => ({\n transitionProperty: styles.transitionProperty,\n ...commonStyles,\n ...initialStyles\n }));\n }\n if (status === 'open') {\n setStyles({\n transitionProperty: Object.keys(openStyles).map(camelCaseToKebabCase).join(','),\n transitionDuration: openDuration + \"ms\",\n ...commonStyles,\n ...openStyles\n });\n }\n if (status === 'close') {\n const styles = closeStyles || initialStyles;\n setStyles({\n transitionProperty: Object.keys(styles).map(camelCaseToKebabCase).join(','),\n transitionDuration: closeDuration + \"ms\",\n ...commonStyles,\n ...styles\n });\n }\n }, [closeDuration, closeRef, initialRef, openRef, commonRef, openDuration, status, fnArgs]);\n return {\n isMounted,\n styles\n };\n}\n\n/**\n * Provides a matching callback that can be used to focus an item as the user\n * types, often used in tandem with `useListNavigation()`.\n * @see https://floating-ui.com/docs/useTypeahead\n */\nfunction useTypeahead(context, props) {\n var _ref;\n const {\n open,\n dataRef\n } = context;\n const {\n listRef,\n activeIndex,\n onMatch: unstable_onMatch,\n onTypingChange: unstable_onTypingChange,\n enabled = true,\n findMatch = null,\n resetMs = 750,\n ignoreKeys = [],\n selectedIndex = null\n } = props;\n const timeoutIdRef = React.useRef();\n const stringRef = React.useRef('');\n const prevIndexRef = React.useRef((_ref = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref : -1);\n const matchIndexRef = React.useRef(null);\n const onMatch = useEffectEvent(unstable_onMatch);\n const onTypingChange = useEffectEvent(unstable_onTypingChange);\n const findMatchRef = useLatestRef(findMatch);\n const ignoreKeysRef = useLatestRef(ignoreKeys);\n index(() => {\n if (open) {\n clearTimeout(timeoutIdRef.current);\n matchIndexRef.current = null;\n stringRef.current = '';\n }\n }, [open]);\n index(() => {\n // Sync arrow key navigation but not typeahead navigation.\n if (open && stringRef.current === '') {\n var _ref2;\n prevIndexRef.current = (_ref2 = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref2 : -1;\n }\n }, [open, selectedIndex, activeIndex]);\n const setTypingChange = useEffectEvent(value => {\n if (value) {\n if (!dataRef.current.typing) {\n dataRef.current.typing = value;\n onTypingChange(value);\n }\n } else {\n if (dataRef.current.typing) {\n dataRef.current.typing = value;\n onTypingChange(value);\n }\n }\n });\n const onKeyDown = useEffectEvent(event => {\n function getMatchingIndex(list, orderedList, string) {\n const str = findMatchRef.current ? findMatchRef.current(orderedList, string) : orderedList.find(text => (text == null ? void 0 : text.toLocaleLowerCase().indexOf(string.toLocaleLowerCase())) === 0);\n return str ? list.indexOf(str) : -1;\n }\n const listContent = listRef.current;\n if (stringRef.current.length > 0 && stringRef.current[0] !== ' ') {\n if (getMatchingIndex(listContent, listContent, stringRef.current) === -1) {\n setTypingChange(false);\n } else if (event.key === ' ') {\n stopEvent(event);\n }\n }\n if (listContent == null || ignoreKeysRef.current.includes(event.key) ||\n // Character key.\n event.key.length !== 1 ||\n // Modifier key.\n event.ctrlKey || event.metaKey || event.altKey) {\n return;\n }\n if (open && event.key !== ' ') {\n stopEvent(event);\n setTypingChange(true);\n }\n\n // Bail out if the list contains a word like \"llama\" or \"aaron\". TODO:\n // allow it in this case, too.\n const allowRapidSuccessionOfFirstLetter = listContent.every(text => {\n var _text$, _text$2;\n return text ? ((_text$ = text[0]) == null ? void 0 : _text$.toLocaleLowerCase()) !== ((_text$2 = text[1]) == null ? void 0 : _text$2.toLocaleLowerCase()) : true;\n });\n\n // Allows the user to cycle through items that start with the same letter\n // in rapid succession.\n if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {\n stringRef.current = '';\n prevIndexRef.current = matchIndexRef.current;\n }\n stringRef.current += event.key;\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = setTimeout(() => {\n stringRef.current = '';\n prevIndexRef.current = matchIndexRef.current;\n setTypingChange(false);\n }, resetMs);\n const prevIndex = prevIndexRef.current;\n const index = getMatchingIndex(listContent, [...listContent.slice((prevIndex || 0) + 1), ...listContent.slice(0, (prevIndex || 0) + 1)], stringRef.current);\n if (index !== -1) {\n onMatch(index);\n matchIndexRef.current = index;\n } else if (event.key !== ' ') {\n stringRef.current = '';\n setTypingChange(false);\n }\n });\n const reference = React.useMemo(() => ({\n onKeyDown\n }), [onKeyDown]);\n const floating = React.useMemo(() => {\n return {\n onKeyDown,\n onKeyUp(event) {\n if (event.key === ' ') {\n setTypingChange(false);\n }\n }\n };\n }, [onKeyDown, setTypingChange]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nfunction getArgsWithCustomFloatingHeight(state, height) {\n return {\n ...state,\n rects: {\n ...state.rects,\n floating: {\n ...state.rects.floating,\n height\n }\n }\n };\n}\n/**\n * Positions the floating element such that an inner element inside of it is\n * anchored to the reference element.\n * @see https://floating-ui.com/docs/inner\n */\nconst inner = props => ({\n name: 'inner',\n options: props,\n async fn(state) {\n const {\n listRef,\n overflowRef,\n onFallbackChange,\n offset: innerOffset = 0,\n index = 0,\n minItemsVisible = 4,\n referenceOverflowThreshold = 0,\n scrollRef,\n ...detectOverflowOptions\n } = evaluate(props, state);\n const {\n rects,\n elements: {\n floating\n }\n } = state;\n const item = listRef.current[index];\n const scrollEl = (scrollRef == null ? void 0 : scrollRef.current) || floating;\n\n // Valid combinations:\n // 1. Floating element is the scrollRef and has a border (default)\n // 2. Floating element is not the scrollRef, floating element has a border\n // 3. Floating element is not the scrollRef, scrollRef has a border\n // Floating > {...getFloatingProps()} wrapper > scrollRef > items is not\n // allowed as VoiceOver doesn't work.\n const clientTop = floating.clientTop || scrollEl.clientTop;\n const floatingIsBordered = floating.clientTop !== 0;\n const scrollElIsBordered = scrollEl.clientTop !== 0;\n const floatingIsScrollEl = floating === scrollEl;\n if (process.env.NODE_ENV !== \"production\") {\n if (!state.placement.startsWith('bottom')) {\n warn('`placement` side must be \"bottom\" when using the `inner`', 'middleware.');\n }\n }\n if (!item) {\n return {};\n }\n const nextArgs = {\n ...state,\n ...(await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state))\n };\n const overflow = await detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n const refOverflow = await detectOverflow(nextArgs, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const diffY = max(0, overflow.top);\n const nextY = nextArgs.y + diffY;\n const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n const rounder = isScrollable ? v => v : round;\n const maxHeight = rounder(max(0, scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0) - diffY - max(0, overflow.bottom)));\n scrollEl.style.maxHeight = maxHeight + \"px\";\n scrollEl.scrollTop = diffY;\n\n // There is not enough space, fallback to standard anchored positioning\n if (onFallbackChange) {\n const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * min(minItemsVisible, listRef.current.length) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n ReactDOM.flushSync(() => onFallbackChange(shouldFallback));\n }\n if (overflowRef) {\n overflowRef.current = await detectOverflow(getArgsWithCustomFloatingHeight({\n ...nextArgs,\n y: nextY\n }, scrollEl.offsetHeight + clientTop + floating.clientTop), detectOverflowOptions);\n }\n return {\n y: nextY\n };\n }\n});\n/**\n * Changes the `inner` middleware's `offset` upon a `wheel` event to\n * expand the floating element's height, revealing more list items.\n * @see https://floating-ui.com/docs/inner\n */\nfunction useInnerOffset(context, props) {\n const {\n open,\n elements\n } = context;\n const {\n enabled = true,\n overflowRef,\n scrollRef,\n onChange: unstable_onChange\n } = props;\n const onChange = useEffectEvent(unstable_onChange);\n const controlledScrollingRef = React.useRef(false);\n const prevScrollTopRef = React.useRef(null);\n const initialOverflowRef = React.useRef(null);\n React.useEffect(() => {\n if (!enabled) return;\n function onWheel(e) {\n if (e.ctrlKey || !el || overflowRef.current == null) {\n return;\n }\n const dY = e.deltaY;\n const isAtTop = overflowRef.current.top >= -0.5;\n const isAtBottom = overflowRef.current.bottom >= -0.5;\n const remainingScroll = el.scrollHeight - el.clientHeight;\n const sign = dY < 0 ? -1 : 1;\n const method = dY < 0 ? 'max' : 'min';\n if (el.scrollHeight <= el.clientHeight) {\n return;\n }\n if (!isAtTop && dY > 0 || !isAtBottom && dY < 0) {\n e.preventDefault();\n ReactDOM.flushSync(() => {\n onChange(d => d + Math[method](dY, remainingScroll * sign));\n });\n } else if (/firefox/i.test(getUserAgent())) {\n // Needed to propagate scrolling during momentum scrolling phase once\n // it gets limited by the boundary. UX improvement, not critical.\n el.scrollTop += dY;\n }\n }\n const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n if (open && el) {\n el.addEventListener('wheel', onWheel);\n\n // Wait for the position to be ready.\n requestAnimationFrame(() => {\n prevScrollTopRef.current = el.scrollTop;\n if (overflowRef.current != null) {\n initialOverflowRef.current = {\n ...overflowRef.current\n };\n }\n });\n return () => {\n prevScrollTopRef.current = null;\n initialOverflowRef.current = null;\n el.removeEventListener('wheel', onWheel);\n };\n }\n }, [enabled, open, elements.floating, overflowRef, scrollRef, onChange]);\n const floating = React.useMemo(() => ({\n onKeyDown() {\n controlledScrollingRef.current = true;\n },\n onWheel() {\n controlledScrollingRef.current = false;\n },\n onPointerMove() {\n controlledScrollingRef.current = false;\n },\n onScroll() {\n const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n if (!overflowRef.current || !el || !controlledScrollingRef.current) {\n return;\n }\n if (prevScrollTopRef.current !== null) {\n const scrollDiff = el.scrollTop - prevScrollTopRef.current;\n if (overflowRef.current.bottom < -0.5 && scrollDiff < -1 || overflowRef.current.top < -0.5 && scrollDiff > 1) {\n ReactDOM.flushSync(() => onChange(d => d + scrollDiff));\n }\n }\n\n // [Firefox] Wait for the height change to have been applied.\n requestAnimationFrame(() => {\n prevScrollTopRef.current = el.scrollTop;\n });\n }\n }), [elements.floating, onChange, overflowRef, scrollRef]);\n return React.useMemo(() => enabled ? {\n floating\n } : {}, [enabled, floating]);\n}\n\nfunction isPointInPolygon(point, polygon) {\n const [x, y] = point;\n let isInside = false;\n const length = polygon.length;\n for (let i = 0, j = length - 1; i < length; j = i++) {\n const [xi, yi] = polygon[i] || [0, 0];\n const [xj, yj] = polygon[j] || [0, 0];\n const intersect = yi >= y !== yj >= y && x <= (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) {\n isInside = !isInside;\n }\n }\n return isInside;\n}\nfunction isInside(point, rect) {\n return point[0] >= rect.x && point[0] <= rect.x + rect.width && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n}\n/**\n * Generates a safe polygon area that the user can traverse without closing the\n * floating element once leaving the reference element.\n * @see https://floating-ui.com/docs/useHover#safepolygon\n */\nfunction safePolygon(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n buffer = 0.5,\n blockPointerEvents = false,\n requireIntent = true\n } = options;\n let timeoutId;\n let hasLanded = false;\n let lastX = null;\n let lastY = null;\n let lastCursorTime = performance.now();\n function getCursorSpeed(x, y) {\n const currentTime = performance.now();\n const elapsedTime = currentTime - lastCursorTime;\n if (lastX === null || lastY === null || elapsedTime === 0) {\n lastX = x;\n lastY = y;\n lastCursorTime = currentTime;\n return null;\n }\n const deltaX = x - lastX;\n const deltaY = y - lastY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const speed = distance / elapsedTime; // px / ms\n\n lastX = x;\n lastY = y;\n lastCursorTime = currentTime;\n return speed;\n }\n const fn = _ref => {\n let {\n x,\n y,\n placement,\n elements,\n onClose,\n nodeId,\n tree\n } = _ref;\n return function onMouseMove(event) {\n function close() {\n clearTimeout(timeoutId);\n onClose();\n }\n clearTimeout(timeoutId);\n if (!elements.domReference || !elements.floating || placement == null || x == null || y == null) {\n return;\n }\n const {\n clientX,\n clientY\n } = event;\n const clientPoint = [clientX, clientY];\n const target = getTarget(event);\n const isLeave = event.type === 'mouseleave';\n const isOverFloatingEl = contains(elements.floating, target);\n const isOverReferenceEl = contains(elements.domReference, target);\n const refRect = elements.domReference.getBoundingClientRect();\n const rect = elements.floating.getBoundingClientRect();\n const side = placement.split('-')[0];\n const cursorLeaveFromRight = x > rect.right - rect.width / 2;\n const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;\n const isOverReferenceRect = isInside(clientPoint, refRect);\n const isFloatingWider = rect.width > refRect.width;\n const isFloatingTaller = rect.height > refRect.height;\n const left = (isFloatingWider ? refRect : rect).left;\n const right = (isFloatingWider ? refRect : rect).right;\n const top = (isFloatingTaller ? refRect : rect).top;\n const bottom = (isFloatingTaller ? refRect : rect).bottom;\n if (isOverFloatingEl) {\n hasLanded = true;\n if (!isLeave) {\n return;\n }\n }\n if (isOverReferenceEl) {\n hasLanded = false;\n }\n if (isOverReferenceEl && !isLeave) {\n hasLanded = true;\n return;\n }\n\n // Prevent overlapping floating element from being stuck in an open-close\n // loop: https://github.com/floating-ui/floating-ui/issues/1910\n if (isLeave && isElement(event.relatedTarget) && contains(elements.floating, event.relatedTarget)) {\n return;\n }\n\n // If any nested child is open, abort.\n if (tree && getChildren(tree.nodesRef.current, nodeId).some(_ref2 => {\n let {\n context\n } = _ref2;\n return context == null ? void 0 : context.open;\n })) {\n return;\n }\n\n // If the pointer is leaving from the opposite side, the \"buffer\" logic\n // creates a point where the floating element remains open, but should be\n // ignored.\n // A constant of 1 handles floating point rounding errors.\n if (side === 'top' && y >= refRect.bottom - 1 || side === 'bottom' && y <= refRect.top + 1 || side === 'left' && x >= refRect.right - 1 || side === 'right' && x <= refRect.left + 1) {\n return close();\n }\n\n // Ignore when the cursor is within the rectangular trough between the\n // two elements. Since the triangle is created from the cursor point,\n // which can start beyond the ref element's edge, traversing back and\n // forth from the ref to the floating element can cause it to close. This\n // ensures it always remains open in that case.\n let rectPoly = [];\n switch (side) {\n case 'top':\n rectPoly = [[left, refRect.top + 1], [left, rect.bottom - 1], [right, rect.bottom - 1], [right, refRect.top + 1]];\n break;\n case 'bottom':\n rectPoly = [[left, rect.top + 1], [left, refRect.bottom - 1], [right, refRect.bottom - 1], [right, rect.top + 1]];\n break;\n case 'left':\n rectPoly = [[rect.right - 1, bottom], [rect.right - 1, top], [refRect.left + 1, top], [refRect.left + 1, bottom]];\n break;\n case 'right':\n rectPoly = [[refRect.right - 1, bottom], [refRect.right - 1, top], [rect.left + 1, top], [rect.left + 1, bottom]];\n break;\n }\n function getPolygon(_ref3) {\n let [x, y] = _ref3;\n switch (side) {\n case 'top':\n {\n const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.bottom - buffer : isFloatingWider ? rect.bottom - buffer : rect.top], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.bottom - buffer : rect.top : rect.bottom - buffer]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n case 'bottom':\n {\n const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.top + buffer : isFloatingWider ? rect.top + buffer : rect.bottom], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.top + buffer : rect.bottom : rect.top + buffer]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n case 'left':\n {\n const cursorPointOne = [x + buffer + 1, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const cursorPointTwo = [x + buffer + 1, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const commonPoints = [[cursorLeaveFromBottom ? rect.right - buffer : isFloatingTaller ? rect.right - buffer : rect.left, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.right - buffer : rect.left : rect.right - buffer, rect.bottom]];\n return [...commonPoints, cursorPointOne, cursorPointTwo];\n }\n case 'right':\n {\n const cursorPointOne = [x - buffer, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const cursorPointTwo = [x - buffer, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const commonPoints = [[cursorLeaveFromBottom ? rect.left + buffer : isFloatingTaller ? rect.left + buffer : rect.right, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.left + buffer : rect.right : rect.left + buffer, rect.bottom]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n }\n }\n if (isPointInPolygon([clientX, clientY], rectPoly)) {\n return;\n }\n if (hasLanded && !isOverReferenceRect) {\n return close();\n }\n if (!isLeave && requireIntent) {\n const cursorSpeed = getCursorSpeed(event.clientX, event.clientY);\n const cursorSpeedThreshold = 0.1;\n if (cursorSpeed !== null && cursorSpeed < cursorSpeedThreshold) {\n return close();\n }\n }\n if (!isPointInPolygon([clientX, clientY], getPolygon([x, y]))) {\n close();\n } else if (!hasLanded && requireIntent) {\n timeoutId = window.setTimeout(close, 40);\n }\n };\n };\n fn.__options = {\n blockPointerEvents\n };\n return fn;\n}\n\nexport { Composite, CompositeItem, FloatingArrow, FloatingDelayGroup, FloatingFocusManager, FloatingList, FloatingNode, FloatingOverlay, FloatingPortal, FloatingTree, inner, safePolygon, useClick, useClientPoint, useDelayGroup, useDelayGroupContext, useDismiss, useFloating, useFloatingNodeId, useFloatingParentNodeId, useFloatingPortalNode, useFloatingRootContext, useFloatingTree, useFocus, useHover, useId, useInnerOffset, useInteractions, useListItem, useListNavigation, useMergeRefs, useRole, useTransitionStatus, useTransitionStyles, useTypeahead };\n"],"names":["sides","min","Math","max","round","floor","createCoords","v","x","y","oppositeSideMap","left","right","bottom","top","oppositeAlignmentMap","start","end","clamp","value","evaluate","param","getSide","placement","split","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","includes","getAlignmentAxis","getOppositeAlignmentPlacement","replace","alignment","getOppositePlacement","side","getPaddingObject","padding","expandPaddingObject","rectToClientRect","rect","width","height","computeCoordsFromPlacement","_ref","rtl","reference","floating","sideAxis","alignmentAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","async","detectOverflow","state","options","_await$platform$isEle","platform","rects","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","getSideOffsets","overflow","isAnySideFullyClipped","some","hasWindow","window","getNodeName","node","isNode","nodeName","toLowerCase","getWindow","_node$ownerDocument","ownerDocument","defaultView","document","documentElement","Node","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","test","isTableElement","isTopLayer","selector","matches","e","isContainingBlock","elementOrCss","webkit","isWebKit","css","containerType","backdropFilter","filter","willChange","contain","CSS","supports","isLastTraversableNode","getNodeScroll","scrollLeft","scrollTop","scrollX","scrollY","getParentNode","result","assignedSlot","parentNode","host","getNearestOverflowAncestor","body","getOverflowAncestors","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","parent","Object","getPrototypeOf","getFrameElement","concat","visualViewport","getCssDimensions","parseFloat","hasOffset","offsetWidth","offsetHeight","shouldFallback","$","unwrapElement","domElement","getBoundingClientRect","Number","isFinite","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","topLayerSelectors","getWindowScrollBarX","getClientRectFromClippingAncestor","clippingAncestor","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scroll","scrollWidth","scrollHeight","direction","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","position","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","isStaticPositioned","getTrueOffsetParent","polyfill","svgOffsetParent","currentNode","getContainingBlock","topLayer","clippingAncestors","cache","cachedResult","get","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","set","getClippingElementAncestors","this","_c","firstClippingAncestor","clippingRect","reduce","accRect","getElementRects","data","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","Array","from","isRTL","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","ResizeObserver","layoutShift","IntersectionObserver","animationFrame","referenceEl","ancestors","forEach","addEventListener","passive","cleanupIo","onMove","timeoutId","io","root","cleanup","_io","clearTimeout","disconnect","refresh","skip","threshold","rootMargin","isFirstUpdate","handleObserve","entries","ratio","intersectionRatio","setTimeout","observe","observeMove","frameId","reobserveFrame","resizeObserver","firstEntry","target","unobserve","cancelAnimationFrame","requestAnimationFrame","_resizeObserver","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","removeEventListener","offset","name","fn","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","convertValueToCoords","arrow","alignmentOffset","shift","checkMainAxis","checkCrossAxis","limiter","detectOverflowOptions","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","enabled","flip","_middlewareData$flip","initialPlacement","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","initialSideAxis","isBasePlacement","oppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","push","isStart","lr","rl","tb","bt","getSideList","map","getOppositeAxisPlacements","placements","overflows","overflowsData","length","mainAlignmentSide","getAlignmentSides","every","_middlewareData$flip2","_overflowsData$filter","nextIndex","index","nextPlacement","reset","resetPlacement","d","sort","a","b","_overflowsData$filter2","currentSideAxis","acc","size","_state$middlewareData","_state$middlewareData2","apply","isYAxis","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hide","referenceHiddenOffsets","referenceHidden","escapedOffsets","escaped","arrowDimensions","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","centerOffset","limitShift","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse2","isOriginSide","computePosition","Map","mergedOptions","platformWithCache","config","middleware","validMiddleware","Boolean","statefulPlacement","resetCount","i","nextX","nextY","computePosition$1","useLayoutEffect","useEffect","deepEqual","toString","keys","isArray","hasOwnProperty","call","key","$$typeof","getDPR","devicePixelRatio","roundByDPR","dpr","useLatestRef","ref","React.useRef","current","useFloating","externalReference","externalFloating","transform","whileElementsMounted","open","setData","React.useState","isPositioned","latestMiddleware","setLatestMiddleware","useState","_reference","_setReference","_floating","_setFloating","setReference","React.useCallback","useCallback","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","then","fullData","isMountedRef","ReactDOM.flushSync","refs","React.useMemo","floatingStyles","initialStyles","useMemo","arrow$1","arrow$2","deps","offset$1","shift$1","limitShift$1","flip$1","size$1","hide$1","SafeReact","React","useSafeInsertionEffect","useInsertionEffect","serverHandoffComplete","count","genId","random","slice","useId","id","setId","React.useEffect","FloatingNodeContext","React.createContext","FloatingTreeContext","useFloatingParentNodeId","_React$useContext","React.useContext","useContext","useFloatingRootContext","onOpenChange","onOpenChangeProp","elementsProp","floatingId","events","emit","event","_map$get","handler","on","listener","off","_map$get2","l","createPubSub","nested","positionReference","setPositionReference","callback","_len","arguments","args","_key","useEffectEvent","reason","openEvent","domReference","nodeId","internalRootContext","rootContext","computedElements","_domReference","setDomReference","_setPositionReference","domReferenceRef","tree","useFloating$1","computedPositionReference","context","floatingContext","nodesRef","find"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}