{"version":3,"sources":["../../registry/default/ui/tooltip.tsx","../../../../node_modules/.pnpm/@babel+runtime@7.22.3/node_modules/@babel/runtime/helpers/esm/extends.js","../../../../node_modules/.pnpm/@radix-ui+primitive@1.0.1/node_modules/@radix-ui/primitive/dist/packages/core/primitive/src/primitive.tsx","../../../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.0.1_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-compose-refs/dist/packages/react/compose-refs/src/composeRefs.tsx","../../../../node_modules/.pnpm/@radix-ui+react-context@1.0.1_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-context/dist/packages/react/context/src/createContext.tsx","../../../../node_modules/.pnpm/@babel+runtime@7.22.6/node_modules/@babel/runtime/helpers/esm/extends.js","../../../../node_modules/.pnpm/@radix-ui+react-slot@1.0.2_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-slot/dist/packages/react/slot/src/Slot.tsx","../../../../node_modules/.pnpm/@radix-ui+react-primitive@1.0.3_@types+react-dom@18.2.22_@types+react@18.2.65_react-dom@18.2._c26rkpxnhr3o57o2cowwo23hui/node_modules/@radix-ui/react-primitive/dist/packages/react/primitive/src/Primitive.tsx","../../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.0.1_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-use-callback-ref/dist/packages/react/use-callback-ref/src/useCallbackRef.tsx","../../../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.0.3_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-use-escape-keydown/dist/packages/react/use-escape-keydown/src/useEscapeKeydown.tsx","../../../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.0.4_@types+react-dom@18.2.22_@types+react@18.2.65_react-d_4h2vdlgmnxxivuzbe2ablhncyi/node_modules/@radix-ui/react-dismissable-layer/dist/packages/react/dismissable-layer/src/DismissableLayer.tsx","../../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.0.1_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-use-layout-effect/dist/packages/react/use-layout-effect/src/useLayoutEffect.tsx","../../../../node_modules/.pnpm/@radix-ui+react-id@1.0.1_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-id/dist/packages/react/id/src/id.tsx","../../../../node_modules/.pnpm/@floating-ui+core@1.2.6/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../node_modules/.pnpm/@floating-ui+dom@1.2.9/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../../node_modules/.pnpm/@floating-ui+react-dom@2.0.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js","../../../../node_modules/.pnpm/@radix-ui+react-use-size@1.0.1_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-use-size/dist/packages/react/use-size/src/useSize.tsx","../../../../node_modules/.pnpm/@radix-ui+react-popper@1.1.2_@types+react-dom@18.2.22_@types+react@18.2.65_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-popper/dist/packages/react/popper/src/Popper.tsx","../../../../node_modules/.pnpm/@radix-ui+react-presence@1.0.1_@types+react-dom@18.2.22_@types+react@18.2.65_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-presence/dist/packages/react/presence/src/useStateMachine.tsx","../../../../node_modules/.pnpm/@radix-ui+react-presence@1.0.1_@types+react-dom@18.2.22_@types+react@18.2.65_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-presence/dist/packages/react/presence/src/Presence.tsx","../../../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.0.1_@types+react@18.2.65_react@18.2.0/node_modules/@radix-ui/react-use-controllable-state/dist/packages/react/use-controllable-state/src/useControllableState.tsx","../../../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.0.3_@types+react-dom@18.2.22_@types+react@18.2.65_react-dom_uqjm6t2srr5hmnvmy7azxydav4/node_modules/@radix-ui/react-visually-hidden/dist/packages/react/visually-hidden/src/VisuallyHidden.tsx","../../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.0.6_@types+react-dom@18.2.22_@types+react@18.2.65_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-tooltip/dist/packages/react/tooltip/src/Tooltip.tsx","../../lib/utils.ts"],"names":["tooltip_exports","__export","Tooltip","TooltipContent","TooltipProvider","TooltipTrigger","__toCommonJS","React","_extends","target","i","source","key","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","event","defaultPrevented","setRef","ref","value","current","composeRefs","refs","node","forEach","useComposedRefs","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext","rootComponentName","defaultContext","BaseContext","index","length","Provider","props","scope","children","context","Context","Object","values","$3bkAK$createElement","useContext","consumerName","undefined","Error","displayName","createScope","scopeContexts","map","contexts","composeContextScopes","scopes","baseScope","scopeHooks","useScope","overrideScopes","nextScopes","reduce","currentScope","Slot","forwardedRef","slotProps","childrenArray","toArray","slottable","find","isSlottable","newElement","newChildren","child","count","only","$9IrjX$createElement","$5e63c961fc1ce211$var$SlotClone","SlotClone","mergeProps","Slottable","$9IrjX$Fragment","type","childProps","overrideProps","propName","slotPropValue","childPropValue","test","args","filter","Boolean","join","NODES","Primitive","primitive","Node","asChild","primitiveProps","Comp","window","Symbol","for","$4q5Fq$createElement","dispatchDiscreteCustomEvent","ReactDOM","dispatchEvent","useCallbackRef","callback","callbackRef","_callbackRef$current","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","globalThis","document","onEscapeKeyDown","handleKeyDown","addEventListener","removeEventListener","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","layers","Set","layersWithOutsidePointerEventsDisabled","branches","DismissableLayer","_node$ownerDocument","disableOutsidePointerEvents","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","force","composedRefs","Array","from","highestLayerWithOutsidePointerEventsDisabled","slice","highestLayerWithOutsidePointerEventsDisabledIndex","indexOf","isBodyPointerEventsDisabled","size","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","some","branch","contains","focusOutside","useFocusOutside","preventDefault","body","style","pointerEvents","add","dispatchUpdate","delete","handleUpdate","$kqwpH$createElement","$8927f6f2acc4f386$export$250ffa63cdc0d034","onFocusCapture","onBlurCapture","onPointerDownCapture","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent","handleAndDispatchCustomEvent","eventDetail","discrete","originalEvent","pointerType","once","timerId","setTimeout","clearTimeout","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","CustomEvent","name","handler","detail","bubbles","cancelable","useLayoutEffect","useReactId","useId","deterministicId","id","setId","useState","reactId","String","getAlignment","placement","getLengthFromAxis","axis","getSide","getMainAxisFromPlacement","computeCoordsFromPlacement","_ref","rtl","reference","floating","commonX","commonY","mainAxis","commonAlign","side","isVertical","coords","computePosition","config","strategy","middleware","platform","validMiddleware","rects","x","y","statefulPlacement","middlewareData","resetCount","fn","nextX","nextY","data","reset","expandPaddingObject","padding","getSideObjectFromPadding","rectToClientRect","rect","detectOverflow","state","options","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","offsetParent","offsetScale","elementClientRect","min","max","within","min$1","max$1","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","offset","alignmentOffset","sides","oppositeSideMap","getOppositePlacement","getAlignmentSides","alignment","mainAlignmentSide","oppositeAlignmentMap","getOppositeAlignmentPlacement","getExpandedPlacements","oppositePlacement","getSideList","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","direction","list","flip","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","isBasePlacement","fallbackPlacements","placements","overflow","overflows","overflowsData","main","cross","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","d","a","b","_overflowsData$map$so","acc","getSideOffsets","isAnySideFullyClipped","hide","offsets","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","crossAxis","alignmentAxis","diffCoords","getCrossAxis","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse","_middlewareData$offse2","isOriginSide","apply","isXAxis","width","height","heightSide","widthSide","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","maximumClippingWidth","maximumClippingHeight","xMin","xMax","yMin","yMax","nextDimensions","getWindow","getComputedStyle$1","isNode","getNodeName","isHTMLElement","isElement","isShadowRoot","OwnElement","isOverflowElement","overflowX","overflowY","display","isTableElement","isContainingBlock","safari","isSafari","css","isLastTraversableNode","round","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","FALLBACK_SCALE","getScale","domElement","fallback","noOffsets","getVisualOffsets","isFixed","floatingOffsetParent","_win$visualViewport","_win$visualViewport2","win","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentIFrame","iframeScale","iframeRect","getDocumentElement","getNodeScroll","convertOffsetParentRelativeRectToViewportRelativeRect","isOffsetParentAnElement","documentElement","scroll","offsetRect","getWindowScrollBarX","getDocumentRect","html","getParentNode","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","scrollableAncestor","isBody","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","top","left","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","el","currentContainingBlockComputedStyle","elementIsFixed","currentNode","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getTrueOffsetParent","polyfill","getContainingBlock","getOffsetParent","getRectRelativeToOffsetParent","getOffsetParentFn","getDimensionsFn","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","animationFrame","ancestors","isVisualViewport","observer","frameId","prevRefRect","frameLoop","nextRefRect","_observer","mergedOptions","platformWithCache","import_react","isRef","deepEqual","keys","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","transform","whileElementsMounted","open","setData","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","referenceEl","floatingEl","dataRef","whileElementsMountedRef","platformRef","fullData","isMountedRef","floatingStyles","initialStyles","useSize","setSize","resizeObserver","ResizeObserver","entries","isArray","entry","borderSizeEntry","borderSize","observe","box","unobserve","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","$kY93V$createElement","$cf1ac5d9fe0e8206$var$PopperProvider","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","onAnchorChange","CONTENT_NAME","PopperContentProvider","useContentContext","PopperContent","_arrowSize$width","_arrowSize$height","_middlewareData$arrow","_middlewareData$arrow2","_middlewareData$arrow3","_middlewareData$trans","_middlewareData$trans2","_middlewareData$hide","sideOffset","align","alignOffset","arrowPadding","collisionBoundary","collisionPadding","collisionPaddingProp","sticky","hideWhenDetached","avoidCollisions","onPlaced","contentProps","content","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","right","bottom","hasExplicitBoundaries","isNotNull","isPositioned","anchorWidth","anchorHeight","contentStyle","setProperty","floatingUIarrow","transformOrigin","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","arrowX","arrowY","cannotCenterArrow","centerOffset","contentZIndex","setContentZIndex","getComputedStyle","zIndex","minWidth","dir","$cf1ac5d9fe0e8206$var$PopperContentProvider","animation","opacity","referenceHidden","_middlewareData$arrow4","_middlewareData$arrow5","_middlewareData$arrow6","_middlewareData$arrow7","_middlewareData$arrow8","isArrowHidden","noArrowAlign","start","end","arrowXCenter","arrowYCenter","split","Root","Anchor","Content","useStateMachine","initialState","machine","nextState","Presence","present","presence","usePresence","isPresent","stylesRef","prevPresentRef","prevAnimationNameRef","send","mounted","UNMOUNT","ANIMATION_OUT","unmountSuspended","MOUNT","ANIMATION_END","unmounted","currentAnimationName","getAnimationName","styles","wasPresent","prevAnimationName","handleAnimationEnd","isCurrentAnimation","includes","animationName","handleAnimationStart","useControllableState","prop","defaultProp","onChange","uncontrolledProp","setUncontrolledProp","useUncontrolledState","isControlled","handleChange","setValue","nextValue","uncontrolledState","prevValueRef","VisuallyHidden","$kVwnw$createElement","position","border","margin","clip","whiteSpace","wordWrap","createTooltipContext","createTooltipScope","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","__scopeTooltip","delayDuration","skipDelayDuration","disableHoverableContent","isOpenDelayed","setIsOpenDelayed","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","$8wepK$createElement","$a093c7e1ec25a057$var$TooltipProviderContextProvider","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","openProp","defaultOpen","onOpenChange","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentId","openTimerRef","wasOpenDelayedRef","setOpen","onOpen","onClose","stateAttribute","handleOpen","handleClose","handleDelayedOpen","$cf1ac5d9fe0e8206$export$be92b6f5f03c0fe9","$a093c7e1ec25a057$var$TooltipContextProvider","TRIGGER_NAME","triggerProps","onTriggerChange","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","$cf1ac5d9fe0e8206$export$b688253958b8dfe7","onPointerMove","onTriggerEnter","onPointerLeave","onTriggerLeave","onPointerDown","onFocus","onBlur","onClick","PORTAL_NAME","PortalProvider","usePortalContext","forceMount","portalContext","$921a889cee6df7e8$export$99c2b779aa4e8b8b","$a093c7e1ec25a057$var$TooltipContentImpl","$a093c7e1ec25a057$var$TooltipContentHoverable","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","currentTarget","exitPoint","clientX","clientY","exitSide","getExitSideFromRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","isInside","TooltipContentImpl","ariaLabel","handleScroll","capture","$5cb92bef7577960e$export$177fb62ff3ec1f22","$cf1ac5d9fe0e8206$export$7c6e2c02157bb7d2","$5e63c961fc1ce211$export$d9f1ccf0bdb05d45","$a093c7e1ec25a057$var$VisuallyHiddenContentContextProvider","$ea1ef594cf570d83$export$be92b6f5f03c0fe9","point","Math","abs","push","polygon","inside","j","xi","yi","xj","yj","points","newPoints","sort","getHullPresorted","upperHull","p","q","r","pop","lowerHull","concat","Trigger","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","$a093c7e1ec25a057$export$2881499e37b75b9a","$a093c7e1ec25a057$export$be92b6f5f03c0fe9","$a093c7e1ec25a057$export$41fb9f06171c75f4","className","$a093c7e1ec25a057$export$7c6e2c02157bb7d2"],"mappings":"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","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n  <TooltipPrimitive.Content\n    ref={ref}\n    sideOffset={sideOffset}\n    className={cn(\n      \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n      className\n    )}\n    {...props}\n  />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","export default function _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}","function composeEventHandlers<E>(\n  originalEventHandler?: (event: E) => void,\n  ourEventHandler?: (event: E) => void,\n  { checkForDefaultPrevented = true } = {}\n) {\n  return function handleEvent(event: E) {\n    originalEventHandler?.(event);\n\n    if (checkForDefaultPrevented === false || !((event as unknown) as Event).defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\n\nexport { composeEventHandlers };\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref !== null && ref !== undefined) {\n    (ref as React.MutableRefObject<T>).current = value;\n  }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]) {\n  return (node: T) => refs.forEach((ref) => setRef(ref, node));\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]) {\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n  rootComponentName: string,\n  defaultContext?: ContextValueType\n) {\n  const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n  function Provider(props: ContextValueType & { children: React.ReactNode }) {\n    const { children, ...context } = props;\n    // Only re-memoize when prop values change\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n    return <Context.Provider value={value}>{children}</Context.Provider>;\n  }\n\n  function useContext(consumerName: string) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== undefined) return defaultContext;\n    // if a defaultContext wasn't specified, it's a required context.\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n\n  Provider.displayName = rootComponentName + 'Provider';\n  return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n  scopeName: string;\n  (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n  let defaultContexts: any[] = [];\n\n  /* -----------------------------------------------------------------------------------------------\n   * createContext\n   * ---------------------------------------------------------------------------------------------*/\n\n  function createContext<ContextValueType extends object | null>(\n    rootComponentName: string,\n    defaultContext?: ContextValueType\n  ) {\n    const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n\n    function Provider(\n      props: ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n    ) {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName][index] || BaseContext;\n      // Only re-memoize when prop values change\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n      return <Context.Provider value={value}>{children}</Context.Provider>;\n    }\n\n    function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n      const Context = scope?.[scopeName][index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== undefined) return defaultContext;\n      // if a defaultContext wasn't specified, it's a required context.\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n\n    Provider.displayName = rootComponentName + 'Provider';\n    return [Provider, useContext] as const;\n  }\n\n  /* -----------------------------------------------------------------------------------------------\n   * createScope\n   * ---------------------------------------------------------------------------------------------*/\n\n  const createScope: CreateScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope: Scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n\n  createScope.scopeName = scopeName;\n  return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n\n  const createScope: CreateScope = () => {\n    const scopeHooks = scopes.map((createScope) => ({\n      useScope: createScope(),\n      scopeName: createScope.scopeName,\n    }));\n\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n        // We are calling a hook inside a callback which React warns against to avoid inconsistent\n        // renders, however, scoping doesn't have render side effects so we ignore the rule.\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes, ...currentScope };\n      }, {});\n\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","export default function _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n  children?: React.ReactNode;\n}\n\nconst Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n  const { children, ...slotProps } = props;\n  const childrenArray = React.Children.toArray(children);\n  const slottable = childrenArray.find(isSlottable);\n\n  if (slottable) {\n    // the new element to render is the one passed as a child of `Slottable`\n    const newElement = slottable.props.children as React.ReactNode;\n\n    const newChildren = childrenArray.map((child) => {\n      if (child === slottable) {\n        // because the new element will be the one rendered, we are only interested\n        // in grabbing its children (`newElement.props.children`)\n        if (React.Children.count(newElement) > 1) return React.Children.only(null);\n        return React.isValidElement(newElement)\n          ? (newElement.props.children as React.ReactNode)\n          : null;\n      } else {\n        return child;\n      }\n    });\n\n    return (\n      <SlotClone {...slotProps} ref={forwardedRef}>\n        {React.isValidElement(newElement)\n          ? React.cloneElement(newElement, undefined, newChildren)\n          : null}\n      </SlotClone>\n    );\n  }\n\n  return (\n    <SlotClone {...slotProps} ref={forwardedRef}>\n      {children}\n    </SlotClone>\n  );\n});\n\nSlot.displayName = 'Slot';\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n  children: React.ReactNode;\n}\n\nconst SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n  const { children, ...slotProps } = props;\n\n  if (React.isValidElement(children)) {\n    return React.cloneElement(children, {\n      ...mergeProps(slotProps, children.props),\n      ref: forwardedRef ? composeRefs(forwardedRef, (children as any).ref) : (children as any).ref,\n    });\n  }\n\n  return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\n\nSlotClone.displayName = 'SlotClone';\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst Slottable = ({ children }: { children: React.ReactNode }) => {\n  return <>{children}</>;\n};\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement {\n  return React.isValidElement(child) && child.type === Slottable;\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n  // all child props should override\n  const overrideProps = { ...childProps };\n\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      // if the handler exists on both, we compose them\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args: unknown[]) => {\n          childPropValue(...args);\n          slotPropValue(...args);\n        };\n      }\n      // but if it exists only on the slot, we use only this one\n      else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    }\n    // if it's `style`, we merge them\n    else if (propName === 'style') {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === 'className') {\n      overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n    }\n  }\n\n  return { ...slotProps, ...overrideProps };\n}\n\nconst Root = Slot;\n\nexport {\n  Slot,\n  Slottable,\n  //\n  Root,\n};\nexport type { SlotProps };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Slot } from '@radix-ui/react-slot';\n\nconst NODES = [\n  'a',\n  'button',\n  'div',\n  'form',\n  'h2',\n  'h3',\n  'img',\n  'input',\n  'label',\n  'li',\n  'nav',\n  'ol',\n  'p',\n  'span',\n  'svg',\n  'ul',\n] as const;\n\n// Temporary while we await merge of this fix:\n// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55396\n// prettier-ignore\ntype PropsWithoutRef<P> = P extends any ? ('ref' extends keyof P ? Pick<P, Exclude<keyof P, 'ref'>> : P) : P;\ntype ComponentPropsWithoutRef<T extends React.ElementType> = PropsWithoutRef<\n  React.ComponentProps<T>\n>;\n\ntype Primitives = { [E in typeof NODES[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n  asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n  extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n  const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp: any = asChild ? Slot : node;\n\n    React.useEffect(() => {\n      (window as any)[Symbol.for('radix-ui')] = true;\n    }, []);\n\n    return <Comp {...primitiveProps} ref={forwardedRef} />;\n  });\n\n  Node.displayName = `Primitive.${node}`;\n\n  return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n *  - discrete\n *  - continuous\n *  - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an  important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not nessesary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's  not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n  Primitive,\n  //\n  Root,\n  //\n  dispatchDiscreteCustomEvent,\n};\nexport type { ComponentPropsWithoutRef, PrimitivePropsWithRef };\n","import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n  const callbackRef = React.useRef(callback);\n\n  React.useEffect(() => {\n    callbackRef.current = callback;\n  });\n\n  // https://github.com/facebook/react/issues/19240\n  return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n  onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n  ownerDocument: Document = globalThis?.document\n) {\n  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n  React.useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        onEscapeKeyDown(event);\n      }\n    };\n    ownerDocument.addEventListener('keydown', handleKeyDown);\n    return () => ownerDocument.removeEventListener('keydown', handleKeyDown);\n  }, [onEscapeKeyDown, ownerDocument]);\n}\n\nexport { useEscapeKeydown };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\nimport type * as Radix from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n  layers: new Set<DismissableLayerElement>(),\n  layersWithOutsidePointerEventsDisabled: new Set<DismissableLayerElement>(),\n  branches: new Set<DismissableLayerBranchElement>(),\n});\n\ntype DismissableLayerElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n  /**\n   * When `true`, hover/focus/click interactions will be disabled on elements outside\n   * the `DismissableLayer`. Users will need to click twice on outside elements to\n   * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n   */\n  disableOutsidePointerEvents?: boolean;\n  /**\n   * Event handler called when the escape key is down.\n   * Can be prevented.\n   */\n  onEscapeKeyDown?: (event: KeyboardEvent) => void;\n  /**\n   * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n  /**\n   * Event handler called when the focus moves outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  onFocusOutside?: (event: FocusOutsideEvent) => void;\n  /**\n   * Event handler called when an interaction happens outside the `DismissableLayer`.\n   * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n   * Can be prevented.\n   */\n  onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n  /**\n   * Handler called when the `DismissableLayer` should be dismissed\n   */\n  onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef<DismissableLayerElement, DismissableLayerProps>(\n  (props, forwardedRef) => {\n    const {\n      disableOutsidePointerEvents = false,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      onDismiss,\n      ...layerProps\n    } = props;\n    const context = React.useContext(DismissableLayerContext);\n    const [node, setNode] = React.useState<DismissableLayerElement | null>(null);\n    const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n    const [, force] = React.useState({});\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n    const layers = Array.from(context.layers);\n    const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n    const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n    const index = node ? layers.indexOf(node) : -1;\n    const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n    const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n    const pointerDownOutside = usePointerDownOutside((event) => {\n      const target = event.target as HTMLElement;\n      const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n      onPointerDownOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n\n    const focusOutside = useFocusOutside((event) => {\n      const target = event.target as HTMLElement;\n      const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (isFocusInBranch) return;\n      onFocusOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n\n    useEscapeKeydown((event) => {\n      const isHighestLayer = index === context.layers.size - 1;\n      if (!isHighestLayer) return;\n      onEscapeKeyDown?.(event);\n      if (!event.defaultPrevented && onDismiss) {\n        event.preventDefault();\n        onDismiss();\n      }\n    }, ownerDocument);\n\n    React.useEffect(() => {\n      if (!node) return;\n      if (disableOutsidePointerEvents) {\n        if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n          originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n          ownerDocument.body.style.pointerEvents = 'none';\n        }\n        context.layersWithOutsidePointerEventsDisabled.add(node);\n      }\n      context.layers.add(node);\n      dispatchUpdate();\n      return () => {\n        if (\n          disableOutsidePointerEvents &&\n          context.layersWithOutsidePointerEventsDisabled.size === 1\n        ) {\n          ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n        }\n      };\n    }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n    /**\n     * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n     * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n     * and add it to the end again so the layering order wouldn't be _creation order_.\n     * We only want them to be removed from context stacks when unmounted.\n     */\n    React.useEffect(() => {\n      return () => {\n        if (!node) return;\n        context.layers.delete(node);\n        context.layersWithOutsidePointerEventsDisabled.delete(node);\n        dispatchUpdate();\n      };\n    }, [node, context]);\n\n    React.useEffect(() => {\n      const handleUpdate = () => force({});\n      document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n      return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n    }, []);\n\n    return (\n      <Primitive.div\n        {...layerProps}\n        ref={composedRefs}\n        style={{\n          pointerEvents: isBodyPointerEventsDisabled\n            ? isPointerEventsEnabled\n              ? 'auto'\n              : 'none'\n            : undefined,\n          ...props.style,\n        }}\n        onFocusCapture={composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture)}\n        onBlurCapture={composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture)}\n        onPointerDownCapture={composeEventHandlers(\n          props.onPointerDownCapture,\n          pointerDownOutside.onPointerDownCapture\n        )}\n      />\n    );\n  }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef<typeof Primitive.div>;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n  DismissableLayerBranchElement,\n  DismissableLayerBranchProps\n>((props, forwardedRef) => {\n  const context = React.useContext(DismissableLayerContext);\n  const ref = React.useRef<DismissableLayerBranchElement>(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      context.branches.add(node);\n      return () => {\n        context.branches.delete(node);\n      };\n    }\n  }, [context.branches]);\n\n  return <Primitive.div {...props} ref={composedRefs} />;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n  onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n  ownerDocument: Document = globalThis?.document\n) {\n  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n  const isPointerInsideReactTreeRef = React.useRef(false);\n  const handleClickRef = React.useRef(() => {});\n\n  React.useEffect(() => {\n    const handlePointerDown = (event: PointerEvent) => {\n      if (event.target && !isPointerInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n\n        function handleAndDispatchPointerDownOutsideEvent() {\n          handleAndDispatchCustomEvent(\n            POINTER_DOWN_OUTSIDE,\n            handlePointerDownOutside,\n            eventDetail,\n            { discrete: true }\n          );\n        }\n\n        /**\n         * On touch devices, we need to wait for a click event because browsers implement\n         * a ~350ms delay between the time the user stops touching the display and when the\n         * browser executres events. We need to ensure we don't reactivate pointer-events within\n         * this timeframe otherwise the browser may execute events that should have been prevented.\n         *\n         * Additionally, this also lets us deal automatically with cancellations when a click event\n         * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n         *\n         * This is why we also continuously remove the previous listener, because we cannot be\n         * certain that it was raised, and therefore cleaned-up.\n         */\n        if (event.pointerType === 'touch') {\n          ownerDocument.removeEventListener('click', handleClickRef.current);\n          handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n          ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n        } else {\n          handleAndDispatchPointerDownOutsideEvent();\n        }\n      }\n      isPointerInsideReactTreeRef.current = false;\n    };\n    /**\n     * if this hook executes in a component that mounts via a `pointerdown` event, the event\n     * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n     * this by delaying the event listener registration on the document.\n     * This is not React specific, but rather how the DOM works, ie:\n     * ```\n     * button.addEventListener('pointerdown', () => {\n     *   console.log('I will log');\n     *   document.addEventListener('pointerdown', () => {\n     *     console.log('I will also log');\n     *   })\n     * });\n     */\n    const timerId = window.setTimeout(() => {\n      ownerDocument.addEventListener('pointerdown', handlePointerDown);\n    }, 0);\n    return () => {\n      window.clearTimeout(timerId);\n      ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n      ownerDocument.removeEventListener('click', handleClickRef.current);\n    };\n  }, [ownerDocument, handlePointerDownOutside]);\n\n  return {\n    // ensures we check React component tree (not just DOM tree)\n    onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n  };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n  onFocusOutside?: (event: FocusOutsideEvent) => void,\n  ownerDocument: Document = globalThis?.document\n) {\n  const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n  const isFocusInsideReactTreeRef = React.useRef(false);\n\n  React.useEffect(() => {\n    const handleFocus = (event: FocusEvent) => {\n      if (event.target && !isFocusInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n        handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n          discrete: false,\n        });\n      }\n    };\n    ownerDocument.addEventListener('focusin', handleFocus);\n    return () => ownerDocument.removeEventListener('focusin', handleFocus);\n  }, [ownerDocument, handleFocusOutside]);\n\n  return {\n    onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n    onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n  };\n}\n\nfunction dispatchUpdate() {\n  const event = new CustomEvent(CONTEXT_UPDATE);\n  document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent<E extends CustomEvent, OriginalEvent extends Event>(\n  name: string,\n  handler: ((event: E) => void) | undefined,\n  detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D> ? D : never),\n  { discrete }: { discrete: boolean }\n) {\n  const target = detail.originalEvent.target;\n  const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n  if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n  if (discrete) {\n    dispatchDiscreteCustomEvent(target, event);\n  } else {\n    target.dispatchEvent(event);\n  }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n  DismissableLayer,\n  DismissableLayerBranch,\n  //\n  Root,\n  Branch,\n};\nexport type { DismissableLayerProps };\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = Boolean(globalThis?.document) ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We `toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)['useId'.toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n  const [id, setId] = React.useState<string | undefined>(useReactId());\n  // React versions older than 18 will have client-side ids only.\n  useLayoutEffect(() => {\n    if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n  }, [deterministicId]);\n  return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n","function getAlignment(placement) {\n  return placement.split('-')[1];\n}\n\nfunction getLengthFromAxis(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\n\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';\n}\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const mainAxis = getMainAxisFromPlacement(placement);\n  const length = getLengthFromAxis(mainAxis);\n  const commonAlign = reference[length] / 2 - floating[length] / 2;\n  const side = getSide(placement);\n  const isVertical = mainAxis === 'x';\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n      continue;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\n\nfunction getSideObjectFromPadding(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\n\nfunction rectToClientRect(rect) {\n  return {\n    ...rect,\n    top: rect.y,\n    left: rect.x,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = options;\n  const paddingObject = getSideObjectFromPadding(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    ...rects.floating,\n    x,\n    y\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n  return max(min$1, min(value, max$1));\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = options || {};\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements\n    } = state;\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getSideObjectFromPadding(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getMainAxisFromPlacement(placement);\n    const length = getLengthFromAxis(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min = paddingObject[minProp];\n    const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = within(min, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. This stops `shift()` from taking action, but can\n    // be worked around by calling it again after the `arrow()` if desired.\n    const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min ? paddingObject[minProp] : paddingObject[maxProp]) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0;\n    return {\n      [axis]: coords[axis] - alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset\n      }\n    };\n  }\n});\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-start\", side + \"-end\"), []);\n\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\n\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const mainAxis = getMainAxisFromPlacement(placement);\n  const length = getLengthFromAxis(mainAxis);\n  let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return {\n    main: mainAlignmentSide,\n    cross: getOppositePlacement(mainAlignmentSide)\n  };\n}\n\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = allPlacements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = options;\n      const placements = alignment !== undefined || allowedPlacements === allPlacements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const {\n        main,\n        cross\n      } = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = options;\n      const side = getSide(placement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const {\n          main,\n          cross\n        } = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[main], overflow[cross]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$map$so;\n                const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = options;\n      const {\n        rects\n      } = state;\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = options;\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getSideObjectFromPadding(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getMainAxisFromPlacement(placement) === 'x') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nasync function convertValueToCoords(state, value) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getMainAxisFromPlacement(placement) === 'x';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = typeof value === 'function' ? value(state) : value;\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    alignmentAxis: null,\n    ...rawValue\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (value) {\n  if (value === void 0) {\n    value = 0;\n  }\n  return {\n    name: 'offset',\n    options: value,\n    async fn(state) {\n      const {\n        x,\n        y\n      } = state;\n      const diffCoords = await convertValueToCoords(state, value);\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: diffCoords\n      };\n    }\n  };\n};\n\nfunction getCrossAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = options;\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const mainAxis = getMainAxisFromPlacement(getSide(placement));\n      const crossAxis = getCrossAxis(mainAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = within(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = within(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = options;\n      const coords = {\n        x,\n        y\n      };\n      const mainAxis = getMainAxisFromPlacement(placement);\n      const crossAxis = getCrossAxis(mainAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = typeof offset === 'function' ? offset(state) : offset;\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = options;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const axis = getMainAxisFromPlacement(placement);\n      const isXAxis = axis === 'x';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const overflowAvailableHeight = height - overflow[heightSide];\n      const overflowAvailableWidth = width - overflow[widthSide];\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if (isXAxis) {\n        const maximumClippingWidth = width - overflow.left - overflow.right;\n        availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n      } else {\n        const maximumClippingHeight = height - overflow.top - overflow.bottom;\n        availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isXAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\n\nfunction getComputedStyle$1(element) {\n  return getWindow(element).getComputedStyle(element);\n}\n\nfunction isNode(value) {\n  return value instanceof getWindow(value).Node;\n}\nfunction getNodeName(node) {\n  return isNode(node) ? (node.nodeName || '').toLowerCase() : '';\n}\n\nfunction isHTMLElement(value) {\n  return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n  return value instanceof getWindow(value).Element;\n}\nfunction isShadowRoot(node) {\n  // Browsers without `ShadowRoot` support.\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle$1(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  const safari = isSafari();\n  const css = getComputedStyle$1(element);\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || !safari && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !safari && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction isSafari() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    fallback: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nconst FALLBACK_SCALE = {\n  x: 1,\n  y: 1\n};\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return FALLBACK_SCALE;\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    fallback\n  } = getCssDimensions(domElement);\n  let x = (fallback ? round(rect.width) : rect.width) / width;\n  let y = (fallback ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = {\n  x: 0,\n  y: 0\n};\nfunction getVisualOffsets(element, isFixed, floatingOffsetParent) {\n  var _win$visualViewport, _win$visualViewport2;\n  if (isFixed === void 0) {\n    isFixed = true;\n  }\n  if (!isSafari()) {\n    return noOffsets;\n  }\n  const win = element ? getWindow(element) : window;\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== win) {\n    return noOffsets;\n  }\n  return {\n    x: ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0,\n    y: ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0\n  };\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = FALLBACK_SCALE;\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = getVisualOffsets(domElement, isFixedStrategy, offsetParent);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentIFrame = win.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== win) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      iframeRect.x += (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      iframeRect.y += (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += iframeRect.x;\n      y += iframeRect.y;\n      currentIFrame = getWindow(currentIFrame).frameElement;\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nfunction getDocumentElement(node) {\n  return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.pageXOffset,\n    scrollTop: element.pageYOffset\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  if (offsetParent === documentElement) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = {\n    x: 1,\n    y: 1\n  };\n  const offsets = {\n    x: 0,\n    y: 0\n  };\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\n\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    // `getParentNode` will never return a `Document` due to the fallback\n    // check, so it's either the <html> or <body> element.\n    return parentNode.ownerDocument.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\n\nfunction getOverflowAncestors(node, list) {\n  var _node$ownerDocument;\n  if (list === void 0) {\n    list = [];\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor));\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isSafari();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : {\n    x: 1,\n    y: 1\n  };\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  return getCssDimensions(element);\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else {\n      currentNode = getParentNode(currentNode);\n    }\n  }\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const window = getWindow(element);\n  if (!isHTMLElement(element)) {\n    return window;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n    return window;\n  }\n  return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = {\n    x: 0,\n    y: 0\n  };\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nconst platform = {\n  getClippingRect,\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  isElement,\n  getDimensions,\n  getOffsetParent,\n  getDocumentElement,\n  getScale,\n  async getElementRects(_ref) {\n    let {\n      reference,\n      floating,\n      strategy\n    } = _ref;\n    const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n    const getDimensionsFn = this.getDimensions;\n    return {\n      reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n      floating: {\n        x: 0,\n        y: 0,\n        ...(await getDimensionsFn(floating))\n      }\n    };\n  },\n  getClientRects: element => Array.from(element.getClientRects()),\n  isRTL: element => getComputedStyle$1(element).direction === 'rtl'\n};\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = true,\n    animationFrame = false\n  } = options;\n  const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : reference.contextElement ? getOverflowAncestors(reference.contextElement) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    // ignores Window, checks for [object VisualViewport]\n    const isVisualViewport = !isElement(ancestor) && ancestor.toString().includes('V');\n    if (ancestorScroll && (animationFrame ? isVisualViewport : true)) {\n      ancestor.addEventListener('scroll', update, {\n        passive: true\n      });\n    }\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  let observer = null;\n  if (elementResize) {\n    observer = new ResizeObserver(() => {\n      update();\n    });\n    isElement(reference) && !animationFrame && observer.observe(reference);\n    if (!isElement(reference) && reference.contextElement && !animationFrame) {\n      observer.observe(reference.contextElement);\n    }\n    observer.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _observer;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    (_observer = observer) == null ? void 0 : _observer.disconnect();\n    observer = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { autoUpdate, computePosition, getOverflowAncestors, platform };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => {\n  const {\n    element,\n    padding\n  } = options;\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(args) {\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$1({\n            element: element.current,\n            padding\n          }).fn(args);\n        }\n        return {};\n      } else if (element) {\n        return arrow$1({\n          element,\n          padding\n        }).fn(args);\n      }\n      return {};\n    }\n  };\n};\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (typeof a === 'function' && a.toString() === b.toString()) {\n    return true;\n  }\n  let length, i, keys;\n  if (a && b && typeof a == 'object') {\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;) {\n        if (!deepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (i = length; i-- !== 0;) {\n      if (!{}.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (i = length; i-- !== 0;) {\n      const key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        continue;\n      }\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/react\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n    elements: {\n      reference: externalReference,\n      floating: externalFloating\n    } = {},\n    transform = true,\n    whileElementsMounted,\n    open\n  } = options;\n  const [data, setData] = React.useState({\n    x: 0,\n    y: 0,\n    strategy,\n    placement,\n    middlewareData: {},\n    isPositioned: false\n  });\n  const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n  if (!deepEqual(latestMiddleware, middleware)) {\n    setLatestMiddleware(middleware);\n  }\n  const [_reference, _setReference] = React.useState(null);\n  const [_floating, _setFloating] = React.useState(null);\n  const setReference = React.useCallback(node => {\n    if (node != referenceRef.current) {\n      referenceRef.current = node;\n      _setReference(node);\n    }\n  }, [_setReference]);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, [_setFloating]);\n  const referenceEl = externalReference || _reference;\n  const floatingEl = externalFloating || _floating;\n  const referenceRef = React.useRef(null);\n  const floatingRef = React.useRef(null);\n  const dataRef = React.useRef(data);\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const update = React.useCallback(() => {\n    if (!referenceRef.current || !floatingRef.current) {\n      return;\n    }\n    const config = {\n      placement,\n      strategy,\n      middleware: latestMiddleware\n    };\n    if (platformRef.current) {\n      config.platform = platformRef.current;\n    }\n    computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n      const fullData = {\n        ...data,\n        isPositioned: true\n      };\n      if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n        dataRef.current = fullData;\n        ReactDOM.flushSync(() => {\n          setData(fullData);\n        });\n      }\n    });\n  }, [latestMiddleware, placement, strategy, platformRef]);\n  index(() => {\n    if (open === false && dataRef.current.isPositioned) {\n      dataRef.current.isPositioned = false;\n      setData(data => ({\n        ...data,\n        isPositioned: false\n      }));\n    }\n  }, [open]);\n  const isMountedRef = React.useRef(false);\n  index(() => {\n    isMountedRef.current = true;\n    return () => {\n      isMountedRef.current = false;\n    };\n  }, []);\n  index(() => {\n    if (referenceEl) referenceRef.current = referenceEl;\n    if (floatingEl) floatingRef.current = floatingEl;\n    if (referenceEl && floatingEl) {\n      if (whileElementsMountedRef.current) {\n        return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n      } else {\n        update();\n      }\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef]);\n  const refs = React.useMemo(() => ({\n    reference: referenceRef,\n    floating: floatingRef,\n    setReference,\n    setFloating\n  }), [setReference, setFloating]);\n  const elements = React.useMemo(() => ({\n    reference: referenceEl,\n    floating: floatingEl\n  }), [referenceEl, floatingEl]);\n  const floatingStyles = React.useMemo(() => {\n    const initialStyles = {\n      position: strategy,\n      left: 0,\n      top: 0\n    };\n    if (!elements.floating) {\n      return initialStyles;\n    }\n    const x = roundByDPR(elements.floating, data.x);\n    const y = roundByDPR(elements.floating, data.y);\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n        ...(getDPR(elements.floating) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy,\n      left: x,\n      top: y\n    };\n  }, [strategy, transform, elements.floating, data.x, data.y]);\n  return React.useMemo(() => ({\n    ...data,\n    update,\n    refs,\n    elements,\n    floatingStyles\n  }), [data, update, refs, elements, floatingStyles]);\n}\n\nexport { arrow, useFloating };\n","/// <reference types=\"resize-observer-browser\" />\n\nimport * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\nfunction useSize(element: HTMLElement | null) {\n  const [size, setSize] = React.useState<{ width: number; height: number } | undefined>(undefined);\n\n  useLayoutEffect(() => {\n    if (element) {\n      // provide size as early as possible\n      setSize({ width: element.offsetWidth, height: element.offsetHeight });\n\n      const resizeObserver = new ResizeObserver((entries) => {\n        if (!Array.isArray(entries)) {\n          return;\n        }\n\n        // Since we only observe the one element, we don't need to loop over the\n        // array\n        if (!entries.length) {\n          return;\n        }\n\n        const entry = entries[0];\n        let width: number;\n        let height: number;\n\n        if ('borderBoxSize' in entry) {\n          const borderSizeEntry = entry['borderBoxSize'];\n          // iron out differences between browsers\n          const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n          width = borderSize['inlineSize'];\n          height = borderSize['blockSize'];\n        } else {\n          // for browsers that don't support `borderBoxSize`\n          // we calculate it ourselves to get the correct border box.\n          width = element.offsetWidth;\n          height = element.offsetHeight;\n        }\n\n        setSize({ width, height });\n      });\n\n      resizeObserver.observe(element, { box: 'border-box' });\n\n      return () => resizeObserver.unobserve(element);\n    } else {\n      // We only want to reset to `undefined` when the element becomes `null`,\n      // not if it changes to another element.\n      setSize(undefined);\n    }\n  }, [element]);\n\n  return size;\n}\n\nexport { useSize };\n","import * as React from 'react';\nimport {\n  useFloating,\n  autoUpdate,\n  offset,\n  shift,\n  limitShift,\n  hide,\n  arrow as floatingUIarrow,\n  flip,\n  size,\n} from '@floating-ui/react-dom';\nimport * as ArrowPrimitive from '@radix-ui/react-arrow';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useSize } from '@radix-ui/react-use-size';\n\nimport type { Placement, Middleware } from '@floating-ui/react-dom';\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\nimport type { Measurable } from '@radix-ui/rect';\n\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const;\n\ntype Side = typeof SIDE_OPTIONS[number];\ntype Align = typeof ALIGN_OPTIONS[number];\n\n/* -------------------------------------------------------------------------------------------------\n * Popper\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_NAME = 'Popper';\n\ntype ScopedProps<P> = P & { __scopePopper?: Scope };\nconst [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\n\ntype PopperContextValue = {\n  anchor: Measurable | null;\n  onAnchorChange(anchor: Measurable | null): void;\n};\nconst [PopperProvider, usePopperContext] = createPopperContext<PopperContextValue>(POPPER_NAME);\n\ninterface PopperProps {\n  children?: React.ReactNode;\n}\nconst Popper: React.FC<PopperProps> = (props: ScopedProps<PopperProps>) => {\n  const { __scopePopper, children } = props;\n  const [anchor, setAnchor] = React.useState<Measurable | null>(null);\n  return (\n    <PopperProvider scope={__scopePopper} anchor={anchor} onAnchorChange={setAnchor}>\n      {children}\n    </PopperProvider>\n  );\n};\n\nPopper.displayName = POPPER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopperAnchor';\n\ntype PopperAnchorElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = Radix.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PopperAnchorProps extends PrimitiveDivProps {\n  virtualRef?: React.RefObject<Measurable>;\n}\n\nconst PopperAnchor = React.forwardRef<PopperAnchorElement, PopperAnchorProps>(\n  (props: ScopedProps<PopperAnchorProps>, forwardedRef) => {\n    const { __scopePopper, virtualRef, ...anchorProps } = props;\n    const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n    const ref = React.useRef<PopperAnchorElement>(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n\n    React.useEffect(() => {\n      // Consumer can anchor the popper to something that isn't\n      // a DOM node e.g. pointer position, so we override the\n      // `anchorRef` with their virtual ref in this case.\n      context.onAnchorChange(virtualRef?.current || ref.current);\n    });\n\n    return virtualRef ? null : <Primitive.div {...anchorProps} ref={composedRefs} />;\n  }\n);\n\nPopperAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopperContent';\n\ntype PopperContentContextValue = {\n  placedSide: Side;\n  onArrowChange(arrow: HTMLSpanElement | null): void;\n  arrowX?: number;\n  arrowY?: number;\n  shouldHideArrow: boolean;\n};\n\nconst [PopperContentProvider, useContentContext] =\n  createPopperContext<PopperContentContextValue>(CONTENT_NAME);\n\ntype Boundary = Element | null;\n\ntype PopperContentElement = React.ElementRef<typeof Primitive.div>;\ninterface PopperContentProps extends PrimitiveDivProps {\n  side?: Side;\n  sideOffset?: number;\n  align?: Align;\n  alignOffset?: number;\n  arrowPadding?: number;\n  collisionBoundary?: Boundary | Boundary[];\n  collisionPadding?: number | Partial<Record<Side, number>>;\n  sticky?: 'partial' | 'always';\n  hideWhenDetached?: boolean;\n  avoidCollisions?: boolean;\n  onPlaced?: () => void;\n}\n\nconst PopperContent = React.forwardRef<PopperContentElement, PopperContentProps>(\n  (props: ScopedProps<PopperContentProps>, forwardedRef) => {\n    const {\n      __scopePopper,\n      side = 'bottom',\n      sideOffset = 0,\n      align = 'center',\n      alignOffset = 0,\n      arrowPadding = 0,\n      collisionBoundary = [],\n      collisionPadding: collisionPaddingProp = 0,\n      sticky = 'partial',\n      hideWhenDetached = false,\n      avoidCollisions = true,\n      onPlaced,\n      ...contentProps\n    } = props;\n\n    const context = usePopperContext(CONTENT_NAME, __scopePopper);\n\n    const [content, setContent] = React.useState<HTMLDivElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n\n    const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n    const arrowSize = useSize(arrow);\n    const arrowWidth = arrowSize?.width ?? 0;\n    const arrowHeight = arrowSize?.height ?? 0;\n\n    const desiredPlacement = (side + (align !== 'center' ? '-' + align : '')) as Placement;\n\n    const collisionPadding =\n      typeof collisionPaddingProp === 'number'\n        ? collisionPaddingProp\n        : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n\n    const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n    const hasExplicitBoundaries = boundary.length > 0;\n\n    const detectOverflowOptions = {\n      padding: collisionPadding,\n      boundary: boundary.filter(isNotNull),\n      // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n      altBoundary: hasExplicitBoundaries,\n    };\n\n    const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n      // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n      strategy: 'fixed',\n      placement: desiredPlacement,\n      whileElementsMounted: autoUpdate,\n      elements: {\n        reference: context.anchor,\n      },\n      middleware: [\n        offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n        avoidCollisions &&\n          shift({\n            mainAxis: true,\n            crossAxis: false,\n            limiter: sticky === 'partial' ? limitShift() : undefined,\n            ...detectOverflowOptions,\n          }),\n        avoidCollisions && flip({ ...detectOverflowOptions }),\n        size({\n          ...detectOverflowOptions,\n          apply: ({ elements, rects, availableWidth, availableHeight }) => {\n            const { width: anchorWidth, height: anchorHeight } = rects.reference;\n            const contentStyle = elements.floating.style;\n            contentStyle.setProperty('--radix-popper-available-width', `${availableWidth}px`);\n            contentStyle.setProperty('--radix-popper-available-height', `${availableHeight}px`);\n            contentStyle.setProperty('--radix-popper-anchor-width', `${anchorWidth}px`);\n            contentStyle.setProperty('--radix-popper-anchor-height', `${anchorHeight}px`);\n          },\n        }),\n        arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n        transformOrigin({ arrowWidth, arrowHeight }),\n        hideWhenDetached && hide({ strategy: 'referenceHidden' }),\n      ],\n    });\n\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n\n    const handlePlaced = useCallbackRef(onPlaced);\n    useLayoutEffect(() => {\n      if (isPositioned) {\n        handlePlaced?.();\n      }\n    }, [isPositioned, handlePlaced]);\n\n    const arrowX = middlewareData.arrow?.x;\n    const arrowY = middlewareData.arrow?.y;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n\n    const [contentZIndex, setContentZIndex] = React.useState<string>();\n    useLayoutEffect(() => {\n      if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n    }, [content]);\n\n    return (\n      <div\n        ref={refs.setFloating}\n        data-radix-popper-content-wrapper=\"\"\n        style={{\n          ...floatingStyles,\n          transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', // keep off the page when measuring\n          minWidth: 'max-content',\n          zIndex: contentZIndex,\n          ['--radix-popper-transform-origin' as any]: [\n            middlewareData.transformOrigin?.x,\n            middlewareData.transformOrigin?.y,\n          ].join(' '),\n        }}\n        // Floating UI interally calculates logical alignment based the `dir` attribute on\n        // the reference/floating node, we must add this attribute here to ensure\n        // this is calculated when portalled as well as inline.\n        dir={props.dir}\n      >\n        <PopperContentProvider\n          scope={__scopePopper}\n          placedSide={placedSide}\n          onArrowChange={setArrow}\n          arrowX={arrowX}\n          arrowY={arrowY}\n          shouldHideArrow={cannotCenterArrow}\n        >\n          <Primitive.div\n            data-side={placedSide}\n            data-align={placedAlign}\n            {...contentProps}\n            ref={composedRefs}\n            style={{\n              ...contentProps.style,\n              // if the PopperContent hasn't been placed yet (not all measurements done)\n              // we prevent animations so that users's animation don't kick in too early referring wrong sides\n              animation: !isPositioned ? 'none' : undefined,\n              // hide the content if using the hide middleware and should be hidden\n              opacity: middlewareData.hide?.referenceHidden ? 0 : undefined,\n            }}\n          />\n        </PopperContentProvider>\n      </div>\n    );\n  }\n);\n\nPopperContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopperArrow';\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n  top: 'bottom',\n  right: 'left',\n  bottom: 'top',\n  left: 'right',\n};\n\ntype PopperArrowElement = React.ElementRef<typeof ArrowPrimitive.Root>;\ntype ArrowProps = Radix.ComponentPropsWithoutRef<typeof ArrowPrimitive.Root>;\ninterface PopperArrowProps extends ArrowProps {}\n\nconst PopperArrow = React.forwardRef<PopperArrowElement, PopperArrowProps>(function PopperArrow(\n  props: ScopedProps<PopperArrowProps>,\n  forwardedRef\n) {\n  const { __scopePopper, ...arrowProps } = props;\n  const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n  const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n\n  return (\n    // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n    // doesn't report size as we'd expect on SVG elements.\n    // it reports their bounding box which is effectively the largest path inside the SVG.\n    <span\n      ref={contentContext.onArrowChange}\n      style={{\n        position: 'absolute',\n        left: contentContext.arrowX,\n        top: contentContext.arrowY,\n        [baseSide]: 0,\n        transformOrigin: {\n          top: '',\n          right: '0 0',\n          bottom: 'center 0',\n          left: '100% 0',\n        }[contentContext.placedSide],\n        transform: {\n          top: 'translateY(100%)',\n          right: 'translateY(50%) rotate(90deg) translateX(-50%)',\n          bottom: `rotate(180deg)`,\n          left: 'translateY(50%) rotate(-90deg) translateX(50%)',\n        }[contentContext.placedSide],\n        visibility: contentContext.shouldHideArrow ? 'hidden' : undefined,\n      }}\n    >\n      <ArrowPrimitive.Root\n        {...arrowProps}\n        ref={forwardedRef}\n        style={{\n          ...arrowProps.style,\n          // ensures the element can be measured correctly (mostly for if SVG)\n          display: 'block',\n        }}\n      />\n    </span>\n  );\n});\n\nPopperArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction isNotNull<T>(value: T | null): value is T {\n  return value !== null;\n}\n\nconst transformOrigin = (options: { arrowWidth: number; arrowHeight: number }): Middleware => ({\n  name: 'transformOrigin',\n  options,\n  fn(data) {\n    const { placement, rects, middlewareData } = data;\n\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const isArrowHidden = cannotCenterArrow;\n    const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n    const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];\n\n    const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n    const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n\n    let x = '';\n    let y = '';\n\n    if (placedSide === 'bottom') {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${-arrowHeight}px`;\n    } else if (placedSide === 'top') {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${rects.floating.height + arrowHeight}px`;\n    } else if (placedSide === 'right') {\n      x = `${-arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    } else if (placedSide === 'left') {\n      x = `${rects.floating.width + arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    }\n    return { data: { x, y } };\n  },\n});\n\nfunction getSideAndAlignFromPlacement(placement: Placement) {\n  const [side, align = 'center'] = placement.split('-');\n  return [side as Side, align as Align] as const;\n}\n\nconst Root = Popper;\nconst Anchor = PopperAnchor;\nconst Content = PopperContent;\nconst Arrow = PopperArrow;\n\nexport {\n  createPopperScope,\n  //\n  Popper,\n  PopperAnchor,\n  PopperContent,\n  PopperArrow,\n  //\n  Root,\n  Anchor,\n  Content,\n  Arrow,\n  //\n  SIDE_OPTIONS,\n  ALIGN_OPTIONS,\n};\nexport type { PopperProps, PopperAnchorProps, PopperContentProps, PopperArrowProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n  ? R\n  : never;\n\nexport function useStateMachine<M>(\n  initialState: MachineState<M>,\n  machine: M & Machine<MachineState<M>>\n) {\n  return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n    const nextState = (machine[state] as any)[event];\n    return nextState ?? state;\n  }, initialState);\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './useStateMachine';\n\ninterface PresenceProps {\n  children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n  present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n\n  const child = (\n    typeof children === 'function'\n      ? children({ present: presence.isPresent })\n      : React.Children.only(children)\n  ) as React.ReactElement;\n\n  const ref = useComposedRefs(presence.ref, (child as any).ref);\n  const forceMount = typeof children === 'function';\n  return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n  const [node, setNode] = React.useState<HTMLElement>();\n  const stylesRef = React.useRef<CSSStyleDeclaration>({} as any);\n  const prevPresentRef = React.useRef(present);\n  const prevAnimationNameRef = React.useRef<string>('none');\n  const initialState = present ? 'mounted' : 'unmounted';\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: 'unmounted',\n      ANIMATION_OUT: 'unmountSuspended',\n    },\n    unmountSuspended: {\n      MOUNT: 'mounted',\n      ANIMATION_END: 'unmounted',\n    },\n    unmounted: {\n      MOUNT: 'mounted',\n    },\n  });\n\n  React.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n  }, [state]);\n\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n\n      if (present) {\n        send('MOUNT');\n      } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n        // If there is no exit animation or the element is hidden, animations won't run\n        // so we unmount instantly\n        send('UNMOUNT');\n      } else {\n        /**\n         * When `present` changes to `false`, we check changes to animation-name to\n         * determine whether an animation has started. We chose this approach (reading\n         * computed styles) because there is no `animationrun` event and `animationstart`\n         * fires after `animation-delay` has expired which would be too late.\n         */\n        const isAnimating = prevAnimationName !== currentAnimationName;\n\n        if (wasPresent && isAnimating) {\n          send('ANIMATION_OUT');\n        } else {\n          send('UNMOUNT');\n        }\n      }\n\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n\n  useLayoutEffect(() => {\n    if (node) {\n      /**\n       * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n       * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n       * make sure we only trigger ANIMATION_END for the currently active animation.\n       */\n      const handleAnimationEnd = (event: AnimationEvent) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n        if (event.target === node && isCurrentAnimation) {\n          // With React 18 concurrency this update is applied\n          // a frame after the animation ends, creating a flash of visible content.\n          // By manually flushing we ensure they sync within a frame, removing the flash.\n          ReactDOM.flushSync(() => send('ANIMATION_END'));\n        }\n      };\n      const handleAnimationStart = (event: AnimationEvent) => {\n        if (event.target === node) {\n          // if animation occurred, store its name as the previous animation.\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener('animationstart', handleAnimationStart);\n      node.addEventListener('animationcancel', handleAnimationEnd);\n      node.addEventListener('animationend', handleAnimationEnd);\n      return () => {\n        node.removeEventListener('animationstart', handleAnimationStart);\n        node.removeEventListener('animationcancel', handleAnimationEnd);\n        node.removeEventListener('animationend', handleAnimationEnd);\n      };\n    } else {\n      // Transition to the unmounted state if the node is removed prematurely.\n      // We avoid doing so during cleanup as the node may change but still exist.\n      send('ANIMATION_END');\n    }\n  }, [node, send]);\n\n  return {\n    isPresent: ['mounted', 'unmountSuspended'].includes(state),\n    ref: React.useCallback((node: HTMLElement) => {\n      if (node) stylesRef.current = getComputedStyle(node);\n      setNode(node);\n    }, []),\n  };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles?: CSSStyleDeclaration) {\n  return styles?.animationName || 'none';\n}\n\nexport { Presence };\nexport type { PresenceProps };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\ntype UseControllableStateParams<T> = {\n  prop?: T | undefined;\n  defaultProp?: T | undefined;\n  onChange?: (state: T) => void;\n};\n\ntype SetStateFn<T> = (prevState?: T) => T;\n\nfunction useControllableState<T>({\n  prop,\n  defaultProp,\n  onChange = () => {},\n}: UseControllableStateParams<T>) {\n  const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({ defaultProp, onChange });\n  const isControlled = prop !== undefined;\n  const value = isControlled ? prop : uncontrolledProp;\n  const handleChange = useCallbackRef(onChange);\n\n  const setValue: React.Dispatch<React.SetStateAction<T | undefined>> = React.useCallback(\n    (nextValue) => {\n      if (isControlled) {\n        const setter = nextValue as SetStateFn<T>;\n        const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n        if (value !== prop) handleChange(value as T);\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, handleChange]\n  );\n\n  return [value, setValue] as const;\n}\n\nfunction useUncontrolledState<T>({\n  defaultProp,\n  onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>) {\n  const uncontrolledState = React.useState<T | undefined>(defaultProp);\n  const [value] = uncontrolledState;\n  const prevValueRef = React.useRef(value);\n  const handleChange = useCallbackRef(onChange);\n\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      handleChange(value as T);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef, handleChange]);\n\n  return uncontrolledState;\n}\n\nexport { useControllableState };\n","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type * as Radix from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * VisuallyHidden\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'VisuallyHidden';\n\ntype VisuallyHiddenElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = Radix.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface VisuallyHiddenProps extends PrimitiveSpanProps {}\n\nconst VisuallyHidden = React.forwardRef<VisuallyHiddenElement, VisuallyHiddenProps>(\n  (props, forwardedRef) => {\n    return (\n      <Primitive.span\n        {...props}\n        ref={forwardedRef}\n        style={{\n          // See: https://github.com/twbs/bootstrap/blob/master/scss/mixins/_screen-reader.scss\n          position: 'absolute',\n          border: 0,\n          width: 1,\n          height: 1,\n          padding: 0,\n          margin: -1,\n          overflow: 'hidden',\n          clip: 'rect(0, 0, 0, 0)',\n          whiteSpace: 'nowrap',\n          wordWrap: 'normal',\n          ...props.style,\n        }}\n      />\n    );\n  }\n);\n\nVisuallyHidden.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = VisuallyHidden;\n\nexport {\n  VisuallyHidden,\n  //\n  Root,\n};\nexport type { VisuallyHiddenProps };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slottable } from '@radix-ui/react-slot';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';\n\nimport type * as Radix from '@radix-ui/react-primitive';\nimport type { Scope } from '@radix-ui/react-context';\n\ntype ScopedProps<P = {}> = P & { __scopeTooltip?: Scope };\nconst [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [\n  createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst PROVIDER_NAME = 'TooltipProvider';\nconst DEFAULT_DELAY_DURATION = 700;\nconst TOOLTIP_OPEN = 'tooltip.open';\n\ntype TooltipProviderContextValue = {\n  isOpenDelayed: boolean;\n  delayDuration: number;\n  onOpen(): void;\n  onClose(): void;\n  onPointerInTransitChange(inTransit: boolean): void;\n  isPointerInTransitRef: React.MutableRefObject<boolean>;\n  disableHoverableContent: boolean;\n};\n\nconst [TooltipProviderContextProvider, useTooltipProviderContext] =\n  createTooltipContext<TooltipProviderContextValue>(PROVIDER_NAME);\n\ninterface TooltipProviderProps {\n  children: React.ReactNode;\n  /**\n   * The duration from when the pointer enters the trigger until the tooltip gets opened.\n   * @defaultValue 700\n   */\n  delayDuration?: number;\n  /**\n   * How much time a user has to enter another trigger without incurring a delay again.\n   * @defaultValue 300\n   */\n  skipDelayDuration?: number;\n  /**\n   * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n   * @defaultValue false\n   */\n  disableHoverableContent?: boolean;\n}\n\nconst TooltipProvider: React.FC<TooltipProviderProps> = (\n  props: ScopedProps<TooltipProviderProps>\n) => {\n  const {\n    __scopeTooltip,\n    delayDuration = DEFAULT_DELAY_DURATION,\n    skipDelayDuration = 300,\n    disableHoverableContent = false,\n    children,\n  } = props;\n  const [isOpenDelayed, setIsOpenDelayed] = React.useState(true);\n  const isPointerInTransitRef = React.useRef(false);\n  const skipDelayTimerRef = React.useRef(0);\n\n  React.useEffect(() => {\n    const skipDelayTimer = skipDelayTimerRef.current;\n    return () => window.clearTimeout(skipDelayTimer);\n  }, []);\n\n  return (\n    <TooltipProviderContextProvider\n      scope={__scopeTooltip}\n      isOpenDelayed={isOpenDelayed}\n      delayDuration={delayDuration}\n      onOpen={React.useCallback(() => {\n        window.clearTimeout(skipDelayTimerRef.current);\n        setIsOpenDelayed(false);\n      }, [])}\n      onClose={React.useCallback(() => {\n        window.clearTimeout(skipDelayTimerRef.current);\n        skipDelayTimerRef.current = window.setTimeout(\n          () => setIsOpenDelayed(true),\n          skipDelayDuration\n        );\n      }, [skipDelayDuration])}\n      isPointerInTransitRef={isPointerInTransitRef}\n      onPointerInTransitChange={React.useCallback((inTransit: boolean) => {\n        isPointerInTransitRef.current = inTransit;\n      }, [])}\n      disableHoverableContent={disableHoverableContent}\n    >\n      {children}\n    </TooltipProviderContextProvider>\n  );\n};\n\nTooltipProvider.displayName = PROVIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\n\nconst TOOLTIP_NAME = 'Tooltip';\n\ntype TooltipContextValue = {\n  contentId: string;\n  open: boolean;\n  stateAttribute: 'closed' | 'delayed-open' | 'instant-open';\n  trigger: TooltipTriggerElement | null;\n  onTriggerChange(trigger: TooltipTriggerElement | null): void;\n  onTriggerEnter(): void;\n  onTriggerLeave(): void;\n  onOpen(): void;\n  onClose(): void;\n  disableHoverableContent: boolean;\n};\n\nconst [TooltipContextProvider, useTooltipContext] =\n  createTooltipContext<TooltipContextValue>(TOOLTIP_NAME);\n\ninterface TooltipProps {\n  children?: React.ReactNode;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * The duration from when the pointer enters the trigger until the tooltip gets opened. This will\n   * override the prop with the same name passed to Provider.\n   * @defaultValue 700\n   */\n  delayDuration?: number;\n  /**\n   * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n   * @defaultValue false\n   */\n  disableHoverableContent?: boolean;\n}\n\nconst Tooltip: React.FC<TooltipProps> = (props: ScopedProps<TooltipProps>) => {\n  const {\n    __scopeTooltip,\n    children,\n    open: openProp,\n    defaultOpen = false,\n    onOpenChange,\n    disableHoverableContent: disableHoverableContentProp,\n    delayDuration: delayDurationProp,\n  } = props;\n  const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n  const popperScope = usePopperScope(__scopeTooltip);\n  const [trigger, setTrigger] = React.useState<HTMLButtonElement | null>(null);\n  const contentId = useId();\n  const openTimerRef = React.useRef(0);\n  const disableHoverableContent =\n    disableHoverableContentProp ?? providerContext.disableHoverableContent;\n  const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n  const wasOpenDelayedRef = React.useRef(false);\n  const [open = false, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen,\n    onChange: (open) => {\n      if (open) {\n        providerContext.onOpen();\n\n        // as `onChange` is called within a lifecycle method we\n        // avoid dispatching via `dispatchDiscreteCustomEvent`.\n        document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n      } else {\n        providerContext.onClose();\n      }\n      onOpenChange?.(open);\n    },\n  });\n  const stateAttribute = React.useMemo(() => {\n    return open ? (wasOpenDelayedRef.current ? 'delayed-open' : 'instant-open') : 'closed';\n  }, [open]);\n\n  const handleOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    wasOpenDelayedRef.current = false;\n    setOpen(true);\n  }, [setOpen]);\n\n  const handleClose = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    setOpen(false);\n  }, [setOpen]);\n\n  const handleDelayedOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = window.setTimeout(() => {\n      wasOpenDelayedRef.current = true;\n      setOpen(true);\n    }, delayDuration);\n  }, [delayDuration, setOpen]);\n\n  React.useEffect(() => {\n    return () => window.clearTimeout(openTimerRef.current);\n  }, []);\n\n  return (\n    <PopperPrimitive.Root {...popperScope}>\n      <TooltipContextProvider\n        scope={__scopeTooltip}\n        contentId={contentId}\n        open={open}\n        stateAttribute={stateAttribute}\n        trigger={trigger}\n        onTriggerChange={setTrigger}\n        onTriggerEnter={React.useCallback(() => {\n          if (providerContext.isOpenDelayed) handleDelayedOpen();\n          else handleOpen();\n        }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen])}\n        onTriggerLeave={React.useCallback(() => {\n          if (disableHoverableContent) {\n            handleClose();\n          } else {\n            // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n            window.clearTimeout(openTimerRef.current);\n          }\n        }, [handleClose, disableHoverableContent])}\n        onOpen={handleOpen}\n        onClose={handleClose}\n        disableHoverableContent={disableHoverableContent}\n      >\n        {children}\n      </TooltipContextProvider>\n    </PopperPrimitive.Root>\n  );\n};\n\nTooltip.displayName = TOOLTIP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'TooltipTrigger';\n\ntype TooltipTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = Radix.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface TooltipTriggerProps extends PrimitiveButtonProps {}\n\nconst TooltipTrigger = React.forwardRef<TooltipTriggerElement, TooltipTriggerProps>(\n  (props: ScopedProps<TooltipTriggerProps>, forwardedRef) => {\n    const { __scopeTooltip, ...triggerProps } = props;\n    const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n    const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const ref = React.useRef<TooltipTriggerElement>(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n    const isPointerDownRef = React.useRef(false);\n    const hasPointerMoveOpenedRef = React.useRef(false);\n    const handlePointerUp = React.useCallback(() => (isPointerDownRef.current = false), []);\n\n    React.useEffect(() => {\n      return () => document.removeEventListener('pointerup', handlePointerUp);\n    }, [handlePointerUp]);\n\n    return (\n      <PopperPrimitive.Anchor asChild {...popperScope}>\n        <Primitive.button\n          // We purposefully avoid adding `type=button` here because tooltip triggers are also\n          // commonly anchors and the anchor `type` attribute signifies MIME type.\n          aria-describedby={context.open ? context.contentId : undefined}\n          data-state={context.stateAttribute}\n          {...triggerProps}\n          ref={composedRefs}\n          onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {\n            if (event.pointerType === 'touch') return;\n            if (\n              !hasPointerMoveOpenedRef.current &&\n              !providerContext.isPointerInTransitRef.current\n            ) {\n              context.onTriggerEnter();\n              hasPointerMoveOpenedRef.current = true;\n            }\n          })}\n          onPointerLeave={composeEventHandlers(props.onPointerLeave, () => {\n            context.onTriggerLeave();\n            hasPointerMoveOpenedRef.current = false;\n          })}\n          onPointerDown={composeEventHandlers(props.onPointerDown, () => {\n            isPointerDownRef.current = true;\n            document.addEventListener('pointerup', handlePointerUp, { once: true });\n          })}\n          onFocus={composeEventHandlers(props.onFocus, () => {\n            if (!isPointerDownRef.current) context.onOpen();\n          })}\n          onBlur={composeEventHandlers(props.onBlur, context.onClose)}\n          onClick={composeEventHandlers(props.onClick, context.onClose)}\n        />\n      </PopperPrimitive.Anchor>\n    );\n  }\n);\n\nTooltipTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'TooltipPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createTooltipContext<PortalContextValue>(PORTAL_NAME, {\n  forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface TooltipPortalProps extends Omit<PortalProps, 'asChild'> {\n  children?: React.ReactNode;\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: true;\n}\n\nconst TooltipPortal: React.FC<TooltipPortalProps> = (props: ScopedProps<TooltipPortalProps>) => {\n  const { __scopeTooltip, forceMount, children, container } = props;\n  const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n  return (\n    <PortalProvider scope={__scopeTooltip} forceMount={forceMount}>\n      <Presence present={forceMount || context.open}>\n        <PortalPrimitive asChild container={container}>\n          {children}\n        </PortalPrimitive>\n      </Presence>\n    </PortalProvider>\n  );\n};\n\nTooltipPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'TooltipContent';\n\ntype TooltipContentElement = TooltipContentImplElement;\ninterface TooltipContentProps extends TooltipContentImplProps {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: true;\n}\n\nconst TooltipContent = React.forwardRef<TooltipContentElement, TooltipContentProps>(\n  (props: ScopedProps<TooltipContentProps>, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n    const { forceMount = portalContext.forceMount, side = 'top', ...contentProps } = props;\n    const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n\n    return (\n      <Presence present={forceMount || context.open}>\n        {context.disableHoverableContent ? (\n          <TooltipContentImpl side={side} {...contentProps} ref={forwardedRef} />\n        ) : (\n          <TooltipContentHoverable side={side} {...contentProps} ref={forwardedRef} />\n        )}\n      </Presence>\n    );\n  }\n);\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\n\ntype TooltipContentHoverableElement = TooltipContentImplElement;\ninterface TooltipContentHoverableProps extends TooltipContentImplProps {}\n\nconst TooltipContentHoverable = React.forwardRef<\n  TooltipContentHoverableElement,\n  TooltipContentHoverableProps\n>((props: ScopedProps<TooltipContentHoverableProps>, forwardedRef) => {\n  const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n  const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n  const ref = React.useRef<TooltipContentHoverableElement>(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const [pointerGraceArea, setPointerGraceArea] = React.useState<Polygon | null>(null);\n\n  const { trigger, onClose } = context;\n  const content = ref.current;\n\n  const { onPointerInTransitChange } = providerContext;\n\n  const handleRemoveGraceArea = React.useCallback(() => {\n    setPointerGraceArea(null);\n    onPointerInTransitChange(false);\n  }, [onPointerInTransitChange]);\n\n  const handleCreateGraceArea = React.useCallback(\n    (event: PointerEvent, hoverTarget: HTMLElement) => {\n      const currentTarget = event.currentTarget as HTMLElement;\n      const exitPoint = { x: event.clientX, y: event.clientY };\n      const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n      const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n      const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n      const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n      setPointerGraceArea(graceArea);\n      onPointerInTransitChange(true);\n    },\n    [onPointerInTransitChange]\n  );\n\n  React.useEffect(() => {\n    return () => handleRemoveGraceArea();\n  }, [handleRemoveGraceArea]);\n\n  React.useEffect(() => {\n    if (trigger && content) {\n      const handleTriggerLeave = (event: PointerEvent) => handleCreateGraceArea(event, content);\n      const handleContentLeave = (event: PointerEvent) => handleCreateGraceArea(event, trigger);\n\n      trigger.addEventListener('pointerleave', handleTriggerLeave);\n      content.addEventListener('pointerleave', handleContentLeave);\n      return () => {\n        trigger.removeEventListener('pointerleave', handleTriggerLeave);\n        content.removeEventListener('pointerleave', handleContentLeave);\n      };\n    }\n  }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n\n  React.useEffect(() => {\n    if (pointerGraceArea) {\n      const handleTrackPointerGrace = (event: PointerEvent) => {\n        const target = event.target as HTMLElement;\n        const pointerPosition = { x: event.clientX, y: event.clientY };\n        const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n        const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n\n        if (hasEnteredTarget) {\n          handleRemoveGraceArea();\n        } else if (isPointerOutsideGraceArea) {\n          handleRemoveGraceArea();\n          onClose();\n        }\n      };\n      document.addEventListener('pointermove', handleTrackPointerGrace);\n      return () => document.removeEventListener('pointermove', handleTrackPointerGrace);\n    }\n  }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n\n  return <TooltipContentImpl {...props} ref={composedRefs} />;\n});\n\nconst [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =\n  createTooltipContext(TOOLTIP_NAME, { isInside: false });\n\ntype TooltipContentImplElement = React.ElementRef<typeof PopperPrimitive.Content>;\ntype DismissableLayerProps = Radix.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype PopperContentProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ninterface TooltipContentImplProps extends Omit<PopperContentProps, 'onPlaced'> {\n  /**\n   * A more descriptive label for accessibility purpose\n   */\n  'aria-label'?: string;\n\n  /**\n   * Event handler called when the escape key is down.\n   * Can be prevented.\n   */\n  onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n  /**\n   * Event handler called when the a `pointerdown` event happens outside of the `Tooltip`.\n   * Can be prevented.\n   */\n  onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n}\n\nconst TooltipContentImpl = React.forwardRef<TooltipContentImplElement, TooltipContentImplProps>(\n  (props: ScopedProps<TooltipContentImplProps>, forwardedRef) => {\n    const {\n      __scopeTooltip,\n      children,\n      'aria-label': ariaLabel,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      ...contentProps\n    } = props;\n    const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const { onClose } = context;\n\n    // Close this tooltip if another one opens\n    React.useEffect(() => {\n      document.addEventListener(TOOLTIP_OPEN, onClose);\n      return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n    }, [onClose]);\n\n    // Close the tooltip if the trigger is scrolled\n    React.useEffect(() => {\n      if (context.trigger) {\n        const handleScroll = (event: Event) => {\n          const target = event.target as HTMLElement;\n          if (target?.contains(context.trigger)) onClose();\n        };\n        window.addEventListener('scroll', handleScroll, { capture: true });\n        return () => window.removeEventListener('scroll', handleScroll, { capture: true });\n      }\n    }, [context.trigger, onClose]);\n\n    return (\n      <DismissableLayer\n        asChild\n        disableOutsidePointerEvents={false}\n        onEscapeKeyDown={onEscapeKeyDown}\n        onPointerDownOutside={onPointerDownOutside}\n        onFocusOutside={(event) => event.preventDefault()}\n        onDismiss={onClose}\n      >\n        <PopperPrimitive.Content\n          data-state={context.stateAttribute}\n          {...popperScope}\n          {...contentProps}\n          ref={forwardedRef}\n          style={{\n            ...contentProps.style,\n            // re-namespace exposed content custom properties\n            ...{\n              '--radix-tooltip-content-transform-origin': 'var(--radix-popper-transform-origin)',\n              '--radix-tooltip-content-available-width': 'var(--radix-popper-available-width)',\n              '--radix-tooltip-content-available-height': 'var(--radix-popper-available-height)',\n              '--radix-tooltip-trigger-width': 'var(--radix-popper-anchor-width)',\n              '--radix-tooltip-trigger-height': 'var(--radix-popper-anchor-height)',\n            },\n          }}\n        >\n          <Slottable>{children}</Slottable>\n          <VisuallyHiddenContentContextProvider scope={__scopeTooltip} isInside={true}>\n            <VisuallyHiddenPrimitive.Root id={context.contentId} role=\"tooltip\">\n              {ariaLabel || children}\n            </VisuallyHiddenPrimitive.Root>\n          </VisuallyHiddenContentContextProvider>\n        </PopperPrimitive.Content>\n      </DismissableLayer>\n    );\n  }\n);\n\nTooltipContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'TooltipArrow';\n\ntype TooltipArrowElement = React.ElementRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = Radix.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface TooltipArrowProps extends PopperArrowProps {}\n\nconst TooltipArrow = React.forwardRef<TooltipArrowElement, TooltipArrowProps>(\n  (props: ScopedProps<TooltipArrowProps>, forwardedRef) => {\n    const { __scopeTooltip, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeTooltip);\n    const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n      ARROW_NAME,\n      __scopeTooltip\n    );\n    // if the arrow is inside the `VisuallyHidden`, we don't want to render it all to\n    // prevent issues in positioning the arrow due to the duplicate\n    return visuallyHiddenContentContext.isInside ? null : (\n      <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n    );\n  }\n);\n\nTooltipArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype Side = NonNullable<TooltipContentProps['side']>;\n\nfunction getExitSideFromRect(point: Point, rect: DOMRect): Side {\n  const top = Math.abs(rect.top - point.y);\n  const bottom = Math.abs(rect.bottom - point.y);\n  const right = Math.abs(rect.right - point.x);\n  const left = Math.abs(rect.left - point.x);\n\n  switch (Math.min(top, bottom, right, left)) {\n    case left:\n      return 'left';\n    case right:\n      return 'right';\n    case top:\n      return 'top';\n    case bottom:\n      return 'bottom';\n    default:\n      throw new Error('unreachable');\n  }\n}\n\nfunction getPaddedExitPoints(exitPoint: Point, exitSide: Side, padding = 5) {\n  const paddedExitPoints: Point[] = [];\n  switch (exitSide) {\n    case 'top':\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y + padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case 'bottom':\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y - padding }\n      );\n      break;\n    case 'left':\n      paddedExitPoints.push(\n        { x: exitPoint.x + padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case 'right':\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x - padding, y: exitPoint.y + padding }\n      );\n      break;\n  }\n  return paddedExitPoints;\n}\n\nfunction getPointsFromRect(rect: DOMRect) {\n  const { top, right, bottom, left } = rect;\n  return [\n    { x: left, y: top },\n    { x: right, y: top },\n    { x: right, y: bottom },\n    { x: left, y: bottom },\n  ];\n}\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: Polygon) {\n  const { x, y } = point;\n  let inside = false;\n  for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n    const xi = polygon[i].x;\n    const yi = polygon[i].y;\n    const xj = polygon[j].x;\n    const yj = polygon[j].y;\n\n    // prettier-ignore\n    const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n    if (intersect) inside = !inside;\n  }\n\n  return inside;\n}\n\n// Returns a new array of points representing the convex hull of the given set of points.\n// https://www.nayuki.io/page/convex-hull-algorithm\nfunction getHull<P extends Point>(points: Readonly<Array<P>>): Array<P> {\n  const newPoints: Array<P> = points.slice();\n  newPoints.sort((a: Point, b: Point) => {\n    if (a.x < b.x) return -1;\n    else if (a.x > b.x) return +1;\n    else if (a.y < b.y) return -1;\n    else if (a.y > b.y) return +1;\n    else return 0;\n  });\n  return getHullPresorted(newPoints);\n}\n\n// Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.\nfunction getHullPresorted<P extends Point>(points: Readonly<Array<P>>): Array<P> {\n  if (points.length <= 1) return points.slice();\n\n  const upperHull: Array<P> = [];\n  for (let i = 0; i < points.length; i++) {\n    const p = points[i];\n    while (upperHull.length >= 2) {\n      const q = upperHull[upperHull.length - 1];\n      const r = upperHull[upperHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n      else break;\n    }\n    upperHull.push(p);\n  }\n  upperHull.pop();\n\n  const lowerHull: Array<P> = [];\n  for (let i = points.length - 1; i >= 0; i--) {\n    const p = points[i];\n    while (lowerHull.length >= 2) {\n      const q = lowerHull[lowerHull.length - 1];\n      const r = lowerHull[lowerHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n      else break;\n    }\n    lowerHull.push(p);\n  }\n  lowerHull.pop();\n\n  if (\n    upperHull.length === 1 &&\n    lowerHull.length === 1 &&\n    upperHull[0].x === lowerHull[0].x &&\n    upperHull[0].y === lowerHull[0].y\n  ) {\n    return upperHull;\n  } else {\n    return upperHull.concat(lowerHull);\n  }\n}\n\nconst Provider = TooltipProvider;\nconst Root = Tooltip;\nconst Trigger = TooltipTrigger;\nconst Portal = TooltipPortal;\nconst Content = TooltipContent;\nconst Arrow = TooltipArrow;\n\nexport {\n  createTooltipScope,\n  //\n  TooltipProvider,\n  Tooltip,\n  TooltipTrigger,\n  TooltipPortal,\n  TooltipContent,\n  TooltipArrow,\n  //\n  Provider,\n  Root,\n  Trigger,\n  Portal,\n  Content,\n  Arrow,\n};\nexport type {\n  TooltipProps,\n  TooltipTriggerProps,\n  TooltipPortalProps,\n  TooltipContentProps,\n  TooltipArrowProps,\n};\n","import * as React from \"react\"\nimport { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n\nexport function formatDate(input: string | number): string {\n  const date = new Date(input)\n  return date.toLocaleDateString(\"en-US\", {\n    month: \"long\",\n    day: \"numeric\",\n    year: \"numeric\",\n  })\n}\n\nexport function absoluteUrl(path: string) {\n  return `${process.env.NEXT_PUBLIC_APP_URL}${path}`\n}\n"]}