{"version":3,"file":"index.mjs","sources":["../src/components/Tooltip/Tooltip.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Grid/Grid.tsx","../src/components/Stack/Stack.tsx","../src/components/Box/Box.tsx","../src/components/Center/Center.tsx","../../../node_modules/@react-aria/utils/dist/useLayoutEffect.mjs","../../../node_modules/@react-aria/utils/dist/domHelpers.mjs","../../../node_modules/@react-stately/flags/dist/import.mjs","../../../node_modules/@react-aria/utils/dist/DOMFunctions.mjs","../../../node_modules/@react-aria/utils/dist/focusWithoutScrolling.mjs","../../../node_modules/@react-aria/utils/dist/platform.mjs","../../../node_modules/@react-aria/utils/dist/openLink.mjs","../../../node_modules/@react-aria/utils/dist/useGlobalListeners.mjs","../../../node_modules/@react-aria/utils/dist/isVirtualEvent.mjs","../../../node_modules/@react-aria/interactions/dist/utils.mjs","../../../node_modules/@react-aria/interactions/dist/useFocusVisible.mjs","../../../node_modules/@react-aria/interactions/dist/useFocus.mjs","../../../node_modules/@react-aria/interactions/dist/useFocusWithin.mjs","../../../node_modules/@react-aria/interactions/dist/useHover.mjs","../../../node_modules/@react-aria/focus/dist/useFocusRing.mjs","../../../node_modules/@headlessui/react/dist/utils/env.js","../../../node_modules/@headlessui/react/dist/utils/owner.js","../../../node_modules/@headlessui/react/dist/utils/micro-task.js","../../../node_modules/@headlessui/react/dist/utils/disposables.js","../../../node_modules/@headlessui/react/dist/hooks/use-disposables.js","../../../node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js","../../../node_modules/@headlessui/react/dist/hooks/use-latest-value.js","../../../node_modules/@headlessui/react/dist/hooks/use-event.js","../../../node_modules/@headlessui/react/dist/hooks/use-active-press.js","../../../node_modules/@headlessui/react/dist/hooks/use-slot.js","../../../node_modules/@headlessui/react/dist/internal/disabled.js","../../../node_modules/@headlessui/react/dist/utils/class-names.js","../../../node_modules/@headlessui/react/dist/utils/match.js","../../../node_modules/@headlessui/react/dist/utils/render.js","../../../node_modules/@headlessui/react/dist/hooks/use-controllable.js","../../../node_modules/@headlessui/react/dist/hooks/use-default-value.js","../../../node_modules/@headlessui/react/dist/utils/form.js","../../../node_modules/@headlessui/react/dist/internal/hidden.js","../../../node_modules/@headlessui/react/dist/internal/form-fields.js","../../../node_modules/@headlessui/react/dist/internal/id.js","../../../node_modules/@headlessui/react/dist/utils/dom.js","../../../node_modules/@headlessui/react/dist/utils/bugs.js","../../../node_modules/@headlessui/react/dist/hooks/use-sync-refs.js","../../../node_modules/@headlessui/react/dist/components/description/description.js","../../../node_modules/@headlessui/react/dist/components/keyboard.js","../../../node_modules/@headlessui/react/dist/components/label/label.js","../../../node_modules/@headlessui/react/dist/internal/close-provider.js","../../../node_modules/@headlessui/react/dist/hooks/use-by-comparator.js","../../../node_modules/@headlessui/react/dist/hooks/use-element-size.js","../../../node_modules/@headlessui/react/dist/components/mouse.js","../../../node_modules/@headlessui/react/dist/hooks/use-handle-toggle.js","../../../node_modules/@headlessui/react/dist/utils/default-map.js","../../../node_modules/@headlessui/react/dist/machine.js","../../../node_modules/@headlessui/react/dist/machines/stack-machine.js","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js","../../../node_modules/use-sync-external-store/with-selector.js","../../../node_modules/@headlessui/react/dist/react-glue.js","../../../node_modules/@headlessui/react/dist/hooks/use-is-top-layer.js","../../../node_modules/@headlessui/react/dist/hooks/use-inert-others.js","../../../node_modules/@headlessui/react/dist/hooks/use-on-disappear.js","../../../node_modules/@headlessui/react/dist/utils/focus-management.js","../../../node_modules/@headlessui/react/dist/utils/platform.js","../../../node_modules/@headlessui/react/dist/hooks/use-document-event.js","../../../node_modules/@headlessui/react/dist/hooks/use-window-event.js","../../../node_modules/@headlessui/react/dist/hooks/use-outside-click.js","../../../node_modules/@headlessui/react/dist/hooks/use-owner.js","../../../node_modules/@headlessui/react/dist/hooks/use-quick-release.js","../../../node_modules/@headlessui/react/dist/hooks/use-event-listener.js","../../../node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js","../../../node_modules/@headlessui/react/dist/hooks/use-store.js","../../../node_modules/@headlessui/react/dist/utils/store.js","../../../node_modules/@headlessui/react/dist/hooks/document-overflow/adjust-scrollbar-padding.js","../../../node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js","../../../node_modules/@headlessui/react/dist/hooks/document-overflow/prevent-scroll.js","../../../node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js","../../../node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js","../../../node_modules/@headlessui/react/dist/hooks/use-scroll-lock.js","../../../node_modules/@headlessui/react/dist/hooks/use-tracked-pointer.js","../../../node_modules/@headlessui/react/dist/hooks/use-flags.js","../../../node_modules/@headlessui/react/dist/hooks/use-transition.js","../../../node_modules/@headlessui/react/dist/hooks/use-watch.js","../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs","../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../node_modules/@floating-ui/react/dist/floating-ui.react.mjs","../../../node_modules/@headlessui/react/dist/internal/floating.js","../../../node_modules/@headlessui/react/dist/internal/frozen.js","../../../node_modules/@headlessui/react/dist/internal/open-closed.js","../../../node_modules/@headlessui/react/dist/utils/document-ready.js","../../../node_modules/@headlessui/react/dist/utils/active-element-history.js","../../../node_modules/@headlessui/react/dist/utils/calculate-active-index.js","../../../node_modules/@headlessui/react/dist/hooks/use-on-unmount.js","../../../node_modules/@headlessui/react/dist/internal/portal-force-root.js","../../../node_modules/@headlessui/react/dist/components/portal/portal.js","../../../node_modules/@headlessui/react/dist/utils/element-movement.js","../../../node_modules/@headlessui/react/dist/hooks/use-escape.js","../../../node_modules/@headlessui/react/dist/hooks/use-is-touch-device.js","../../../node_modules/@headlessui/react/dist/hooks/use-root-containers.js","../../../node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js","../../../node_modules/@headlessui/react/dist/hooks/use-is-mounted.js","../../../node_modules/@headlessui/react/dist/hooks/use-tab-direction.js","../../../node_modules/@headlessui/react/dist/components/focus-trap/focus-trap.js","../../../node_modules/@headlessui/react/dist/components/transition/transition.js","../../../node_modules/@headlessui/react/dist/components/dialog/dialog.js","../../../node_modules/@headlessui/react/dist/utils/get-text-value.js","../../../node_modules/@headlessui/react/dist/hooks/use-text-value.js","../../../node_modules/@headlessui/react/dist/components/listbox/listbox-machine.js","../../../node_modules/@headlessui/react/dist/components/listbox/listbox-machine-glue.js","../../../node_modules/@headlessui/react/dist/components/listbox/listbox.js","../src/components/FieldLabel/FieldLabel.tsx","../src/components/Icon/Icon.tsx","../src/components/Message/Message.tsx","../src/components/Message/SnackbarStack.tsx","../src/components/Message/SnackbarProvider.tsx","../src/components/Select/Select.tsx","../src/components/Input/Input.tsx","../src/components/Modal/Modal.tsx","../src/theme/colors.ts","../src/theme/typography.ts","../src/theme/ThemeProvider.tsx","../src/theme/index.ts","../src/components/LoadingPlaceholder/LoadingPlaceholder.tsx","../src/components/Tabs/Tabs.tsx","../src/components/DropZone/DropZone.tsx","../src/components/RiskCard/RiskCard.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Checkbox/CheckboxGroup.tsx","../src/components/Radio/Radio.tsx","../src/components/Radio/RadioGroup.tsx","../src/components/RiskItemCard/RiskItemCard.tsx","../src/components/Paginator/Paginator.tsx","../src/components/Multiselect/Multiselect.tsx","../src/components/Switch/Switch.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Divider/Divider.tsx","../src/components/TextArea/TextArea.tsx","../src/components/FormControl/FormControl.tsx","../src/components/Typography/Typography.types.ts","../src/components/Typography/Typography.tsx","../src/components/Chip/Chip.tsx","../src/components/Status/Status.tsx","../src/components/LinearLoading/LinearLoading.tsx","../src/components/DropdownMenu/DropdownMenu.types.ts","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/ActionMenuButtons/ActionMenuButtons.tsx","../src/components/ActionMenuButtons/ActionMenuButtons.types.ts","../src/components/DataContainerCard/DataContainerCard.tsx","../src/components/StickyFooter/StickyFooter.tsx","../src/components/MetadataDetails/MetadataDetails.tsx","../src/components/ConnectedAppCard/ConnectedAppCard.tsx","../src/utils/file-formats.ts","../src/utils/formatting.ts","../src/utils/permissions.ts","../src/components/PresetSelector/PresetSelector.tsx","../src/components/AssetCard/AssetCard.tsx","../src/components/FolderCard/FolderCard.tsx","../src/components/AssetBrowser/AssetBrowser.tsx","../src/components/BrowserLoginConfirmation/BrowserLoginConfirmation.tsx","../src/components/FiltersPanel/FiltersPanel.tsx","../src/components/FolderTree/FolderTree.tsx","../src/components/LoginForm/LoginForm.tsx","../src/components/NavBar/NavBar.tsx","../src/components/SearchForm/SearchForm.tsx","../src/components/ReviewProcessing/ReviewProcessing.tsx","../src/components/ReviewDetails/ReviewDetails.tsx","../src/components/ReviewResults/ReviewResults.tsx","../src/components/ReviewFiles/ReviewFiles.tsx","../src/components/CategoryFilters/CategoryFilters.tsx","../src/adapters/asset-adapter.ts","../src/adapters/folder-adapter.ts","../src/adapters/preset-adapter.ts","../src/adapters/store-adapter.ts","../src/adapters/action-adapter.ts","../src/hooks/index.ts"],"sourcesContent":["import {\n  forwardRef,\n  useState,\n  useRef,\n  useCallback,\n  useEffect,\n  cloneElement,\n  isValidElement,\n} from 'react';\nimport type { CSSProperties, HTMLAttributes } from 'react';\nimport { createPortal } from 'react-dom';\nimport styled from '@emotion/styled';\nimport { keyframes } from '@emotion/react';\nimport type { TooltipProps, TooltipPosition } from './Tooltip.types';\n\n/**\n * Custom hook to detect if an element's content is overflowing\n */\nfunction useOverflowDetection(enabled: boolean) {\n  const [isOverflowing, setIsOverflowing] = useState(false);\n  const elementRef = useRef<HTMLElement | null>(null);\n\n  const checkOverflow = useCallback(() => {\n    if (!enabled || !elementRef.current) {\n      setIsOverflowing(false);\n      return;\n    }\n    const el = elementRef.current;\n    const hasOverflow = el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight;\n    setIsOverflowing(hasOverflow);\n  }, [enabled]);\n\n  useEffect(() => {\n    if (!enabled) return;\n    \n    checkOverflow();\n\n    // Use ResizeObserver if available\n    if (typeof ResizeObserver !== 'undefined' && elementRef.current) {\n      const observer = new ResizeObserver(checkOverflow);\n      observer.observe(elementRef.current);\n      return () => observer.disconnect();\n    }\n\n    // Fallback to window resize\n    window.addEventListener('resize', checkOverflow);\n    return () => window.removeEventListener('resize', checkOverflow);\n  }, [enabled, checkOverflow]);\n\n  const setRef = useCallback((node: HTMLElement | null) => {\n    elementRef.current = node;\n    if (node && enabled) {\n      checkOverflow();\n    }\n  }, [enabled, checkOverflow]);\n\n  return { isOverflowing, setRef, checkOverflow };\n}\n\n// Animation keyframes\nconst fadeIn = keyframes`\n  from {\n    opacity: 0;\n    transform: scale(0.95);\n  }\n  to {\n    opacity: 1;\n    transform: scale(1);\n  }\n`;\n\nconst fadeOut = keyframes`\n  from {\n    opacity: 1;\n    transform: scale(1);\n  }\n  to {\n    opacity: 0;\n    transform: scale(0.95);\n  }\n`;\n\n// Styled components\nconst TooltipContainer = styled.div<{\n  $position: TooltipPosition;\n  $maxWidth: number | string;\n  $zIndex: number;\n  $isVisible: boolean;\n  $isLeaving: boolean;\n}>`\n  position: fixed;\n  z-index: ${({ $zIndex }) => $zIndex};\n  max-width: ${({ $maxWidth }) =>\n    typeof $maxWidth === 'number' ? `${$maxWidth}px` : $maxWidth};\n  padding: 8px 12px;\n  font-size: 12px;\n  line-height: 1.4;\n  font-family: var(--ib-font-family, 'Roboto', sans-serif);\n  color: var(--ib-color-grey-900, #191919);\n  background-color: var(--ib-color-grey-100, #F7F7F7);\n  border-radius: 4px;\n  box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.25);\n  word-wrap: break-word;\n  overflow-wrap: break-word;\n  pointer-events: none;\n  \n  animation: ${({ $isLeaving }) => ($isLeaving ? fadeOut : fadeIn)} 0.15s ease-out;\n  animation-fill-mode: forwards;\n\n  @media (prefers-reduced-motion: reduce) {\n    animation: none;\n    opacity: ${({ $isLeaving }) => ($isLeaving ? 0 : 1)};\n  }\n`;\n\nconst Arrow = styled.div<{ $position: TooltipPosition }>`\n  position: absolute;\n  width: 8px;\n  height: 8px;\n  background-color: var(--ib-color-grey-100, #F7F7F7);\n  transform: rotate(45deg);\n\n  ${({ $position }) => {\n    if ($position.startsWith('top')) {\n      return `\n        bottom: -4px;\n        box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.1);\n      `;\n    }\n    if ($position.startsWith('bottom')) {\n      return `\n        top: -4px;\n        box-shadow: -2px -2px 3px rgba(0, 0, 0, 0.1);\n      `;\n    }\n    if ($position.startsWith('left')) {\n      return `\n        right: -4px;\n        box-shadow: 2px -2px 3px rgba(0, 0, 0, 0.1);\n      `;\n    }\n    if ($position.startsWith('right')) {\n      return `\n        left: -4px;\n        box-shadow: -2px 2px 3px rgba(0, 0, 0, 0.1);\n      `;\n    }\n    return '';\n  }}\n\n  ${({ $position }) => {\n    if ($position.endsWith('-start')) {\n      return $position.startsWith('top') || $position.startsWith('bottom')\n        ? 'left: 12px;'\n        : 'top: 12px;';\n    }\n    if ($position.endsWith('-end')) {\n      return $position.startsWith('top') || $position.startsWith('bottom')\n        ? 'right: 12px;'\n        : 'bottom: 12px;';\n    }\n    // Center alignment\n    if ($position === 'top' || $position === 'bottom') {\n      return 'left: 50%; margin-left: -4px;';\n    }\n    return 'top: 50%; margin-top: -4px;';\n  }}\n`;\n\nconst TriggerWrapper = styled.span`\n  display: inline-flex;\n`;\n\n// Position calculation utilities\nfunction getPosition(\n  triggerRect: DOMRect,\n  tooltipRect: { width: number; height: number },\n  position: TooltipPosition,\n  offset: number\n): { top: number; left: number } {\n  const scrollY = window.scrollY || window.pageYOffset;\n  const scrollX = window.scrollX || window.pageXOffset;\n\n  let top = 0;\n  let left = 0;\n\n  // Vertical positioning\n  if (position.startsWith('top')) {\n    top = triggerRect.top + scrollY - tooltipRect.height - offset;\n  } else if (position.startsWith('bottom')) {\n    top = triggerRect.bottom + scrollY + offset;\n  } else if (position.startsWith('left') || position.startsWith('right')) {\n    if (position.endsWith('-start')) {\n      top = triggerRect.top + scrollY;\n    } else if (position.endsWith('-end')) {\n      top = triggerRect.bottom + scrollY - tooltipRect.height;\n    } else {\n      top = triggerRect.top + scrollY + (triggerRect.height - tooltipRect.height) / 2;\n    }\n  }\n\n  // Horizontal positioning\n  if (position.startsWith('left')) {\n    left = triggerRect.left + scrollX - tooltipRect.width - offset;\n  } else if (position.startsWith('right')) {\n    left = triggerRect.right + scrollX + offset;\n  } else if (position.startsWith('top') || position.startsWith('bottom')) {\n    if (position.endsWith('-start')) {\n      left = triggerRect.left + scrollX;\n    } else if (position.endsWith('-end')) {\n      left = triggerRect.right + scrollX - tooltipRect.width;\n    } else {\n      left = triggerRect.left + scrollX + (triggerRect.width - tooltipRect.width) / 2;\n    }\n  }\n\n  return { top, left };\n}\n\n/**\n * Tooltip component - Displays helpful text on hover/focus\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Tooltip content=\"Helpful text\">\n *   <Button>Hover me</Button>\n * </Tooltip>\n *\n * // Different positions\n * <Tooltip content=\"Top tooltip\" position=\"top\">\n *   <span>Top</span>\n * </Tooltip>\n *\n * // With delay\n * <Tooltip content=\"Delayed tooltip\" delay={500}>\n *   <Button>Wait for it</Button>\n * </Tooltip>\n *\n * // Disabled\n * <Tooltip content=\"Won't show\" disabled>\n *   <span>No tooltip</span>\n * </Tooltip>\n * ```\n */\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n  (\n    {\n      content,\n      children,\n      position = 'bottom',\n      delay = 200,\n      hideDelay = 0,\n      disabled = false,\n      maxWidth = 300,\n      contentStyle,\n      contentClassName,\n      arrow = false,\n      zIndex = 1000,\n      offset = 8,\n      open: controlledOpen,\n      onOpenChange,\n      onlyWhenOverflow = false,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      ...rest\n    },\n    ref\n  ) => {\n    // Overflow detection for onlyWhenOverflow mode\n    const { isOverflowing, setRef: setOverflowRef } = useOverflowDetection(onlyWhenOverflow);\n    const isControlled = controlledOpen !== undefined;\n    const [internalOpen, setInternalOpen] = useState(false);\n    const [isLeaving, setIsLeaving] = useState(false);\n    const [tooltipPosition, setTooltipPosition] = useState<{ top: number; left: number }>({\n      top: 0,\n      left: 0,\n    });\n\n    const triggerRef = useRef<HTMLElement>(null);\n    const tooltipRef = useRef<HTMLDivElement>(null);\n    const showTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n    const hideTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n    const leaveTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n    const isOpen = isControlled ? controlledOpen : internalOpen;\n\n    const setOpen = useCallback(\n      (value: boolean) => {\n        if (!isControlled) {\n          setInternalOpen(value);\n        }\n        onOpenChange?.(value);\n      },\n      [isControlled, onOpenChange]\n    );\n\n    const updatePosition = useCallback(() => {\n      if (!triggerRef.current || !tooltipRef.current) return;\n\n      const triggerRect = triggerRef.current.getBoundingClientRect();\n      const tooltipRect = {\n        width: tooltipRef.current.offsetWidth,\n        height: tooltipRef.current.offsetHeight,\n      };\n\n      const pos = getPosition(triggerRect, tooltipRect, position, offset);\n      setTooltipPosition(pos);\n    }, [position, offset]);\n\n    const handleShow = useCallback(() => {\n      // Check effective disabled state including overflow mode\n      const isEffectivelyDisabled = disabled || (onlyWhenOverflow && !isOverflowing);\n      if (isEffectivelyDisabled) return;\n\n      if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);\n      if (leaveTimeoutRef.current) clearTimeout(leaveTimeoutRef.current);\n      setIsLeaving(false);\n\n      showTimeoutRef.current = setTimeout(() => {\n        setOpen(true);\n      }, delay);\n    }, [delay, disabled, onlyWhenOverflow, isOverflowing, setOpen]);\n\n    const handleHide = useCallback(() => {\n      if (showTimeoutRef.current) clearTimeout(showTimeoutRef.current);\n\n      hideTimeoutRef.current = setTimeout(() => {\n        setIsLeaving(true);\n        leaveTimeoutRef.current = setTimeout(() => {\n          setOpen(false);\n          setIsLeaving(false);\n        }, 150);\n      }, hideDelay);\n    }, [hideDelay, setOpen]);\n\n    // Update position when tooltip becomes visible\n    useEffect(() => {\n      if (isOpen && !isLeaving) {\n        // Wait for next frame to ensure tooltip is rendered\n        requestAnimationFrame(() => {\n          updatePosition();\n        });\n      }\n    }, [isOpen, isLeaving, updatePosition]);\n\n    // Cleanup timeouts on unmount\n    useEffect(() => {\n      return () => {\n        if (showTimeoutRef.current) clearTimeout(showTimeoutRef.current);\n        if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);\n        if (leaveTimeoutRef.current) clearTimeout(leaveTimeoutRef.current);\n      };\n    }, []);\n\n    // Close on scroll or resize\n    useEffect(() => {\n      if (!isOpen) return;\n\n      const handleScrollOrResize = () => {\n        handleHide();\n      };\n\n      window.addEventListener('scroll', handleScrollOrResize, true);\n      window.addEventListener('resize', handleScrollOrResize);\n\n      return () => {\n        window.removeEventListener('scroll', handleScrollOrResize, true);\n        window.removeEventListener('resize', handleScrollOrResize);\n      };\n    }, [isOpen, handleHide]);\n\n    // If no content or disabled (but not in overflow mode), just render children\n    if (!content || (disabled && !onlyWhenOverflow)) {\n      return <>{children}</>;\n    }\n\n    // Combined ref setter that handles both triggerRef and overflow detection ref\n    const setCombinedRef = (node: HTMLElement | null) => {\n      (triggerRef as React.MutableRefObject<HTMLElement | null>).current = node;\n      if (onlyWhenOverflow) {\n        setOverflowRef(node);\n      }\n    };\n\n    // Type for child element props\n    type ChildProps = HTMLAttributes<HTMLElement> & {\n      ref?: React.Ref<HTMLElement>;\n    };\n\n    // Clone child to add event handlers\n    const trigger = isValidElement<ChildProps>(children) ? (\n      cloneElement(children, {\n        ref: setCombinedRef,\n        onMouseEnter: (e: React.MouseEvent<HTMLElement>) => {\n          handleShow();\n          children.props.onMouseEnter?.(e);\n        },\n        onMouseLeave: (e: React.MouseEvent<HTMLElement>) => {\n          handleHide();\n          children.props.onMouseLeave?.(e);\n        },\n        onFocus: (e: React.FocusEvent<HTMLElement>) => {\n          handleShow();\n          children.props.onFocus?.(e);\n        },\n        onBlur: (e: React.FocusEvent<HTMLElement>) => {\n          handleHide();\n          children.props.onBlur?.(e);\n        },\n      } as ChildProps)\n    ) : (\n      <TriggerWrapper\n        ref={(node) => setCombinedRef(node as HTMLElement | null)}\n        onMouseEnter={handleShow}\n        onMouseLeave={handleHide}\n        onFocus={handleShow}\n        onBlur={handleHide}\n        tabIndex={0}\n      >\n        {children}\n      </TriggerWrapper>\n    );\n\n    const tooltipStyles: CSSProperties = {\n      ...contentStyle,\n      top: tooltipPosition.top,\n      left: tooltipPosition.left,\n    };\n\n    return (\n      <>\n        {trigger}\n        {(isOpen || isLeaving) &&\n          createPortal(\n            <TooltipContainer\n              ref={(node) => {\n                (tooltipRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n                if (typeof ref === 'function') {\n                  ref(node);\n                } else if (ref) {\n                  ref.current = node;\n                }\n              }}\n              role=\"tooltip\"\n              style={tooltipStyles}\n              className={contentClassName}\n              $position={position}\n              $maxWidth={maxWidth}\n              $zIndex={zIndex}\n              $isVisible={isOpen && !isLeaving}\n              $isLeaving={isLeaving}\n              data-testid={dataTestId || testId}\n              data-id={dataId}\n              {...rest}\n            >\n              {content}\n              {arrow && <Arrow $position={position} />}\n            </TooltipContainer>,\n            document.body\n          )}\n      </>\n    );\n  }\n);\n\nTooltip.displayName = 'Tooltip';\n\nexport default Tooltip;\n","import { forwardRef } from 'react';\nimport type { CSSProperties } from 'react';\nimport styled from '@emotion/styled';\nimport { keyframes, css } from '@emotion/react';\nimport type { SpinnerProps } from './Spinner.types';\n\n// Keyframe animations\nconst rotate = keyframes`\n  100% {\n    transform: rotate(360deg);\n  }\n`;\n\nconst dash = keyframes`\n  0% {\n    stroke-dasharray: 1, 150;\n    stroke-dashoffset: 0;\n  }\n  50% {\n    stroke-dasharray: 90, 150;\n    stroke-dashoffset: -35;\n  }\n  100% {\n    stroke-dasharray: 90, 150;\n    stroke-dashoffset: -124;\n  }\n`;\n\nconst bounce = keyframes`\n  0%, 80%, 100% {\n    transform: scale(0.8);\n    opacity: 0.5;\n  }\n  40% {\n    transform: scale(1.2);\n    opacity: 1;\n  }\n`;\n\nconst stretch = keyframes`\n  0%, 40%, 100% {\n    transform: scaleY(0.4);\n  }\n  20% {\n    transform: scaleY(1);\n  }\n`;\n\n// Styled components\nconst SpinnerContainer = styled.div<{ $centered?: boolean }>`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  position: relative;\n  --spinner-size: 32px;\n\n  /* Size variants */\n  &[data-size='xs'] {\n    --spinner-size: 16px;\n  }\n\n  &[data-size='sm'] {\n    --spinner-size: 20px;\n  }\n\n  &[data-size='md'] {\n    --spinner-size: 32px;\n  }\n\n  &[data-size='lg'] {\n    --spinner-size: 48px;\n  }\n\n  &[data-size='xl'] {\n    --spinner-size: 64px;\n  }\n\n  /* Centered variant */\n  ${({ $centered }) =>\n    $centered &&\n    `\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n  `}\n\n  /* Speed variants - slowed down for calmer feel */\n  &[data-speed='slow'] {\n    --spinner-duration: 2.5s;\n  }\n\n  &[data-speed='normal'] {\n    --spinner-duration: 1.5s;\n  }\n\n  &[data-speed='fast'] {\n    --spinner-duration: 1s;\n  }\n\n  /* Color variants - use CSS variables with fallback */\n  &[data-color='primary'] {\n    --spinner-color: var(--color-highlight, var(--colour-highlight, #F68D32));\n  }\n\n  &[data-color='secondary'] {\n    --spinner-color: var(--color-secondary, var(--colour-secondary, #6b7280));\n  }\n\n  &[data-color='white'] {\n    --spinner-color: #ffffff;\n  }\n\n  &[data-color='inherit'] {\n    --spinner-color: currentColor;\n  }\n\n  /* Reduced motion */\n  @media (prefers-reduced-motion: reduce) {\n    --spinner-duration: 3s;\n  }\n`;\n\nconst ScreenReaderOnly = styled.span`\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n`;\n\n// Circular variant - indeterminate\nconst Circular = styled.div<{ $isAnimated: boolean }>`\n  width: var(--spinner-size);\n  height: var(--spinner-size);\n  ${({ $isAnimated }) => $isAnimated && css`\n    animation: ${rotate} var(--spinner-duration, 1s) linear infinite;\n  `}\n\n  @media (prefers-reduced-motion: reduce) {\n    animation-timing-function: steps(8, end);\n  }\n`;\n\nconst CircularSvg = styled.svg`\n  width: 100%;\n  height: 100%;\n`;\n\nconst CircularPathBackground = styled.circle`\n  stroke: var(--spinner-color);\n  opacity: 0.2;\n`;\n\nconst CircularPathIndeterminate = styled.circle`\n  stroke: var(--spinner-color);\n  stroke-linecap: round;\n  stroke-dasharray: 90, 150;\n  stroke-dashoffset: 0;\n  animation: ${dash} var(--spinner-duration, 1s) ease-in-out infinite;\n`;\n\n// Smooth border-based spinner variant (like ProcessingOverlay)\nconst SmoothSpinner = styled.div`\n  width: var(--spinner-size);\n  height: var(--spinner-size);\n  border: 3px solid var(--spinner-track-color, rgba(243, 243, 243, 0.3));\n  border-top-color: var(--spinner-color);\n  border-radius: 50%;\n  animation: ${rotate} var(--spinner-duration, 1s) linear infinite;\n\n  @media (prefers-reduced-motion: reduce) {\n    animation-timing-function: steps(8, end);\n  }\n`;\n\nconst CircularPathDeterminate = styled.circle`\n  stroke: var(--spinner-color);\n  stroke-linecap: round;\n  transform: rotate(-90deg);\n  transform-origin: 50% 50%;\n  transition: stroke-dashoffset 0.3s ease-out;\n`;\n\n// Progress label for determinate mode\nconst ProgressLabel = styled.span`\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: calc(var(--spinner-size) * 0.25);\n  font-weight: 600;\n  color: var(--spinner-color);\n  font-family: ${props => props.theme.typography?.fontFamily || '\"Roboto\", sans-serif'};\n`;\n\n// Dots variant\nconst DotsContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: calc(var(--spinner-size) * 0.15);\n  height: var(--spinner-size);\n`;\n\nconst Dot = styled.span<{ $delay: number }>`\n  width: calc(var(--spinner-size) * 0.25);\n  height: calc(var(--spinner-size) * 0.25);\n  background-color: var(--spinner-color);\n  border-radius: 50%;\n  animation: ${bounce} var(--spinner-duration, 1s) ease-in-out infinite;\n  animation-delay: calc(var(--spinner-duration, 1s) * ${({ $delay }) => $delay});\n\n  @media (prefers-reduced-motion: reduce) {\n    animation-timing-function: steps(4, end);\n  }\n`;\n\n// Bars variant\nconst BarsContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: calc(var(--spinner-size) * 0.1);\n  height: var(--spinner-size);\n`;\n\nconst Bar = styled.span<{ $delay: number }>`\n  width: calc(var(--spinner-size) * 0.15);\n  height: 100%;\n  background-color: var(--spinner-color);\n  border-radius: calc(var(--spinner-size) * 0.075);\n  animation: ${stretch} var(--spinner-duration, 1s) ease-in-out infinite;\n  animation-delay: calc(var(--spinner-duration, 1s) * ${({ $delay }) => $delay});\n\n  @media (prefers-reduced-motion: reduce) {\n    animation-timing-function: steps(4, end);\n  }\n`;\n\n/**\n * Calculate the stroke-dashoffset for determinate progress\n */\nfunction calculateDashOffset(value: number, circumference: number): number {\n  const clampedValue = Math.min(100, Math.max(0, value));\n  return circumference - (clampedValue / 100) * circumference;\n}\n\n/**\n * Spinner component - Loading indicator with multiple variants\n * Supports determinate mode and withLabel option\n *\n * @example\n * ```tsx\n * // Circular spinner (default)\n * <Spinner />\n * <Spinner size=\"lg\" color=\"primary\" />\n *\n * // Dots variant\n * <Spinner variant=\"dots\" />\n *\n * // Bars variant\n * <Spinner variant=\"bars\" speed=\"fast\" />\n *\n * // Centered in container\n * <Spinner centered />\n *\n * // Determinate progress\n * <Spinner progressMode=\"determinate\" value={75} withLabel />\n *\n * // Custom size and thickness\n * <Spinner size={48} thickness={6} />\n * ```\n */\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(\n  (\n    {\n      size = 'md',\n      color = 'primary',\n      variant = 'circular',\n      speed = 'normal',\n      label = 'Loading...',\n      centered = false,\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      progressMode = 'indeterminate',\n      value = 0,\n      thickness = 4,\n      withLabel = false,\n      labelFormatter = (v) => `${Math.round(v)}%`,\n      customColor,\n      smooth = false,\n    },\n    ref\n  ) => {\n    // Calculate size value\n    const getSizeValue = (): string | undefined => {\n      if (typeof size === 'number') {\n        return `${size}px`;\n      }\n      return undefined;\n    };\n\n    const sizeValue = getSizeValue();\n\n    // Build inline styles\n    const inlineStyles: CSSProperties = {\n      ...(sizeValue &&\n        ({\n          '--spinner-size': sizeValue,\n        } as CSSProperties)),\n      ...(customColor && ({\n        '--spinner-color': customColor,\n      } as CSSProperties)),\n    };\n\n    // Calculate SVG properties for determinate mode\n    const radius = 20;\n    const circumference = 2 * Math.PI * radius;\n    const dashOffset = calculateDashOffset(value, circumference);\n\n    // Render variant-specific content\n    const renderSpinner = () => {\n      switch (variant) {\n        case 'dots':\n          return (\n            <DotsContainer>\n              <Dot $delay={0} />\n              <Dot $delay={0.15} />\n              <Dot $delay={0.3} />\n            </DotsContainer>\n          );\n\n        case 'bars':\n          return (\n            <BarsContainer>\n              <Bar $delay={0} />\n              <Bar $delay={0.15} />\n              <Bar $delay={0.3} />\n              <Bar $delay={0.45} />\n            </BarsContainer>\n          );\n\n        case 'circular':\n        default:\n          if (progressMode === 'indeterminate') {\n            // Use smooth border-based spinner for consistent rotation rhythm\n            if (smooth) {\n              return <SmoothSpinner />;\n            }\n            // Default stroke-dasharray animation\n            return (\n              <Circular $isAnimated={true}>\n                <CircularSvg viewBox=\"0 0 50 50\">\n                  <CircularPathIndeterminate\n                    cx=\"25\"\n                    cy=\"25\"\n                    r={radius}\n                    fill=\"none\"\n                    strokeWidth={thickness}\n                  />\n                </CircularSvg>\n              </Circular>\n            );\n          }\n\n          // Determinate or static mode\n          return (\n            <Circular $isAnimated={false}>\n              <CircularSvg viewBox=\"0 0 50 50\">\n                {/* Background circle */}\n                <CircularPathBackground\n                  cx=\"25\"\n                  cy=\"25\"\n                  r={radius}\n                  fill=\"none\"\n                  strokeWidth={thickness}\n                />\n                {/* Progress circle */}\n                <CircularPathDeterminate\n                  cx=\"25\"\n                  cy=\"25\"\n                  r={radius}\n                  fill=\"none\"\n                  strokeWidth={thickness}\n                  strokeDasharray={circumference}\n                  strokeDashoffset={dashOffset}\n                />\n              </CircularSvg>\n              {withLabel && (\n                <ProgressLabel aria-hidden=\"true\">\n                  {labelFormatter(value)}\n                </ProgressLabel>\n              )}\n            </Circular>\n          );\n      }\n    };\n\n    // Build aria-label based on mode\n    const ariaLabel =\n      progressMode === 'determinate' || progressMode === 'static'\n        ? `${label} ${Math.round(value)}%`\n        : label;\n\n    return (\n      <SpinnerContainer\n        ref={ref}\n        className={className}\n        style={inlineStyles}\n        role=\"progressbar\"\n        aria-live=\"polite\"\n        aria-label={ariaLabel}\n        aria-valuenow={progressMode !== 'indeterminate' ? Math.round(value) : undefined}\n        aria-valuemin={progressMode !== 'indeterminate' ? 0 : undefined}\n        aria-valuemax={progressMode !== 'indeterminate' ? 100 : undefined}\n        data-variant={variant}\n        data-size={typeof size === 'string' ? size : 'custom'}\n        data-color={customColor ? 'custom' : color}\n        data-speed={speed}\n        data-progress-mode={progressMode}\n        data-smooth={smooth ? 'true' : undefined}\n        data-centered={centered ? 'true' : undefined}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n        $centered={centered}\n      >\n        {renderSpinner()}\n        <ScreenReaderOnly>{ariaLabel}</ScreenReaderOnly>\n      </SpinnerContainer>\n    );\n  }\n);\n\nSpinner.displayName = 'Spinner';\n\nexport default Spinner;\n","import { forwardRef } from 'react';\nimport styled from '@emotion/styled';\nimport { css } from '@emotion/react';\nimport { Tooltip } from '../Tooltip';\nimport { Spinner } from '../Spinner';\nimport type { ButtonProps } from './Button.types';\nimport type { Theme } from '../../theme';\n\n// Spinner size mapping for button sizes\nconst spinnerSizeMap: Record<NonNullable<ButtonProps['size']>, 'xs' | 'sm'> = {\n  xs: 'xs',\n  sm: 'xs',\n  md: 'sm',\n  lg: 'sm',\n};\n\n/**\n * Size mappings for different button sizes\n * Uses theme typography for font sizes to support accessibility scaling\n * Heights aligned with Input, Select, and Multiselect components:\n * - sm: 32px\n * - md: 36px\n * - lg: 48px\n */\nconst getSizeStyles = (size: NonNullable<ButtonProps['size']>, theme: Theme) => {\n  const { fontSize } = theme.typography;\n  \n  switch (size) {\n    case 'xs':\n      return css`\n        min-width: 24px;\n        min-height: 24px;\n        padding: 0 4px;\n        font-size: ${fontSize.xs};\n      `;\n    case 'sm':\n      return css`\n        height: 32px;\n        padding: 4px 8px;\n        font-size: ${fontSize.xs};\n      `;\n    case 'md':\n      return css`\n        height: 36px;\n        padding: 8px 12px;\n        font-size: ${fontSize.base};\n      `;\n    case 'lg':\n      return css`\n        height: 48px;\n        padding: 12px 16px;\n        font-size: ${fontSize.lg};\n      `;\n  }\n};\n\n/**\n * Styled Button component with ib-ui aligned styles\n */\nconst StyledButton = styled.button<{\n  $variant: NonNullable<ButtonProps['variant']>;\n  $size: NonNullable<ButtonProps['size']>;\n  $fullWidth: boolean;\n  $loading: boolean;\n  $active: boolean;\n  $width?: number;\n  $hasLeftIcon: boolean;\n  $hasRightIcon: boolean;\n  $iconButton: boolean;\n  $showHelpCursor: boolean;\n  $fontWeight: 'bold' | 'normal';\n  $outlineColor?: string;\n  $backgroundColor?: string;\n  $textColor?: string;\n}>`\n  /* Base styles */\n  box-sizing: border-box;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  flex-shrink: 0;\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  border: 1px solid transparent;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-weight: ${({ theme, $fontWeight }) =>\n    $fontWeight === 'normal' ? theme.typography.fontWeight.regular : theme.typography.fontWeight.semibold};\n  line-height: ${({ theme }) => theme.typography.lineHeight.relaxed};\n  white-space: nowrap;\n  text-decoration: none;\n  transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, opacity 0.2s ease;\n\n  /* Cursor */\n  cursor: ${({ disabled, $loading, $showHelpCursor }) => {\n    if (disabled || $loading) return 'not-allowed';\n    if ($showHelpCursor) return 'help';\n    return 'pointer';\n  }};\n\n  /* Width handling */\n  ${({ $fullWidth }) => $fullWidth && 'width: 100%;'}\n  ${({ $width }) => $width && `width: ${$width}px;`}\n\n  /* Size styles - uses theme typography for font sizes to support accessibility scaling */\n  ${({ $size, theme }) => getSizeStyles($size, theme)}\n\n  /* Adjust padding and dimensions for icon-only buttons (square) and icon positioning */\n  ${({ $size, $iconButton, $hasLeftIcon, $hasRightIcon }) => {\n    if ($size === 'xs') {\n      if ($iconButton) return 'width: 24px; height: 24px; padding: 0;';\n      if ($hasLeftIcon && !$hasRightIcon) return 'padding: 0 4px 0 1px;';\n      if ($hasRightIcon && !$hasLeftIcon) return 'padding: 0 1px 0 4px;';\n      if ($hasLeftIcon && $hasRightIcon) return 'padding: 0 1px;';\n    }\n    if ($size === 'sm') {\n      if ($iconButton) return 'width: 32px; height: 32px; padding: 0;';\n      if ($hasLeftIcon && !$hasRightIcon) return 'padding: 4px 8px 4px 4px;';\n      if ($hasRightIcon && !$hasLeftIcon) return 'padding: 4px 4px 4px 8px;';\n      if ($hasLeftIcon && $hasRightIcon) return 'padding: 4px 4px;';\n    }\n    if ($size === 'md') {\n      if ($iconButton) return 'width: 36px; height: 36px; padding: 0;';\n      if ($hasLeftIcon && !$hasRightIcon) return 'padding: 8px 12px 8px 7px;';\n      if ($hasRightIcon && !$hasLeftIcon) return 'padding: 8px 7px 8px 12px;';\n      if ($hasLeftIcon && $hasRightIcon) return 'padding: 8px 8px 8px 7px;';\n    }\n    if ($size === 'lg') {\n      if ($iconButton) return 'width: 48px; height: 48px; padding: 0;';\n      if ($hasLeftIcon && !$hasRightIcon) return 'padding: 12px 16px 12px 10px;';\n      if ($hasRightIcon && !$hasLeftIcon) return 'padding: 12px 10px 12px 16px;';\n      if ($hasLeftIcon && $hasRightIcon) return 'padding: 12px 10px;';\n    }\n    return '';\n  }}\n\n  /* Color variants */\n  ${({ $variant, $active, $outlineColor, $backgroundColor, $textColor, theme }) => {\n    const transparentBlack05 = 'rgba(0, 0, 0, 0.05)';\n    const transparentBlack08 = 'rgba(0, 0, 0, 0.08)';\n    const transparentBlack20 = 'rgba(0, 0, 0, 0.20)';\n    const transparentBlack50 = 'rgba(0, 0, 0, 0.50)';\n    const transparentWhite20 = 'rgba(255, 255, 255, 0.20)';\n    const grey600 = theme.colors.grey[600];\n    const grey700 = theme.colors.grey[700];\n    const greenBase = theme.colors.semantic.green.base;\n    const redBase = theme.colors.semantic.red.base;\n    const orangeBase = theme.colors.semantic.orange.base;\n    const highlightColor = theme.colors.highlight;\n    const highlightText = theme.colors.highlightText;\n    const white = theme.colors.white;\n\n    switch ($variant) {\n      case 'primary':\n        return css`\n          background-color: ${$backgroundColor || highlightColor};\n          border-color: ${$backgroundColor || highlightColor};\n          color: ${$textColor || highlightText};\n\n          &:hover:not([disabled]) {\n            position: relative;\n            &::before {\n              content: '';\n              position: absolute;\n              top: 0;\n              left: 0;\n              right: 0;\n              bottom: 0;\n              background-color: ${transparentBlack05};\n              border-radius: 4px;\n              pointer-events: none;\n            }\n          }\n\n          &:disabled {\n            opacity: 0.5;\n          }\n        `;\n\n      case 'primaryInverse':\n        return css`\n          background-color: transparent;\n          border-color: ${white};\n          color: ${white};\n\n          &:hover:not([disabled]) {\n            border-color: ${white}80;\n          }\n\n          &:disabled {\n            border-color: ${transparentWhite20};\n            opacity: 0.5;\n          }\n        `;\n\n      case 'secondary':\n        if ($active) {\n          return css`\n            background-color: ${transparentBlack05};\n            border-color: ${transparentBlack05};\n            color: ${grey600};\n\n            &:hover:not([disabled]) {\n              background-color: ${transparentBlack08};\n              border-color: transparent;\n              color: ${grey700};\n            }\n          `;\n        }\n        return css`\n          background-color: transparent;\n          border-color: ${transparentBlack20};\n          color: ${grey600};\n\n          &:hover:not([disabled]) {\n            border-color: ${transparentBlack50};\n            color: ${grey700};\n          }\n\n          &:active:not([disabled]) {\n            background-color: ${transparentBlack05};\n            border-color: ${transparentBlack05};\n          }\n\n          &:disabled {\n            border-color: ${transparentBlack20};\n            opacity: 0.5;\n          }\n        `;\n\n      case 'secondaryInverse':\n        return css`\n          background-color: transparent;\n          border-color: ${grey600};\n          color: ${grey600};\n\n          &:hover:not([disabled]) {\n            border-color: ${grey600}80;\n          }\n\n          &:disabled {\n            border-color: ${transparentWhite20};\n            opacity: 0.5;\n          }\n        `;\n\n      case 'ghost':\n        if ($active) {\n          return css`\n            background-color: ${transparentBlack05};\n            border-color: transparent;\n            color: ${grey600};\n\n            &:hover:not([disabled]) {\n              background-color: ${transparentBlack08};\n              color: ${grey700};\n            }\n          `;\n        }\n        return css`\n          background-color: transparent;\n          border-color: transparent;\n          color: ${grey600};\n\n          &:hover:not([disabled]) {\n            background-color: ${transparentBlack05};\n            color: ${grey700};\n          }\n\n          &:active:not([disabled]) {\n            background-color: ${transparentBlack05};\n          }\n\n          &:disabled {\n            opacity: 0.5;\n          }\n        `;\n\n      case 'ghostInverse':\n        return css`\n          background-color: transparent;\n          border-color: transparent;\n          color: ${white};\n\n          &:hover:not([disabled]) {\n            border-color: ${white}80;\n          }\n\n          &:disabled {\n            opacity: 0.5;\n          }\n        `;\n\n      case 'ghostDanger':\n        return css`\n          background-color: transparent;\n          border-color: transparent;\n          color: ${grey600};\n\n          &:hover:not([disabled]) {\n            background-color: ${theme.colors.semantic.red.lighter};\n            color: ${redBase};\n          }\n\n          &:active:not([disabled]) {\n            background-color: ${theme.colors.semantic.red.light};\n          }\n\n          &:disabled {\n            opacity: 0.5;\n          }\n        `;\n\n      case 'link':\n        return css`\n          background-color: transparent;\n          border-color: transparent;\n          color: ${theme.colors.semantic.blue.link};\n          text-decoration: underline;\n          padding: 0 4px;\n          height: auto;\n          min-height: auto;\n          font-weight: ${theme.typography.fontWeight.regular};\n\n          &:hover:not([disabled]) {\n            color: ${theme.colors.semantic.blue.dark};\n          }\n\n          &:active:not([disabled]) {\n            color: ${theme.colors.semantic.blue.darker};\n          }\n\n          &:disabled {\n            opacity: 0.5;\n          }\n        `;\n\n      case 'positive':\n        return css`\n          background-color: ${$backgroundColor || greenBase};\n          border-color: ${$backgroundColor || greenBase};\n          color: ${$textColor || white};\n\n          &:hover:not([disabled]) {\n            position: relative;\n            &::before {\n              content: '';\n              position: absolute;\n              top: 0;\n              left: 0;\n              right: 0;\n              bottom: 0;\n              background-color: ${transparentBlack05};\n              border-radius: 4px;\n              pointer-events: none;\n            }\n          }\n\n          &:disabled {\n            opacity: 0.5;\n          }\n        `;\n\n      case 'danger':\n      case 'destructive':\n        return css`\n          background-color: ${$backgroundColor || redBase};\n          border-color: ${$backgroundColor || redBase};\n          color: ${$textColor || white};\n\n          &:hover:not([disabled]) {\n            position: relative;\n            &::before {\n              content: '';\n              position: absolute;\n              top: 0;\n              left: 0;\n              right: 0;\n              bottom: 0;\n              background-color: ${transparentBlack05};\n              border-radius: 4px;\n              pointer-events: none;\n            }\n          }\n\n          &:disabled {\n            opacity: 0.5;\n          }\n        `;\n\n      case 'outlinePrimary':\n        return css`\n          background-color: transparent;\n          border-color: ${white};\n          color: ${white};\n\n          &:hover:not([disabled]) {\n            border-color: ${white}80;\n          }\n\n          &:disabled {\n            border-color: ${transparentWhite20};\n            opacity: 0.5;\n          }\n        `;\n\n      case 'outlineSecondary':\n        return css`\n          background-color: transparent;\n          border-color: ${$outlineColor || grey600};\n          color: ${$outlineColor || grey600};\n\n          &:hover:not([disabled]) {\n            border-color: ${$outlineColor || grey600}80;\n          }\n\n          &:disabled {\n            border-color: ${transparentBlack20};\n            opacity: 0.5;\n          }\n        `;\n\n      case 'outlineSuccess':\n        return css`\n          background-color: transparent;\n          border-color: ${$outlineColor || greenBase};\n          color: ${$outlineColor || greenBase};\n\n          &:hover:not([disabled]) {\n            border-color: ${$outlineColor || greenBase}80;\n          }\n\n          &:disabled {\n            border-color: ${transparentBlack20};\n            opacity: 0.5;\n          }\n        `;\n\n      case 'outlineError':\n      case 'outlineDanger':\n        return css`\n          background-color: transparent;\n          border-color: ${$outlineColor || redBase};\n          color: ${$outlineColor || redBase};\n\n          &:hover:not([disabled]) {\n            border-color: ${$outlineColor || redBase}80;\n          }\n\n          &:disabled {\n            border-color: ${transparentBlack20};\n            opacity: 0.5;\n          }\n        `;\n\n      case 'outlineWarning':\n        return css`\n          background-color: transparent;\n          border-color: ${$outlineColor || orangeBase};\n          color: ${$outlineColor || orangeBase};\n\n          &:hover:not([disabled]) {\n            border-color: ${$outlineColor || orangeBase}80;\n          }\n\n          &:disabled {\n            border-color: ${transparentBlack20};\n            opacity: 0.5;\n          }\n        `;\n\n      default:\n        return css`\n          background-color: ${$backgroundColor || highlightColor};\n          border-color: ${$backgroundColor || highlightColor};\n          color: ${$textColor || highlightText};\n\n          &:disabled {\n            opacity: 0.5;\n          }\n        `;\n    }\n  }}\n\n  /* Focus state */\n  &:focus {\n    outline: none;\n  }\n\n  &:focus-visible {\n    outline: 2px solid ${({ theme }) => theme.colors.highlight};\n    outline-offset: 2px;\n  }\n\n  /* Loading state pointer events */\n  ${({ $loading }) =>\n    $loading &&\n    css`\n      pointer-events: none;\n    `}\n`;\n\n/**\n * Wrapper for positioning the Spinner component in loading state\n */\nconst SpinnerWrapper = styled.span`\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n`;\n\n/**\n * Content wrapper - hidden when loading\n */\nconst Content = styled.span<{ $loading: boolean }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 4px;\n  visibility: ${({ $loading }) => ($loading ? 'hidden' : 'visible')};\n\n  /* Text truncation */\n  .button-label {\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n  }\n\n  > svg {\n    flex-shrink: 0;\n  }\n`;\n\n/**\n * Icon wrapper\n */\nconst IconWrapper = styled.span<{ $size: NonNullable<ButtonProps['size']> }>`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n\n  svg {\n    ${({ $size }) => {\n      const iconSize = $size === 'xs' ? 16 : 24;\n      return css`\n        width: ${iconSize}px;\n        height: ${iconSize}px;\n      `;\n    }}\n  }\n`;\n\n/**\n * Button component - A versatile button for user interactions\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Button variant=\"primary\" onClick={handleClick}>\n *   Click me\n * </Button>\n *\n * // With loading state\n * <Button variant=\"secondary\" size=\"lg\" loading>\n *   Loading...\n * </Button>\n *\n * // With icons\n * <Button variant=\"ghost\" leftIcon={<Icon name=\"search\" />}>\n *   Search\n * </Button>\n *\n * // With tooltip\n * <Button variant=\"primary\" tooltip=\"Save your changes\">\n *   Save\n * </Button>\n *\n * // New variants from ib-ui\n * <Button variant=\"positive\">Success</Button>\n * <Button variant=\"destructive\">Delete</Button>\n * <Button variant=\"primaryInverse\">Inverse</Button>\n *\n * // Active state for toggles\n * <Button variant=\"ghost\" active={isActive}>\n *   Toggle\n * </Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n  (\n    {\n      children,\n      variant = 'primary',\n      size = 'md',\n      fullWidth = false,\n      disabled = false,\n      loading = false,\n      icon,\n      leftIcon,\n      rightIcon,\n      type = 'button',\n      onClick,\n      className,\n      active = false,\n      tooltip,\n      tooltipProps,\n      width,\n      showHelpCursor = false,\n      fontWeight = 'bold',\n      outlineColor,\n      backgroundColor,\n      textColor,\n      'aria-label': ariaLabel,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      ...rest\n    },\n    ref\n  ) => {\n    const isDisabled = disabled || loading;\n    const effectiveLeftIcon = icon || leftIcon;\n    const hasLeftIcon = !!effectiveLeftIcon;\n    const hasRightIcon = !!rightIcon;\n    const iconButton = !children && (hasLeftIcon || hasRightIcon);\n\n    const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n      if (isDisabled) {\n        event.preventDefault();\n        return;\n      }\n      event.currentTarget.blur();\n      onClick?.(event);\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n      if (isDisabled && (event.key === 'Enter' || event.key === ' ')) {\n        event.preventDefault();\n        return;\n      }\n      if (event.key === 'Escape') {\n        event.currentTarget.blur();\n      }\n    };\n\n    const buttonElement = (\n      <StyledButton\n        ref={ref}\n        type={type}\n        className={className}\n        disabled={isDisabled}\n        onClick={handleClick}\n        onKeyDown={handleKeyDown}\n        aria-label={ariaLabel}\n        aria-disabled={isDisabled}\n        aria-busy={loading}\n        aria-pressed={active}\n        data-testid={dataTestId || testId || `button-${variant}`}\n        data-id={dataId}\n        $variant={variant}\n        $size={size}\n        $fullWidth={fullWidth}\n        $loading={loading}\n        $active={active}\n        $width={width}\n        $hasLeftIcon={hasLeftIcon}\n        $hasRightIcon={hasRightIcon}\n        $iconButton={iconButton}\n        $showHelpCursor={showHelpCursor}\n        $fontWeight={fontWeight}\n        $outlineColor={outlineColor}\n        $backgroundColor={backgroundColor}\n        $textColor={textColor}\n        {...rest}\n      >\n        {loading && (\n          <SpinnerWrapper aria-hidden=\"true\">\n            <Spinner size={spinnerSizeMap[size]} color=\"inherit\" smooth />\n          </SpinnerWrapper>\n        )}\n        <Content $loading={loading}>\n          {effectiveLeftIcon && (\n            <IconWrapper aria-hidden=\"true\" $size={size}>\n              {effectiveLeftIcon}\n            </IconWrapper>\n          )}\n          {children && <span className=\"button-label\">{children}</span>}\n          {rightIcon && (\n            <IconWrapper aria-hidden=\"true\" $size={size}>\n              {rightIcon}\n            </IconWrapper>\n          )}\n        </Content>\n      </StyledButton>\n    );\n\n    if (tooltip) {\n      return (\n        <Tooltip\n          content={tooltip}\n          position={tooltipProps?.position || 'bottom'}\n          delay={tooltipProps?.delay}\n          hideDelay={tooltipProps?.hideDelay}\n          maxWidth={tooltipProps?.maxWidth}\n          zIndex={tooltipProps?.zIndex}\n        >\n          {buttonElement}\n        </Tooltip>\n      );\n    }\n\n    return buttonElement;\n  }\n);\n\nButton.displayName = 'Button';\n\nexport default Button;\n","import styled from '@emotion/styled';\nimport { forwardRef } from 'react';\n\nimport type {\n  CardProps,\n  CardHeaderProps,\n  CardMediaProps,\n  CardContentProps,\n  CardActionsProps,\n} from './Card.types';\nimport type { Theme } from '../../theme';\n\nconst StyledCard = styled.div<{\n  variant: 'elevated' | 'outlined' | 'filled';\n  interactive: boolean;\n  selected: boolean;\n  padding: 'none' | 'sm' | 'md' | 'lg';\n  disabled?: boolean;\n}>`\n  display: flex;\n  flex-direction: column;\n  border-radius: ${({ theme }) => (theme as Theme).borders.radius.sm};\n  background-color: ${({ theme }) => (theme as Theme).colors.background.default};\n  transition: ${({ theme }) => (theme as Theme).transitions.fast};\n  overflow: hidden;\n  opacity: ${({ disabled }) => (disabled ? 0.6 : 1)};\n  cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'default')};\n\n  ${({ variant, theme }) =>\n    variant === 'elevated' &&\n    `\n    box-shadow: ${(theme as Theme).shadows.card};\n    \n    &:hover {\n      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);\n    }\n  `}\n\n  ${({ variant, theme }) =>\n    variant === 'outlined' &&\n    `\n    border: ${(theme as Theme).borders.width.thin} solid ${(theme as Theme).colors.border.medium};\n    box-shadow: none;\n    \n    &:hover {\n      border-color: ${(theme as Theme).colors.border.input};\n    }\n  `}\n\n  ${({ variant, theme }) =>\n    variant === 'filled' &&\n    `\n    background-color: ${(theme as Theme).colors.border.light};\n    box-shadow: none;\n  `}\n\n  ${({ interactive, disabled, theme }) =>\n    interactive &&\n    !disabled &&\n    `\n    cursor: pointer;\n    \n    &:hover {\n      transform: translateY(-2px);\n    }\n    \n    &:active {\n      transform: translateY(0);\n    }\n    \n    &:focus-visible {\n      outline: 2px solid ${(theme as Theme).colors.highlight};\n      outline-offset: 2px;\n    }\n  `}\n\n  ${({ selected, theme }) =>\n    selected &&\n    `\n    border: 2px solid ${(theme as Theme).colors.highlight};\n    box-shadow: 0 0 0 3px color-mix(in srgb, ${(theme as Theme).colors.highlight} 20%, transparent);\n  `}\n\n  ${({ padding, theme }) =>\n    padding === 'sm' &&\n    `\n    padding: ${(theme as Theme).spacing[3]};\n  `}\n\n  ${({ padding, theme }) =>\n    padding === 'md' &&\n    `\n    padding: ${(theme as Theme).spacing[6]};\n  `}\n\n  ${({ padding, theme }) =>\n    padding === 'lg' &&\n    `\n    padding: ${(theme as Theme).spacing[7]};\n  `}\n`;\n\nconst StyledHeader = styled.div`\n  padding: ${({ theme }) => (theme as Theme).spacing[6]};\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xl};\n  font-weight: ${({ theme }) => (theme as Theme).typography.fontWeight.semibold};\n  color: ${({ theme }) => (theme as Theme).colors.text.primary};\n  border-bottom: ${({ theme }) => (theme as Theme).borders.width.thin} solid ${({ theme }) => (theme as Theme).colors.border.medium};\n`;\n\nconst StyledMedia = styled.div<{\n  aspectRatio: '1:1' | '4:3' | '16:9' | '3:2';\n}>`\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n  background-color: ${({ theme }) => (theme as Theme).colors.border.light};\n\n  img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  ${({ aspectRatio }) => {\n    const ratioMap = {\n      '1:1': '1 / 1',\n      '4:3': '4 / 3',\n      '16:9': '16 / 9',\n      '3:2': '3 / 2',\n    };\n    return `aspect-ratio: ${ratioMap[aspectRatio]};`;\n  }}\n`;\n\nconst StyledContent = styled.div`\n  padding: ${({ theme }) => (theme as Theme).spacing[6]};\n  color: ${({ theme }) => (theme as Theme).colors.text.secondary};\n  flex: 1;\n`;\n\nconst StyledActions = styled.div<{\n  align: 'left' | 'right' | 'center' | 'space-between';\n}>`\n  display: flex;\n  gap: ${({ theme }) => (theme as Theme).spacing[3]};\n  padding: ${({ theme }) => (theme as Theme).spacing[6]};\n  border-top: ${({ theme }) => (theme as Theme).borders.width.thin} solid ${({ theme }) => (theme as Theme).colors.border.light};\n\n  ${({ align }) => {\n    const alignMap: Record<string, string> = {\n      left: 'flex-start',\n      right: 'flex-end',\n      center: 'center',\n      'space-between': 'space-between',\n    };\n    return `justify-content: ${alignMap[align]};`;\n  }}\n`;\n\nconst Card = forwardRef<HTMLDivElement, CardProps>(\n  (\n    {\n      children,\n      variant = 'elevated',\n      interactive = false,\n      selected = false,\n      disabled = false,\n      padding = 'none',\n      onClick,\n      onDoubleClick,\n      className = '',\n      style,\n      role,\n      'aria-label': ariaLabel,\n      'aria-disabled': ariaDisabled,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (onClick && interactive && !disabled) {\n        onClick(event);\n      }\n    };\n\n    const handleDoubleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (onDoubleClick && interactive && !disabled) {\n        onDoubleClick(event);\n      }\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n      if (interactive && !disabled && (event.key === 'Enter' || event.key === ' ')) {\n        event.preventDefault();\n        onClick?.(event as unknown as React.MouseEvent<HTMLDivElement>);\n      }\n    };\n\n    return (\n      <StyledCard\n        ref={ref}\n        variant={variant}\n        interactive={interactive}\n        selected={selected}\n        disabled={disabled}\n        padding={padding}\n        className={className}\n        style={style}\n        onClick={handleClick}\n        onDoubleClick={handleDoubleClick}\n        onKeyDown={handleKeyDown}\n        role={role || (interactive ? 'button' : undefined)}\n        tabIndex={interactive && !disabled ? 0 : undefined}\n        aria-label={ariaLabel}\n        aria-disabled={ariaDisabled || disabled}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {children}\n      </StyledCard>\n    );\n  }\n);\n\nCard.displayName = 'Card';\n\nconst CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n  ({ children, className = '', 'data-testid': testId, dataTestId, dataId }, ref) => {\n    return (\n      <StyledHeader\n        ref={ref}\n        className={className}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {children}\n      </StyledHeader>\n    );\n  }\n);\n\nCardHeader.displayName = 'Card.Header';\n\nconst CardMedia = forwardRef<HTMLDivElement, CardMediaProps>(\n  (\n    {\n      src,\n      alt,\n      aspectRatio = '16:9',\n      className = '',\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    return (\n      <StyledMedia\n        ref={ref}\n        aspectRatio={aspectRatio}\n        className={className}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        <img src={src} alt={alt} loading=\"lazy\" />\n      </StyledMedia>\n    );\n  }\n);\n\nCardMedia.displayName = 'Card.Media';\n\nconst CardContent = forwardRef<HTMLDivElement, CardContentProps>(\n  ({ children, className = '', 'data-testid': testId, dataTestId, dataId }, ref) => {\n    return (\n      <StyledContent\n        ref={ref}\n        className={className}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {children}\n      </StyledContent>\n    );\n  }\n);\n\nCardContent.displayName = 'Card.Content';\n\nconst CardActions = forwardRef<HTMLDivElement, CardActionsProps>(\n  (\n    {\n      children,\n      align = 'right',\n      className = '',\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    return (\n      <StyledActions\n        ref={ref}\n        align={align}\n        className={className}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {children}\n      </StyledActions>\n    );\n  }\n);\n\nCardActions.displayName = 'Card.Actions';\n\nconst CardWithCompounds = Object.assign(Card, {\n  Header: CardHeader,\n  Media: CardMedia,\n  Content: CardContent,\n  Actions: CardActions,\n});\n\nexport default CardWithCompounds;","import { forwardRef } from 'react';\nimport styled from '@emotion/styled';\nimport { css, Global } from '@emotion/react';\nimport type { GridProps, GridItemProps } from './Grid.types';\n\n/**\n * Spacing map based on production theme\n */\nconst gapMap = {\n  none: '0',\n  xs: '4px',\n  sm: '8px',\n  md: '16px',\n  lg: '24px',\n  xl: '32px',\n};\n\n/**\n * Alignment map for grid items\n */\nconst alignMap = {\n  start: 'start',\n  center: 'center',\n  end: 'end',\n  stretch: 'stretch',\n};\n\n/**\n * Justify map for grid content\n */\nconst justifyMap = {\n  start: 'start',\n  center: 'center',\n  end: 'end',\n  'space-between': 'space-between',\n  'space-around': 'space-around',\n};\n\n/**\n * Base grid styles\n */\nconst StyledGrid = styled.div<{\n  $gap: keyof typeof gapMap;\n  $align: keyof typeof alignMap;\n  $justify: keyof typeof justifyMap;\n  $isResponsive: boolean;\n}>`\n  display: grid;\n  width: 100%;\n  gap: ${({ $gap }) => gapMap[$gap]};\n  align-items: ${({ $align }) => alignMap[$align]};\n  justify-content: ${({ $justify }) => justifyMap[$justify]};\n`;\n\n/**\n * Grid item styles\n */\nconst StyledGridItem = styled.div<{\n  $isResponsive: boolean;\n}>`\n  min-width: 0;\n  min-height: 0;\n`;\n\n/**\n * Global responsive styles for grid\n * These are needed because CSS-in-JS doesn't support data attribute media queries well\n */\nconst responsiveGridStyles = css`\n  /* Extra small (xs) - 0px+ */\n  [data-columns-xs=\"1\"] { grid-template-columns: repeat(1, 1fr) !important; }\n  [data-columns-xs=\"2\"] { grid-template-columns: repeat(2, 1fr) !important; }\n  [data-columns-xs=\"3\"] { grid-template-columns: repeat(3, 1fr) !important; }\n  [data-columns-xs=\"4\"] { grid-template-columns: repeat(4, 1fr) !important; }\n  [data-columns-xs=\"5\"] { grid-template-columns: repeat(5, 1fr) !important; }\n  [data-columns-xs=\"6\"] { grid-template-columns: repeat(6, 1fr) !important; }\n  [data-columns-xs=\"7\"] { grid-template-columns: repeat(7, 1fr) !important; }\n  [data-columns-xs=\"8\"] { grid-template-columns: repeat(8, 1fr) !important; }\n  [data-columns-xs=\"9\"] { grid-template-columns: repeat(9, 1fr) !important; }\n  [data-columns-xs=\"10\"] { grid-template-columns: repeat(10, 1fr) !important; }\n  [data-columns-xs=\"11\"] { grid-template-columns: repeat(11, 1fr) !important; }\n  [data-columns-xs=\"12\"] { grid-template-columns: repeat(12, 1fr) !important; }\n\n  /* Small (sm) - 640px+ */\n  @media (min-width: 640px) {\n    [data-columns-sm=\"1\"] { grid-template-columns: repeat(1, 1fr) !important; }\n    [data-columns-sm=\"2\"] { grid-template-columns: repeat(2, 1fr) !important; }\n    [data-columns-sm=\"3\"] { grid-template-columns: repeat(3, 1fr) !important; }\n    [data-columns-sm=\"4\"] { grid-template-columns: repeat(4, 1fr) !important; }\n    [data-columns-sm=\"5\"] { grid-template-columns: repeat(5, 1fr) !important; }\n    [data-columns-sm=\"6\"] { grid-template-columns: repeat(6, 1fr) !important; }\n    [data-columns-sm=\"7\"] { grid-template-columns: repeat(7, 1fr) !important; }\n    [data-columns-sm=\"8\"] { grid-template-columns: repeat(8, 1fr) !important; }\n    [data-columns-sm=\"9\"] { grid-template-columns: repeat(9, 1fr) !important; }\n    [data-columns-sm=\"10\"] { grid-template-columns: repeat(10, 1fr) !important; }\n    [data-columns-sm=\"11\"] { grid-template-columns: repeat(11, 1fr) !important; }\n    [data-columns-sm=\"12\"] { grid-template-columns: repeat(12, 1fr) !important; }\n  }\n\n  /* Medium (md) - 768px+ */\n  @media (min-width: 768px) {\n    [data-columns-md=\"1\"] { grid-template-columns: repeat(1, 1fr) !important; }\n    [data-columns-md=\"2\"] { grid-template-columns: repeat(2, 1fr) !important; }\n    [data-columns-md=\"3\"] { grid-template-columns: repeat(3, 1fr) !important; }\n    [data-columns-md=\"4\"] { grid-template-columns: repeat(4, 1fr) !important; }\n    [data-columns-md=\"5\"] { grid-template-columns: repeat(5, 1fr) !important; }\n    [data-columns-md=\"6\"] { grid-template-columns: repeat(6, 1fr) !important; }\n    [data-columns-md=\"7\"] { grid-template-columns: repeat(7, 1fr) !important; }\n    [data-columns-md=\"8\"] { grid-template-columns: repeat(8, 1fr) !important; }\n    [data-columns-md=\"9\"] { grid-template-columns: repeat(9, 1fr) !important; }\n    [data-columns-md=\"10\"] { grid-template-columns: repeat(10, 1fr) !important; }\n    [data-columns-md=\"11\"] { grid-template-columns: repeat(11, 1fr) !important; }\n    [data-columns-md=\"12\"] { grid-template-columns: repeat(12, 1fr) !important; }\n  }\n\n  /* Large (lg) - 1024px+ */\n  @media (min-width: 1024px) {\n    [data-columns-lg=\"1\"] { grid-template-columns: repeat(1, 1fr) !important; }\n    [data-columns-lg=\"2\"] { grid-template-columns: repeat(2, 1fr) !important; }\n    [data-columns-lg=\"3\"] { grid-template-columns: repeat(3, 1fr) !important; }\n    [data-columns-lg=\"4\"] { grid-template-columns: repeat(4, 1fr) !important; }\n    [data-columns-lg=\"5\"] { grid-template-columns: repeat(5, 1fr) !important; }\n    [data-columns-lg=\"6\"] { grid-template-columns: repeat(6, 1fr) !important; }\n    [data-columns-lg=\"7\"] { grid-template-columns: repeat(7, 1fr) !important; }\n    [data-columns-lg=\"8\"] { grid-template-columns: repeat(8, 1fr) !important; }\n    [data-columns-lg=\"9\"] { grid-template-columns: repeat(9, 1fr) !important; }\n    [data-columns-lg=\"10\"] { grid-template-columns: repeat(10, 1fr) !important; }\n    [data-columns-lg=\"11\"] { grid-template-columns: repeat(11, 1fr) !important; }\n    [data-columns-lg=\"12\"] { grid-template-columns: repeat(12, 1fr) !important; }\n  }\n\n  /* Extra large (xl) - 1280px+ */\n  @media (min-width: 1280px) {\n    [data-columns-xl=\"1\"] { grid-template-columns: repeat(1, 1fr) !important; }\n    [data-columns-xl=\"2\"] { grid-template-columns: repeat(2, 1fr) !important; }\n    [data-columns-xl=\"3\"] { grid-template-columns: repeat(3, 1fr) !important; }\n    [data-columns-xl=\"4\"] { grid-template-columns: repeat(4, 1fr) !important; }\n    [data-columns-xl=\"5\"] { grid-template-columns: repeat(5, 1fr) !important; }\n    [data-columns-xl=\"6\"] { grid-template-columns: repeat(6, 1fr) !important; }\n    [data-columns-xl=\"7\"] { grid-template-columns: repeat(7, 1fr) !important; }\n    [data-columns-xl=\"8\"] { grid-template-columns: repeat(8, 1fr) !important; }\n    [data-columns-xl=\"9\"] { grid-template-columns: repeat(9, 1fr) !important; }\n    [data-columns-xl=\"10\"] { grid-template-columns: repeat(10, 1fr) !important; }\n    [data-columns-xl=\"11\"] { grid-template-columns: repeat(11, 1fr) !important; }\n    [data-columns-xl=\"12\"] { grid-template-columns: repeat(12, 1fr) !important; }\n  }\n\n  /* Responsive column spans for Grid.Item */\n  /* Extra small (xs) - 0px+ */\n  [data-col-span-xs=\"1\"] { grid-column: span 1 !important; }\n  [data-col-span-xs=\"2\"] { grid-column: span 2 !important; }\n  [data-col-span-xs=\"3\"] { grid-column: span 3 !important; }\n  [data-col-span-xs=\"4\"] { grid-column: span 4 !important; }\n  [data-col-span-xs=\"5\"] { grid-column: span 5 !important; }\n  [data-col-span-xs=\"6\"] { grid-column: span 6 !important; }\n  [data-col-span-xs=\"7\"] { grid-column: span 7 !important; }\n  [data-col-span-xs=\"8\"] { grid-column: span 8 !important; }\n  [data-col-span-xs=\"9\"] { grid-column: span 9 !important; }\n  [data-col-span-xs=\"10\"] { grid-column: span 10 !important; }\n  [data-col-span-xs=\"11\"] { grid-column: span 11 !important; }\n  [data-col-span-xs=\"12\"] { grid-column: span 12 !important; }\n\n  /* Small (sm) - 640px+ */\n  @media (min-width: 640px) {\n    [data-col-span-sm=\"1\"] { grid-column: span 1 !important; }\n    [data-col-span-sm=\"2\"] { grid-column: span 2 !important; }\n    [data-col-span-sm=\"3\"] { grid-column: span 3 !important; }\n    [data-col-span-sm=\"4\"] { grid-column: span 4 !important; }\n    [data-col-span-sm=\"5\"] { grid-column: span 5 !important; }\n    [data-col-span-sm=\"6\"] { grid-column: span 6 !important; }\n    [data-col-span-sm=\"7\"] { grid-column: span 7 !important; }\n    [data-col-span-sm=\"8\"] { grid-column: span 8 !important; }\n    [data-col-span-sm=\"9\"] { grid-column: span 9 !important; }\n    [data-col-span-sm=\"10\"] { grid-column: span 10 !important; }\n    [data-col-span-sm=\"11\"] { grid-column: span 11 !important; }\n    [data-col-span-sm=\"12\"] { grid-column: span 12 !important; }\n  }\n\n  /* Medium (md) - 768px+ */\n  @media (min-width: 768px) {\n    [data-col-span-md=\"1\"] { grid-column: span 1 !important; }\n    [data-col-span-md=\"2\"] { grid-column: span 2 !important; }\n    [data-col-span-md=\"3\"] { grid-column: span 3 !important; }\n    [data-col-span-md=\"4\"] { grid-column: span 4 !important; }\n    [data-col-span-md=\"5\"] { grid-column: span 5 !important; }\n    [data-col-span-md=\"6\"] { grid-column: span 6 !important; }\n    [data-col-span-md=\"7\"] { grid-column: span 7 !important; }\n    [data-col-span-md=\"8\"] { grid-column: span 8 !important; }\n    [data-col-span-md=\"9\"] { grid-column: span 9 !important; }\n    [data-col-span-md=\"10\"] { grid-column: span 10 !important; }\n    [data-col-span-md=\"11\"] { grid-column: span 11 !important; }\n    [data-col-span-md=\"12\"] { grid-column: span 12 !important; }\n  }\n\n  /* Large (lg) - 1024px+ */\n  @media (min-width: 1024px) {\n    [data-col-span-lg=\"1\"] { grid-column: span 1 !important; }\n    [data-col-span-lg=\"2\"] { grid-column: span 2 !important; }\n    [data-col-span-lg=\"3\"] { grid-column: span 3 !important; }\n    [data-col-span-lg=\"4\"] { grid-column: span 4 !important; }\n    [data-col-span-lg=\"5\"] { grid-column: span 5 !important; }\n    [data-col-span-lg=\"6\"] { grid-column: span 6 !important; }\n    [data-col-span-lg=\"7\"] { grid-column: span 7 !important; }\n    [data-col-span-lg=\"8\"] { grid-column: span 8 !important; }\n    [data-col-span-lg=\"9\"] { grid-column: span 9 !important; }\n    [data-col-span-lg=\"10\"] { grid-column: span 10 !important; }\n    [data-col-span-lg=\"11\"] { grid-column: span 11 !important; }\n    [data-col-span-lg=\"12\"] { grid-column: span 12 !important; }\n  }\n\n  /* Extra large (xl) - 1280px+ */\n  @media (min-width: 1280px) {\n    [data-col-span-xl=\"1\"] { grid-column: span 1 !important; }\n    [data-col-span-xl=\"2\"] { grid-column: span 2 !important; }\n    [data-col-span-xl=\"3\"] { grid-column: span 3 !important; }\n    [data-col-span-xl=\"4\"] { grid-column: span 4 !important; }\n    [data-col-span-xl=\"5\"] { grid-column: span 5 !important; }\n    [data-col-span-xl=\"6\"] { grid-column: span 6 !important; }\n    [data-col-span-xl=\"7\"] { grid-column: span 7 !important; }\n    [data-col-span-xl=\"8\"] { grid-column: span 8 !important; }\n    [data-col-span-xl=\"9\"] { grid-column: span 9 !important; }\n    [data-col-span-xl=\"10\"] { grid-column: span 10 !important; }\n    [data-col-span-xl=\"11\"] { grid-column: span 11 !important; }\n    [data-col-span-xl=\"12\"] { grid-column: span 12 !important; }\n  }\n`;\n\n/**\n * Grid component - A flexible CSS Grid layout component\n *\n * @example\n * ```tsx\n * // Fixed 3 columns\n * <Grid columns={3} gap=\"md\">\n *   <Card>...</Card>\n *   <Card>...</Card>\n *   <Card>...</Card>\n * </Grid>\n *\n * // Responsive columns\n * <Grid columns={{ xs: 1, sm: 2, md: 3, lg: 4 }} gap=\"lg\">\n *   {items.map(item => <Card key={item.id}>...</Card>)}\n * </Grid>\n *\n * // Auto-fit responsive\n * <Grid autoFit minColumnWidth=\"200px\" gap=\"md\">\n *   {items.map(item => <Card key={item.id}>...</Card>)}\n * </Grid>\n *\n * // With explicit grid items\n * <Grid columns={4} gap=\"md\">\n *   <Grid.Item colSpan={2}>Wide item</Grid.Item>\n *   <Grid.Item>Normal item</Grid.Item>\n *   <Grid.Item>Normal item</Grid.Item>\n * </Grid>\n * ```\n */\nexport const Grid = forwardRef<HTMLDivElement, GridProps>(\n  (\n    {\n      children,\n      columns = 1,\n      gap = 'md',\n      align = 'stretch',\n      justify = 'start',\n      autoFit = false,\n      minColumnWidth = '250px',\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const isResponsive = typeof columns === 'object';\n    \n    // Build inline styles for auto-fit mode or fixed columns\n    const inlineStyles: React.CSSProperties = {};\n    \n    if (autoFit) {\n      inlineStyles.gridTemplateColumns = `repeat(auto-fit, minmax(${minColumnWidth}, 1fr))`;\n    } else if (typeof columns === 'number') {\n      inlineStyles.gridTemplateColumns = `repeat(${columns}, 1fr)`;\n    }\n\n    return (\n      <>\n        {isResponsive && <Global styles={responsiveGridStyles} />}\n        <StyledGrid\n          ref={ref}\n          className={className}\n          style={inlineStyles}\n          $gap={gap}\n          $align={align}\n          $justify={justify}\n          $isResponsive={isResponsive}\n          data-gap={gap}\n          data-align={align}\n          data-justify={justify}\n          data-columns-xs={isResponsive ? columns.xs : undefined}\n          data-columns-sm={isResponsive ? columns.sm : undefined}\n          data-columns-md={isResponsive ? columns.md : undefined}\n          data-columns-lg={isResponsive ? columns.lg : undefined}\n          data-columns-xl={isResponsive ? columns.xl : undefined}\n          data-testid={dataTestId || testId}\n          data-id={dataId}\n        >\n          {children}\n        </StyledGrid>\n      </>\n    );\n  }\n);\n\nGrid.displayName = 'Grid';\n\n/**\n * Grid.Item component - A grid item with optional column/row spanning\n *\n * @example\n * ```tsx\n * <Grid columns={4}>\n *   <Grid.Item colSpan={2}>Wide item</Grid.Item>\n *   <Grid.Item rowSpan={2}>Tall item</Grid.Item>\n *   <Grid.Item>Normal item</Grid.Item>\n * </Grid>\n * ```\n */\nexport const GridItem = forwardRef<HTMLDivElement, GridItemProps>(\n  (\n    {\n      children,\n      colSpan,\n      rowSpan,\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const isResponsiveColSpan = typeof colSpan === 'object';\n    \n    // Build inline styles for fixed spans\n    const inlineStyles: React.CSSProperties = {};\n    \n    if (typeof colSpan === 'number') {\n      inlineStyles.gridColumn = `span ${colSpan}`;\n    }\n    \n    if (rowSpan) {\n      inlineStyles.gridRow = `span ${rowSpan}`;\n    }\n\n    return (\n      <>\n        {isResponsiveColSpan && <Global styles={responsiveGridStyles} />}\n        <StyledGridItem\n          ref={ref}\n          className={className}\n          style={inlineStyles}\n          $isResponsive={isResponsiveColSpan}\n          data-col-span-xs={isResponsiveColSpan ? colSpan.xs : undefined}\n          data-col-span-sm={isResponsiveColSpan ? colSpan.sm : undefined}\n          data-col-span-md={isResponsiveColSpan ? colSpan.md : undefined}\n          data-col-span-lg={isResponsiveColSpan ? colSpan.lg : undefined}\n          data-col-span-xl={isResponsiveColSpan ? colSpan.xl : undefined}\n          data-row-span={rowSpan}\n          data-testid={dataTestId || testId}\n          data-id={dataId}\n        >\n          {children}\n        </StyledGridItem>\n      </>\n    );\n  }\n);\n\nGridItem.displayName = 'Grid.Item';\n\n// Compound component pattern\nconst GridWithItem = Object.assign(Grid, {\n  Item: GridItem,\n});\n\nexport default GridWithItem;","import { forwardRef } from 'react';\nimport styled from '@emotion/styled';\nimport type { StackProps, StackAlign, StackJustify, SpacingValue } from './Stack.types';\n\n/**\n * Spacing map based on production theme\n */\nconst spacingMap: Record<number, string> = {\n  0: '0',\n  1: '4px',\n  2: '8px',\n  3: '12px',\n  4: '16px',\n  5: '20px',\n  6: '24px',\n  7: '28px',\n  8: '32px',\n  9: '36px',\n  10: '40px',\n};\n\n/**\n * Alignment map for flex items\n */\nconst alignMap: Record<StackAlign, string> = {\n  start: 'flex-start',\n  center: 'center',\n  end: 'flex-end',\n  stretch: 'stretch',\n};\n\n/**\n * Justify map for flex content\n */\nconst justifyMap: Record<StackJustify, string> = {\n  start: 'flex-start',\n  center: 'center',\n  end: 'flex-end',\n  between: 'space-between',\n  around: 'space-around',\n};\n\n/**\n * Helper to resolve spacing value\n */\nconst resolveSpacing = (value: SpacingValue | undefined): string => {\n  if (value === undefined) return '0';\n  if (typeof value === 'number') {\n    return spacingMap[value] || `${value * 4}px`;\n  }\n  return value;\n};\n\n/**\n * Styled Stack container\n */\nconst StyledStack = styled.div<{\n  $direction: 'column' | 'row';\n  $gap: string;\n  $align: string;\n  $justify: string;\n  $wrap: boolean;\n}>`\n  display: flex;\n  flex-direction: ${({ $direction }) => $direction};\n  gap: ${({ $gap }) => $gap};\n  align-items: ${({ $align }) => $align};\n  justify-content: ${({ $justify }) => $justify};\n  flex-wrap: ${({ $wrap, $direction }) => ($direction === 'row' && $wrap ? 'wrap' : 'nowrap')};\n`;\n\n/**\n * Stack component - A flex container with gap that supports both vertical and horizontal layouts\n *\n * @example\n * ```tsx\n * // Vertical stack (default)\n * <Stack gap={4}>\n *   <Child1 />\n *   <Child2 />\n * </Stack>\n *\n * // Horizontal stack\n * <Stack direction=\"horizontal\" gap={2}>\n *   <Button />\n *   <Button />\n * </Stack>\n *\n * // Horizontal with wrapping\n * <Stack direction=\"horizontal\" gap={2} wrap>\n *   {tags.map(tag => <Tag key={tag.id}>{tag.name}</Tag>)}\n * </Stack>\n *\n * // Centered content\n * <Stack gap={2} align=\"center\" justify=\"center\">\n *   <Title />\n *   <Description />\n * </Stack>\n *\n * // As a section element\n * <Stack as=\"section\" gap={3}>\n *   <Header />\n *   <Content />\n * </Stack>\n * ```\n */\nexport const Stack = forwardRef<HTMLElement, StackProps>(\n  (\n    {\n      children,\n      direction = 'vertical',\n      gap = 0,\n      align,\n      justify = 'start',\n      wrap = false,\n      as: Component = 'div',\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      ...rest\n    },\n    ref\n  ) => {\n    // Default align based on direction for backward compatibility\n    // vertical (column): stretch, horizontal (row): center\n    const defaultAlign = direction === 'horizontal' ? 'center' : 'stretch';\n    const resolvedAlign = alignMap[align ?? defaultAlign];\n\n    const resolvedGap = resolveSpacing(gap);\n    const resolvedJustify = justifyMap[justify];\n    const flexDirection = direction === 'horizontal' ? 'row' : 'column';\n\n    return (\n      <StyledStack\n        as={Component}\n        ref={ref as React.Ref<HTMLDivElement>}\n        className={className}\n        $direction={flexDirection}\n        $gap={resolvedGap}\n        $align={resolvedAlign}\n        $justify={resolvedJustify}\n        $wrap={wrap}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n        {...rest}\n      >\n        {children}\n      </StyledStack>\n    );\n  }\n);\n\nStack.displayName = 'Stack';\n\nexport default Stack;\n","import { forwardRef } from 'react';\nimport styled from '@emotion/styled';\nimport { css } from '@emotion/react';\nimport type { BoxProps, SpacingValue, BoxBorderRadius } from './Box.types';\n\n/**\n * Spacing map based on production theme\n */\nconst spacingMap: Record<number, string> = {\n  0: '0',\n  1: '4px',\n  2: '8px',\n  3: '12px',\n  4: '16px',\n  5: '20px',\n  6: '24px',\n  7: '28px',\n  8: '32px',\n  9: '36px',\n  10: '40px',\n};\n\n/**\n * Border radius map\n */\nconst borderRadiusMap: Record<BoxBorderRadius, string> = {\n  none: '0',\n  sm: '4px',\n  md: '8px',\n  lg: '12px',\n  xl: '16px',\n  full: '9999px',\n};\n\n/**\n * Helper to resolve spacing value\n */\nconst resolveSpacing = (value: SpacingValue | undefined): string | undefined => {\n  if (value === undefined) return undefined;\n  if (typeof value === 'number') {\n    return spacingMap[value] || `${value * 4}px`;\n  }\n  return value;\n};\n\n/**\n * Styled Box container\n */\nconst StyledBox = styled.div<{\n  $pt?: string;\n  $pr?: string;\n  $pb?: string;\n  $pl?: string;\n  $mt?: string;\n  $mr?: string;\n  $mb?: string;\n  $ml?: string;\n  $variant?: 'default' | 'accented';\n  $accentColor?: string;\n  $borderRadius?: string;\n}>`\n  padding-top: ${({ $pt }) => $pt};\n  padding-right: ${({ $pr }) => $pr};\n  padding-bottom: ${({ $pb }) => $pb};\n  padding-left: ${({ $pl }) => $pl};\n  margin-top: ${({ $mt }) => $mt};\n  margin-right: ${({ $mr }) => $mr};\n  margin-bottom: ${({ $mb }) => $mb};\n  margin-left: ${({ $ml }) => $ml};\n  border-radius: ${({ $borderRadius }) => $borderRadius};\n\n  ${({ $variant, $accentColor }) =>\n    $variant === 'accented' &&\n    $accentColor &&\n    css`\n      background: linear-gradient(135deg, ${$accentColor}14 0%, rgba(0, 0, 0, 0.02) 100%);\n      border: 1px solid ${$accentColor}26;\n    `}\n`;\n\n/**\n * Box component - A basic container with spacing and visual styling props\n *\n * @example\n * ```tsx\n * // Padding on all sides\n * <Box p={4}>\n *   <Content />\n * </Box>\n *\n * // Horizontal and vertical padding\n * <Box px={4} py={2}>\n *   <Content />\n * </Box>\n *\n * // Individual spacing values\n * <Box pt={4} pb={2} ml={3}>\n *   <Content />\n * </Box>\n *\n * // As a section element\n * <Box as=\"section\" p={4} mb={3}>\n *   <Content />\n * </Box>\n *\n * // Accented variant with custom color (for branded sections)\n * <Box variant=\"accented\" accentColor=\"#6161FF\" p={5} borderRadius=\"md\">\n *   <BrandedContent />\n * </Box>\n * ```\n */\nexport const Box = forwardRef<HTMLElement, BoxProps>(\n  (\n    {\n      children,\n      p,\n      px,\n      py,\n      pt,\n      pr,\n      pb,\n      pl,\n      m,\n      mx,\n      my,\n      mt,\n      mr,\n      mb,\n      ml,\n      variant = 'default',\n      accentColor,\n      borderRadius = 'none',\n      as: Component = 'div',\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      ...rest\n    },\n    ref\n  ) => {\n    // Resolve padding values with priority: individual > axis > all\n    const resolvedPt = resolveSpacing(pt ?? py ?? p);\n    const resolvedPr = resolveSpacing(pr ?? px ?? p);\n    const resolvedPb = resolveSpacing(pb ?? py ?? p);\n    const resolvedPl = resolveSpacing(pl ?? px ?? p);\n\n    // Resolve margin values with priority: individual > axis > all\n    const resolvedMt = resolveSpacing(mt ?? my ?? m);\n    const resolvedMr = resolveSpacing(mr ?? mx ?? m);\n    const resolvedMb = resolveSpacing(mb ?? my ?? m);\n    const resolvedMl = resolveSpacing(ml ?? mx ?? m);\n\n    // Resolve border radius\n    const resolvedBorderRadius = borderRadiusMap[borderRadius];\n\n    return (\n      <StyledBox\n        as={Component}\n        ref={ref as React.Ref<HTMLDivElement>}\n        className={className}\n        $pt={resolvedPt}\n        $pr={resolvedPr}\n        $pb={resolvedPb}\n        $pl={resolvedPl}\n        $mt={resolvedMt}\n        $mr={resolvedMr}\n        $mb={resolvedMb}\n        $ml={resolvedMl}\n        $variant={variant}\n        $accentColor={accentColor}\n        $borderRadius={resolvedBorderRadius}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n        {...rest}\n      >\n        {children}\n      </StyledBox>\n    );\n  }\n);\n\nBox.displayName = 'Box';\n\nexport default Box;\n","import { forwardRef } from 'react';\nimport styled from '@emotion/styled';\nimport type { CenterProps, SpacingValue } from './Center.types';\n\n/**\n * Spacing map based on production theme\n */\nconst spacingMap: Record<number, string> = {\n  0: '0',\n  1: '4px',\n  2: '8px',\n  3: '12px',\n  4: '16px',\n  5: '20px',\n  6: '24px',\n  7: '28px',\n  8: '32px',\n  9: '36px',\n  10: '40px',\n};\n\n/**\n * Helper to resolve spacing value\n */\nconst resolveSpacing = (value: SpacingValue | undefined): string | undefined => {\n  if (value === undefined) return undefined;\n  if (typeof value === 'number') {\n    return spacingMap[value] || `${value * 4}px`;\n  }\n  return value;\n};\n\n/**\n * Styled Center container\n */\nconst StyledCenter = styled.div<{\n  $inline: boolean;\n  $pt?: string;\n  $pr?: string;\n  $pb?: string;\n  $pl?: string;\n  $mt?: string;\n  $mr?: string;\n  $mb?: string;\n  $ml?: string;\n}>`\n  display: ${({ $inline }) => ($inline ? 'inline-flex' : 'flex')};\n  align-items: center;\n  justify-content: center;\n  padding-top: ${({ $pt }) => $pt};\n  padding-right: ${({ $pr }) => $pr};\n  padding-bottom: ${({ $pb }) => $pb};\n  padding-left: ${({ $pl }) => $pl};\n  margin-top: ${({ $mt }) => $mt};\n  margin-right: ${({ $mr }) => $mr};\n  margin-bottom: ${({ $mb }) => $mb};\n  margin-left: ${({ $ml }) => $ml};\n`;\n\n/**\n * Center component - A centered container (flex with center alignment)\n *\n * @example\n * ```tsx\n * // Center a spinner\n * <Center p={4}>\n *   <Spinner />\n * </Center>\n *\n * // Full-page center\n * <Center style={{ height: '100vh' }}>\n *   <Logo />\n * </Center>\n *\n * // Inline centered content\n * <Center inline p={2}>\n *   <Icon />\n * </Center>\n * ```\n */\nexport const Center = forwardRef<HTMLElement, CenterProps>(\n  (\n    {\n      children,\n      p,\n      px,\n      py,\n      pt,\n      pr,\n      pb,\n      pl,\n      m,\n      mx,\n      my,\n      mt,\n      mr,\n      mb,\n      ml,\n      inline = false,\n      as: Component = 'div',\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      ...rest\n    },\n    ref\n  ) => {\n    // Resolve padding values with priority: individual > axis > all\n    const resolvedPt = resolveSpacing(pt ?? py ?? p);\n    const resolvedPr = resolveSpacing(pr ?? px ?? p);\n    const resolvedPb = resolveSpacing(pb ?? py ?? p);\n    const resolvedPl = resolveSpacing(pl ?? px ?? p);\n\n    // Resolve margin values with priority: individual > axis > all\n    const resolvedMt = resolveSpacing(mt ?? my ?? m);\n    const resolvedMr = resolveSpacing(mr ?? mx ?? m);\n    const resolvedMb = resolveSpacing(mb ?? my ?? m);\n    const resolvedMl = resolveSpacing(ml ?? mx ?? m);\n\n    return (\n      <StyledCenter\n        as={Component}\n        ref={ref as React.Ref<HTMLDivElement>}\n        className={className}\n        $inline={inline}\n        $pt={resolvedPt}\n        $pr={resolvedPr}\n        $pb={resolvedPb}\n        $pl={resolvedPl}\n        $mt={resolvedMt}\n        $mr={resolvedMr}\n        $mb={resolvedMb}\n        $ml={resolvedMl}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n        {...rest}\n      >\n        {children}\n      </StyledCenter>\n    );\n  }\n);\n\nCenter.displayName = 'Center';\n\nexport default Center;\n","import $HgANd$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c = typeof document !== 'undefined' ? (0, $HgANd$react).useLayoutEffect : ()=>{};\n\n\nexport {$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c as useLayoutEffect};\n//# sourceMappingURL=useLayoutEffect.module.js.map\n","const $431fbd86ca7dc216$export$b204af158042fbac = (el)=>{\n    var _el_ownerDocument;\n    return (_el_ownerDocument = el === null || el === void 0 ? void 0 : el.ownerDocument) !== null && _el_ownerDocument !== void 0 ? _el_ownerDocument : document;\n};\nconst $431fbd86ca7dc216$export$f21a1ffae260145a = (el)=>{\n    if (el && 'window' in el && el.window === el) return el;\n    const doc = $431fbd86ca7dc216$export$b204af158042fbac(el);\n    return doc.defaultView || window;\n};\n/**\n * Type guard that checks if a value is a Node. Verifies the presence and type of the nodeType property.\n */ function $431fbd86ca7dc216$var$isNode(value) {\n    return value !== null && typeof value === 'object' && 'nodeType' in value && typeof value.nodeType === 'number';\n}\nfunction $431fbd86ca7dc216$export$af51f0f06c0f328a(node) {\n    return $431fbd86ca7dc216$var$isNode(node) && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && 'host' in node;\n}\n\n\nexport {$431fbd86ca7dc216$export$b204af158042fbac as getOwnerDocument, $431fbd86ca7dc216$export$f21a1ffae260145a as getOwnerWindow, $431fbd86ca7dc216$export$af51f0f06c0f328a as isShadowRoot};\n//# sourceMappingURL=domHelpers.module.js.map\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $f4e2df6bd15f8569$var$_tableNestedRows = false;\nlet $f4e2df6bd15f8569$var$_shadowDOM = false;\nfunction $f4e2df6bd15f8569$export$d9d8a0f82de49530() {\n    $f4e2df6bd15f8569$var$_tableNestedRows = true;\n}\nfunction $f4e2df6bd15f8569$export$1b00cb14a96194e6() {\n    return $f4e2df6bd15f8569$var$_tableNestedRows;\n}\nfunction $f4e2df6bd15f8569$export$12b151d9882e9985() {\n    $f4e2df6bd15f8569$var$_shadowDOM = true;\n}\nfunction $f4e2df6bd15f8569$export$98658e8c59125e6a() {\n    return $f4e2df6bd15f8569$var$_shadowDOM;\n}\n\n\nexport {$f4e2df6bd15f8569$export$d9d8a0f82de49530 as enableTableNestedRows, $f4e2df6bd15f8569$export$1b00cb14a96194e6 as tableNestedRows, $f4e2df6bd15f8569$export$12b151d9882e9985 as enableShadowDOM, $f4e2df6bd15f8569$export$98658e8c59125e6a as shadowDOM};\n//# sourceMappingURL=module.js.map\n","import {isShadowRoot as $431fbd86ca7dc216$export$af51f0f06c0f328a} from \"./domHelpers.mjs\";\nimport {shadowDOM as $lcSu5$shadowDOM} from \"@react-stately/flags\";\n\n// Source: https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/DOMFunctions.ts#L16\n\n\nfunction $d4ee10de306f2510$export$4282f70798064fe0(node, otherNode) {\n    if (!(0, $lcSu5$shadowDOM)()) return otherNode && node ? node.contains(otherNode) : false;\n    if (!node || !otherNode) return false;\n    let currentNode = otherNode;\n    while(currentNode !== null){\n        if (currentNode === node) return true;\n        if (currentNode.tagName === 'SLOT' && currentNode.assignedSlot) // Element is slotted\n        currentNode = currentNode.assignedSlot.parentNode;\n        else if ((0, $431fbd86ca7dc216$export$af51f0f06c0f328a)(currentNode)) // Element is in shadow root\n        currentNode = currentNode.host;\n        else currentNode = currentNode.parentNode;\n    }\n    return false;\n}\nconst $d4ee10de306f2510$export$cd4e5573fbe2b576 = (doc = document)=>{\n    var _activeElement_shadowRoot;\n    if (!(0, $lcSu5$shadowDOM)()) return doc.activeElement;\n    let activeElement = doc.activeElement;\n    while(activeElement && 'shadowRoot' in activeElement && ((_activeElement_shadowRoot = activeElement.shadowRoot) === null || _activeElement_shadowRoot === void 0 ? void 0 : _activeElement_shadowRoot.activeElement))activeElement = activeElement.shadowRoot.activeElement;\n    return activeElement;\n};\nfunction $d4ee10de306f2510$export$e58f029f0fbfdb29(event) {\n    if ((0, $lcSu5$shadowDOM)() && event.target.shadowRoot) {\n        if (event.composedPath) return event.composedPath()[0];\n    }\n    return event.target;\n}\n\n\nexport {$d4ee10de306f2510$export$4282f70798064fe0 as nodeContains, $d4ee10de306f2510$export$cd4e5573fbe2b576 as getActiveElement, $d4ee10de306f2510$export$e58f029f0fbfdb29 as getEventTarget};\n//# sourceMappingURL=DOMFunctions.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $7215afc6de606d6b$export$de79e2c695e052f3(element) {\n    if ($7215afc6de606d6b$var$supportsPreventScroll()) element.focus({\n        preventScroll: true\n    });\n    else {\n        let scrollableElements = $7215afc6de606d6b$var$getScrollableElements(element);\n        element.focus();\n        $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements);\n    }\n}\nlet $7215afc6de606d6b$var$supportsPreventScrollCached = null;\nfunction $7215afc6de606d6b$var$supportsPreventScroll() {\n    if ($7215afc6de606d6b$var$supportsPreventScrollCached == null) {\n        $7215afc6de606d6b$var$supportsPreventScrollCached = false;\n        try {\n            let focusElem = document.createElement('div');\n            focusElem.focus({\n                get preventScroll () {\n                    $7215afc6de606d6b$var$supportsPreventScrollCached = true;\n                    return true;\n                }\n            });\n        } catch  {\n        // Ignore\n        }\n    }\n    return $7215afc6de606d6b$var$supportsPreventScrollCached;\n}\nfunction $7215afc6de606d6b$var$getScrollableElements(element) {\n    let parent = element.parentNode;\n    let scrollableElements = [];\n    let rootScrollingElement = document.scrollingElement || document.documentElement;\n    while(parent instanceof HTMLElement && parent !== rootScrollingElement){\n        if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) scrollableElements.push({\n            element: parent,\n            scrollTop: parent.scrollTop,\n            scrollLeft: parent.scrollLeft\n        });\n        parent = parent.parentNode;\n    }\n    if (rootScrollingElement instanceof HTMLElement) scrollableElements.push({\n        element: rootScrollingElement,\n        scrollTop: rootScrollingElement.scrollTop,\n        scrollLeft: rootScrollingElement.scrollLeft\n    });\n    return scrollableElements;\n}\nfunction $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements) {\n    for (let { element: element, scrollTop: scrollTop, scrollLeft: scrollLeft } of scrollableElements){\n        element.scrollTop = scrollTop;\n        element.scrollLeft = scrollLeft;\n    }\n}\n\n\nexport {$7215afc6de606d6b$export$de79e2c695e052f3 as focusWithoutScrolling};\n//# sourceMappingURL=focusWithoutScrolling.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $c87311424ea30a05$var$testUserAgent(re) {\n    var _window_navigator_userAgentData;\n    if (typeof window === 'undefined' || window.navigator == null) return false;\n    let brands = (_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.brands;\n    return Array.isArray(brands) && brands.some((brand)=>re.test(brand.brand)) || re.test(window.navigator.userAgent);\n}\nfunction $c87311424ea30a05$var$testPlatform(re) {\n    var _window_navigator_userAgentData;\n    return typeof window !== 'undefined' && window.navigator != null ? re.test(((_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.platform) || window.navigator.platform) : false;\n}\nfunction $c87311424ea30a05$var$cached(fn) {\n    if (process.env.NODE_ENV === 'test') return fn;\n    let res = null;\n    return ()=>{\n        if (res == null) res = fn();\n        return res;\n    };\n}\nconst $c87311424ea30a05$export$9ac100e40613ea10 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testPlatform(/^Mac/i);\n});\nconst $c87311424ea30a05$export$186c6964ca17d99 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testPlatform(/^iPhone/i);\n});\nconst $c87311424ea30a05$export$7bef049ce92e4224 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testPlatform(/^iPad/i) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n    $c87311424ea30a05$export$9ac100e40613ea10() && navigator.maxTouchPoints > 1;\n});\nconst $c87311424ea30a05$export$fedb369cb70207f1 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$export$186c6964ca17d99() || $c87311424ea30a05$export$7bef049ce92e4224();\n});\nconst $c87311424ea30a05$export$e1865c3bedcd822b = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$export$9ac100e40613ea10() || $c87311424ea30a05$export$fedb369cb70207f1();\n});\nconst $c87311424ea30a05$export$78551043582a6a98 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testUserAgent(/AppleWebKit/i) && !$c87311424ea30a05$export$6446a186d09e379e();\n});\nconst $c87311424ea30a05$export$6446a186d09e379e = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testUserAgent(/Chrome/i);\n});\nconst $c87311424ea30a05$export$a11b0059900ceec8 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testUserAgent(/Android/i);\n});\nconst $c87311424ea30a05$export$b7d78993b74f766d = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testUserAgent(/Firefox/i);\n});\n\n\nexport {$c87311424ea30a05$export$9ac100e40613ea10 as isMac, $c87311424ea30a05$export$186c6964ca17d99 as isIPhone, $c87311424ea30a05$export$7bef049ce92e4224 as isIPad, $c87311424ea30a05$export$fedb369cb70207f1 as isIOS, $c87311424ea30a05$export$e1865c3bedcd822b as isAppleDevice, $c87311424ea30a05$export$78551043582a6a98 as isWebKit, $c87311424ea30a05$export$6446a186d09e379e as isChrome, $c87311424ea30a05$export$a11b0059900ceec8 as isAndroid, $c87311424ea30a05$export$b7d78993b74f766d as isFirefox};\n//# sourceMappingURL=platform.module.js.map\n","import {focusWithoutScrolling as $7215afc6de606d6b$export$de79e2c695e052f3} from \"./focusWithoutScrolling.mjs\";\nimport {isMac as $c87311424ea30a05$export$9ac100e40613ea10, isWebKit as $c87311424ea30a05$export$78551043582a6a98, isFirefox as $c87311424ea30a05$export$b7d78993b74f766d, isIPad as $c87311424ea30a05$export$7bef049ce92e4224} from \"./platform.mjs\";\nimport $g3jFn$react, {createContext as $g3jFn$createContext, useMemo as $g3jFn$useMemo, useContext as $g3jFn$useContext} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $ea8dcbcb9ea1b556$var$RouterContext = /*#__PURE__*/ (0, $g3jFn$createContext)({\n    isNative: true,\n    open: $ea8dcbcb9ea1b556$var$openSyntheticLink,\n    useHref: (href)=>href\n});\nfunction $ea8dcbcb9ea1b556$export$323e4fc2fa4753fb(props) {\n    let { children: children, navigate: navigate, useHref: useHref } = props;\n    let ctx = (0, $g3jFn$useMemo)(()=>({\n            isNative: false,\n            open: (target, modifiers, href, routerOptions)=>{\n                $ea8dcbcb9ea1b556$var$getSyntheticLink(target, (link)=>{\n                    if ($ea8dcbcb9ea1b556$export$efa8c9099e530235(link, modifiers)) navigate(href, routerOptions);\n                    else $ea8dcbcb9ea1b556$export$95185d699e05d4d7(link, modifiers);\n                });\n            },\n            useHref: useHref || ((href)=>href)\n        }), [\n        navigate,\n        useHref\n    ]);\n    return /*#__PURE__*/ (0, $g3jFn$react).createElement($ea8dcbcb9ea1b556$var$RouterContext.Provider, {\n        value: ctx\n    }, children);\n}\nfunction $ea8dcbcb9ea1b556$export$9a302a45f65d0572() {\n    return (0, $g3jFn$useContext)($ea8dcbcb9ea1b556$var$RouterContext);\n}\nfunction $ea8dcbcb9ea1b556$export$efa8c9099e530235(link, modifiers) {\n    // Use getAttribute here instead of link.target. Firefox will default link.target to \"_parent\" when inside an iframe.\n    let target = link.getAttribute('target');\n    return (!target || target === '_self') && link.origin === location.origin && !link.hasAttribute('download') && !modifiers.metaKey && // open in new tab (mac)\n    !modifiers.ctrlKey && // open in new tab (windows)\n    !modifiers.altKey && // download\n    !modifiers.shiftKey;\n}\nfunction $ea8dcbcb9ea1b556$export$95185d699e05d4d7(target, modifiers, setOpening = true) {\n    var _window_event_type, _window_event;\n    let { metaKey: metaKey, ctrlKey: ctrlKey, altKey: altKey, shiftKey: shiftKey } = modifiers;\n    // Firefox does not recognize keyboard events as a user action by default, and the popup blocker\n    // will prevent links with target=\"_blank\" from opening. However, it does allow the event if the\n    // Command/Control key is held, which opens the link in a background tab. This seems like the best we can do.\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=257870 and https://bugzilla.mozilla.org/show_bug.cgi?id=746640.\n    if ((0, $c87311424ea30a05$export$b7d78993b74f766d)() && ((_window_event = window.event) === null || _window_event === void 0 ? void 0 : (_window_event_type = _window_event.type) === null || _window_event_type === void 0 ? void 0 : _window_event_type.startsWith('key')) && target.target === '_blank') {\n        if ((0, $c87311424ea30a05$export$9ac100e40613ea10)()) metaKey = true;\n        else ctrlKey = true;\n    }\n    // WebKit does not support firing click events with modifier keys, but does support keyboard events.\n    // https://github.com/WebKit/WebKit/blob/c03d0ac6e6db178f90923a0a63080b5ca210d25f/Source/WebCore/html/HTMLAnchorElement.cpp#L184\n    let event = (0, $c87311424ea30a05$export$78551043582a6a98)() && (0, $c87311424ea30a05$export$9ac100e40613ea10)() && !(0, $c87311424ea30a05$export$7bef049ce92e4224)() && process.env.NODE_ENV !== 'test' ? new KeyboardEvent('keydown', {\n        keyIdentifier: 'Enter',\n        metaKey: metaKey,\n        ctrlKey: ctrlKey,\n        altKey: altKey,\n        shiftKey: shiftKey\n    }) : new MouseEvent('click', {\n        metaKey: metaKey,\n        ctrlKey: ctrlKey,\n        altKey: altKey,\n        shiftKey: shiftKey,\n        detail: 1,\n        bubbles: true,\n        cancelable: true\n    });\n    $ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = setOpening;\n    (0, $7215afc6de606d6b$export$de79e2c695e052f3)(target);\n    target.dispatchEvent(event);\n    $ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = false;\n}\n// https://github.com/parcel-bundler/parcel/issues/8724\n$ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = false;\nfunction $ea8dcbcb9ea1b556$var$getSyntheticLink(target, open) {\n    if (target instanceof HTMLAnchorElement) open(target);\n    else if (target.hasAttribute('data-href')) {\n        let link = document.createElement('a');\n        link.href = target.getAttribute('data-href');\n        if (target.hasAttribute('data-target')) link.target = target.getAttribute('data-target');\n        if (target.hasAttribute('data-rel')) link.rel = target.getAttribute('data-rel');\n        if (target.hasAttribute('data-download')) link.download = target.getAttribute('data-download');\n        if (target.hasAttribute('data-ping')) link.ping = target.getAttribute('data-ping');\n        if (target.hasAttribute('data-referrer-policy')) link.referrerPolicy = target.getAttribute('data-referrer-policy');\n        target.appendChild(link);\n        open(link);\n        target.removeChild(link);\n    }\n}\nfunction $ea8dcbcb9ea1b556$var$openSyntheticLink(target, modifiers) {\n    $ea8dcbcb9ea1b556$var$getSyntheticLink(target, (link)=>$ea8dcbcb9ea1b556$export$95185d699e05d4d7(link, modifiers));\n}\nfunction $ea8dcbcb9ea1b556$export$bdc77b0c0a3a85d6(props) {\n    let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();\n    var _props_href;\n    const href = router.useHref((_props_href = props.href) !== null && _props_href !== void 0 ? _props_href : '');\n    return {\n        'data-href': props.href ? href : undefined,\n        'data-target': props.target,\n        'data-rel': props.rel,\n        'data-download': props.download,\n        'data-ping': props.ping,\n        'data-referrer-policy': props.referrerPolicy\n    };\n}\nfunction $ea8dcbcb9ea1b556$export$51437d503373d223(props) {\n    return {\n        'data-href': props.href,\n        'data-target': props.target,\n        'data-rel': props.rel,\n        'data-download': props.download,\n        'data-ping': props.ping,\n        'data-referrer-policy': props.referrerPolicy\n    };\n}\nfunction $ea8dcbcb9ea1b556$export$7e924b3091a3bd18(props) {\n    let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();\n    var _props_href;\n    const href = router.useHref((_props_href = props === null || props === void 0 ? void 0 : props.href) !== null && _props_href !== void 0 ? _props_href : '');\n    return {\n        href: (props === null || props === void 0 ? void 0 : props.href) ? href : undefined,\n        target: props === null || props === void 0 ? void 0 : props.target,\n        rel: props === null || props === void 0 ? void 0 : props.rel,\n        download: props === null || props === void 0 ? void 0 : props.download,\n        ping: props === null || props === void 0 ? void 0 : props.ping,\n        referrerPolicy: props === null || props === void 0 ? void 0 : props.referrerPolicy\n    };\n}\nfunction $ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f(e, router, href, routerOptions) {\n    // If a custom router is provided, prevent default and forward if this link should client navigate.\n    if (!router.isNative && e.currentTarget instanceof HTMLAnchorElement && e.currentTarget.href && // If props are applied to a router Link component, it may have already prevented default.\n    !e.isDefaultPrevented() && $ea8dcbcb9ea1b556$export$efa8c9099e530235(e.currentTarget, e) && href) {\n        e.preventDefault();\n        router.open(e.currentTarget, e, href, routerOptions);\n    }\n}\n\n\nexport {$ea8dcbcb9ea1b556$export$323e4fc2fa4753fb as RouterProvider, $ea8dcbcb9ea1b556$export$efa8c9099e530235 as shouldClientNavigate, $ea8dcbcb9ea1b556$export$95185d699e05d4d7 as openLink, $ea8dcbcb9ea1b556$export$9a302a45f65d0572 as useRouter, $ea8dcbcb9ea1b556$export$bdc77b0c0a3a85d6 as useSyntheticLinkProps, $ea8dcbcb9ea1b556$export$51437d503373d223 as getSyntheticLinkProps, $ea8dcbcb9ea1b556$export$7e924b3091a3bd18 as useLinkProps, $ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f as handleLinkClick};\n//# sourceMappingURL=openLink.module.js.map\n","import {useRef as $lPAwt$useRef, useCallback as $lPAwt$useCallback, useEffect as $lPAwt$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $03deb23ff14920c4$export$4eaf04e54aa8eed6() {\n    let globalListeners = (0, $lPAwt$useRef)(new Map());\n    let addGlobalListener = (0, $lPAwt$useCallback)((eventTarget, type, listener, options)=>{\n        // Make sure we remove the listener after it is called with the `once` option.\n        let fn = (options === null || options === void 0 ? void 0 : options.once) ? (...args)=>{\n            globalListeners.current.delete(listener);\n            listener(...args);\n        } : listener;\n        globalListeners.current.set(listener, {\n            type: type,\n            eventTarget: eventTarget,\n            fn: fn,\n            options: options\n        });\n        eventTarget.addEventListener(type, fn, options);\n    }, []);\n    let removeGlobalListener = (0, $lPAwt$useCallback)((eventTarget, type, listener, options)=>{\n        var _globalListeners_current_get;\n        let fn = ((_globalListeners_current_get = globalListeners.current.get(listener)) === null || _globalListeners_current_get === void 0 ? void 0 : _globalListeners_current_get.fn) || listener;\n        eventTarget.removeEventListener(type, fn, options);\n        globalListeners.current.delete(listener);\n    }, []);\n    let removeAllGlobalListeners = (0, $lPAwt$useCallback)(()=>{\n        globalListeners.current.forEach((value, key)=>{\n            removeGlobalListener(value.eventTarget, value.type, key, value.options);\n        });\n    }, [\n        removeGlobalListener\n    ]);\n    (0, $lPAwt$useEffect)(()=>{\n        return removeAllGlobalListeners;\n    }, [\n        removeAllGlobalListeners\n    ]);\n    return {\n        addGlobalListener: addGlobalListener,\n        removeGlobalListener: removeGlobalListener,\n        removeAllGlobalListeners: removeAllGlobalListeners\n    };\n}\n\n\nexport {$03deb23ff14920c4$export$4eaf04e54aa8eed6 as useGlobalListeners};\n//# sourceMappingURL=useGlobalListeners.module.js.map\n","import {isAndroid as $c87311424ea30a05$export$a11b0059900ceec8} from \"./platform.mjs\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $6a7db85432448f7f$export$60278871457622de(event) {\n    // JAWS/NVDA with Firefox.\n    if (event.pointerType === '' && event.isTrusted) return true;\n    // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n    // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n    // to detect TalkBack virtual clicks.\n    if ((0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.pointerType) return event.type === 'click' && event.buttons === 1;\n    return event.detail === 0 && !event.pointerType;\n}\nfunction $6a7db85432448f7f$export$29bf1b5f2c56cf63(event) {\n    // If the pointer size is zero, then we assume it's from a screen reader.\n    // Android TalkBack double tap will sometimes return a event with width and height of 1\n    // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n    // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n    // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n    // Talkback double tap from Windows Firefox touch screen press\n    return !(0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.width === 0 && event.height === 0 || event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse';\n}\n\n\nexport {$6a7db85432448f7f$export$60278871457622de as isVirtualClick, $6a7db85432448f7f$export$29bf1b5f2c56cf63 as isVirtualPointerEvent};\n//# sourceMappingURL=isVirtualEvent.module.js.map\n","import {useLayoutEffect as $6dfIe$useLayoutEffect, isFocusable as $6dfIe$isFocusable, getOwnerWindow as $6dfIe$getOwnerWindow, focusWithoutScrolling as $6dfIe$focusWithoutScrolling} from \"@react-aria/utils\";\nimport {useRef as $6dfIe$useRef, useCallback as $6dfIe$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $8a9cb279dc87e130$export$525bc4921d56d4a(nativeEvent) {\n    let event = nativeEvent;\n    event.nativeEvent = nativeEvent;\n    event.isDefaultPrevented = ()=>event.defaultPrevented;\n    // cancelBubble is technically deprecated in the spec, but still supported in all browsers.\n    event.isPropagationStopped = ()=>event.cancelBubble;\n    event.persist = ()=>{};\n    return event;\n}\nfunction $8a9cb279dc87e130$export$c2b7abe5d61ec696(event, target) {\n    Object.defineProperty(event, 'target', {\n        value: target\n    });\n    Object.defineProperty(event, 'currentTarget', {\n        value: target\n    });\n}\nfunction $8a9cb279dc87e130$export$715c682d09d639cc(onBlur) {\n    let stateRef = (0, $6dfIe$useRef)({\n        isFocused: false,\n        observer: null\n    });\n    // Clean up MutationObserver on unmount. See below.\n    (0, $6dfIe$useLayoutEffect)(()=>{\n        const state = stateRef.current;\n        return ()=>{\n            if (state.observer) {\n                state.observer.disconnect();\n                state.observer = null;\n            }\n        };\n    }, []);\n    // This function is called during a React onFocus event.\n    return (0, $6dfIe$useCallback)((e)=>{\n        // React does not fire onBlur when an element is disabled. https://github.com/facebook/react/issues/9142\n        // Most browsers fire a native focusout event in this case, except for Firefox. In that case, we use a\n        // MutationObserver to watch for the disabled attribute, and dispatch these events ourselves.\n        // For browsers that do, focusout fires before the MutationObserver, so onBlur should not fire twice.\n        if (e.target instanceof HTMLButtonElement || e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLSelectElement) {\n            stateRef.current.isFocused = true;\n            let target = e.target;\n            let onBlurHandler = (e)=>{\n                stateRef.current.isFocused = false;\n                if (target.disabled) {\n                    // For backward compatibility, dispatch a (fake) React synthetic event.\n                    let event = $8a9cb279dc87e130$export$525bc4921d56d4a(e);\n                    onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);\n                }\n                // We no longer need the MutationObserver once the target is blurred.\n                if (stateRef.current.observer) {\n                    stateRef.current.observer.disconnect();\n                    stateRef.current.observer = null;\n                }\n            };\n            target.addEventListener('focusout', onBlurHandler, {\n                once: true\n            });\n            stateRef.current.observer = new MutationObserver(()=>{\n                if (stateRef.current.isFocused && target.disabled) {\n                    var _stateRef_current_observer;\n                    (_stateRef_current_observer = stateRef.current.observer) === null || _stateRef_current_observer === void 0 ? void 0 : _stateRef_current_observer.disconnect();\n                    let relatedTargetEl = target === document.activeElement ? null : document.activeElement;\n                    target.dispatchEvent(new FocusEvent('blur', {\n                        relatedTarget: relatedTargetEl\n                    }));\n                    target.dispatchEvent(new FocusEvent('focusout', {\n                        bubbles: true,\n                        relatedTarget: relatedTargetEl\n                    }));\n                }\n            });\n            stateRef.current.observer.observe(target, {\n                attributes: true,\n                attributeFilter: [\n                    'disabled'\n                ]\n            });\n        }\n    }, [\n        onBlur\n    ]);\n}\nlet $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\nfunction $8a9cb279dc87e130$export$cabe61c495ee3649(target) {\n    // The browser will focus the nearest focusable ancestor of our target.\n    while(target && !(0, $6dfIe$isFocusable)(target))target = target.parentElement;\n    let window = (0, $6dfIe$getOwnerWindow)(target);\n    let activeElement = window.document.activeElement;\n    if (!activeElement || activeElement === target) return;\n    $8a9cb279dc87e130$export$fda7da73ab5d4c48 = true;\n    let isRefocusing = false;\n    let onBlur = (e)=>{\n        if (e.target === activeElement || isRefocusing) e.stopImmediatePropagation();\n    };\n    let onFocusOut = (e)=>{\n        if (e.target === activeElement || isRefocusing) {\n            e.stopImmediatePropagation();\n            // If there was no focusable ancestor, we don't expect a focus event.\n            // Re-focus the original active element here.\n            if (!target && !isRefocusing) {\n                isRefocusing = true;\n                (0, $6dfIe$focusWithoutScrolling)(activeElement);\n                cleanup();\n            }\n        }\n    };\n    let onFocus = (e)=>{\n        if (e.target === target || isRefocusing) e.stopImmediatePropagation();\n    };\n    let onFocusIn = (e)=>{\n        if (e.target === target || isRefocusing) {\n            e.stopImmediatePropagation();\n            if (!isRefocusing) {\n                isRefocusing = true;\n                (0, $6dfIe$focusWithoutScrolling)(activeElement);\n                cleanup();\n            }\n        }\n    };\n    window.addEventListener('blur', onBlur, true);\n    window.addEventListener('focusout', onFocusOut, true);\n    window.addEventListener('focusin', onFocusIn, true);\n    window.addEventListener('focus', onFocus, true);\n    let cleanup = ()=>{\n        cancelAnimationFrame(raf);\n        window.removeEventListener('blur', onBlur, true);\n        window.removeEventListener('focusout', onFocusOut, true);\n        window.removeEventListener('focusin', onFocusIn, true);\n        window.removeEventListener('focus', onFocus, true);\n        $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\n        isRefocusing = false;\n    };\n    let raf = requestAnimationFrame(cleanup);\n    return cleanup;\n}\n\n\nexport {$8a9cb279dc87e130$export$525bc4921d56d4a as createSyntheticEvent, $8a9cb279dc87e130$export$c2b7abe5d61ec696 as setEventTarget, $8a9cb279dc87e130$export$715c682d09d639cc as useSyntheticBlurEvent, $8a9cb279dc87e130$export$fda7da73ab5d4c48 as ignoreFocusEvent, $8a9cb279dc87e130$export$cabe61c495ee3649 as preventFocus};\n//# sourceMappingURL=utils.module.js.map\n","import {ignoreFocusEvent as $8a9cb279dc87e130$export$fda7da73ab5d4c48} from \"./utils.mjs\";\nimport {isMac as $28AnR$isMac, openLink as $28AnR$openLink, isVirtualClick as $28AnR$isVirtualClick, getOwnerWindow as $28AnR$getOwnerWindow, getOwnerDocument as $28AnR$getOwnerDocument} from \"@react-aria/utils\";\nimport {useState as $28AnR$useState, useEffect as $28AnR$useEffect} from \"react\";\nimport {useIsSSR as $28AnR$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\nlet $507fabe10e71c6fb$var$currentModality = null;\nlet $507fabe10e71c6fb$var$currentPointerType = 'keyboard';\nlet $507fabe10e71c6fb$var$changeHandlers = new Set();\nlet $507fabe10e71c6fb$export$d90243b58daecda7 = new Map(); // We use a map here to support setting event listeners across multiple document objects.\nlet $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\nlet $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n// Only Tab or Esc keys will make focus visible on text input elements\nconst $507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS = {\n    Tab: true,\n    Escape: true\n};\nfunction $507fabe10e71c6fb$var$triggerChangeHandlers(modality, e) {\n    for (let handler of $507fabe10e71c6fb$var$changeHandlers)handler(modality, e);\n}\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */ function $507fabe10e71c6fb$var$isValidKey(e) {\n    // Control and Shift keys trigger when navigating back to the tab with keyboard.\n    return !(e.metaKey || !(0, $28AnR$isMac)() && e.altKey || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\nfunction $507fabe10e71c6fb$var$handleKeyboardEvent(e) {\n    $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n    if (!(0, $28AnR$openLink).isOpening && $507fabe10e71c6fb$var$isValidKey(e)) {\n        $507fabe10e71c6fb$var$currentModality = 'keyboard';\n        $507fabe10e71c6fb$var$currentPointerType = 'keyboard';\n        $507fabe10e71c6fb$var$triggerChangeHandlers('keyboard', e);\n    }\n}\nfunction $507fabe10e71c6fb$var$handlePointerEvent(e) {\n    $507fabe10e71c6fb$var$currentModality = 'pointer';\n    $507fabe10e71c6fb$var$currentPointerType = 'pointerType' in e ? e.pointerType : 'mouse';\n    if (e.type === 'mousedown' || e.type === 'pointerdown') {\n        $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n        $507fabe10e71c6fb$var$triggerChangeHandlers('pointer', e);\n    }\n}\nfunction $507fabe10e71c6fb$var$handleClickEvent(e) {\n    if (!(0, $28AnR$openLink).isOpening && (0, $28AnR$isVirtualClick)(e)) {\n        $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n        $507fabe10e71c6fb$var$currentModality = 'virtual';\n        $507fabe10e71c6fb$var$currentPointerType = 'virtual';\n    }\n}\nfunction $507fabe10e71c6fb$var$handleFocusEvent(e) {\n    // Firefox fires two extra focus events when the user first clicks into an iframe:\n    // first on the window, then on the document. We ignore these events so they don't\n    // cause keyboard focus rings to appear.\n    if (e.target === window || e.target === document || (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) || !e.isTrusted) return;\n    // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n    // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n    if (!$507fabe10e71c6fb$var$hasEventBeforeFocus && !$507fabe10e71c6fb$var$hasBlurredWindowRecently) {\n        $507fabe10e71c6fb$var$currentModality = 'virtual';\n        $507fabe10e71c6fb$var$currentPointerType = 'virtual';\n        $507fabe10e71c6fb$var$triggerChangeHandlers('virtual', e);\n    }\n    $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n    $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n}\nfunction $507fabe10e71c6fb$var$handleWindowBlur() {\n    if (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) return;\n    // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n    // for example, since a subsequent focus event won't be fired.\n    $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n    $507fabe10e71c6fb$var$hasBlurredWindowRecently = true;\n}\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */ function $507fabe10e71c6fb$var$setupGlobalFocusEvents(element) {\n    if (typeof window === 'undefined' || typeof document === 'undefined' || $507fabe10e71c6fb$export$d90243b58daecda7.get((0, $28AnR$getOwnerWindow)(element))) return;\n    const windowObject = (0, $28AnR$getOwnerWindow)(element);\n    const documentObject = (0, $28AnR$getOwnerDocument)(element);\n    // Programmatic focus() calls shouldn't affect the current input modality.\n    // However, we need to detect other cases when a focus event occurs without\n    // a preceding user event (e.g. screen reader focus). Overriding the focus\n    // method on HTMLElement.prototype is a bit hacky, but works.\n    let focus = windowObject.HTMLElement.prototype.focus;\n    windowObject.HTMLElement.prototype.focus = function() {\n        $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n        focus.apply(this, arguments);\n    };\n    documentObject.addEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n    documentObject.addEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n    documentObject.addEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n    // Register focus events on the window so they are sure to happen\n    // before React's event listeners (registered on the document).\n    windowObject.addEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n    windowObject.addEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n    if (typeof PointerEvent !== 'undefined') {\n        documentObject.addEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.addEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.addEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n    } else if (process.env.NODE_ENV === 'test') {\n        documentObject.addEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.addEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.addEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n    }\n    // Add unmount handler\n    windowObject.addEventListener('beforeunload', ()=>{\n        $507fabe10e71c6fb$var$tearDownWindowFocusTracking(element);\n    }, {\n        once: true\n    });\n    $507fabe10e71c6fb$export$d90243b58daecda7.set(windowObject, {\n        focus: focus\n    });\n}\nconst $507fabe10e71c6fb$var$tearDownWindowFocusTracking = (element, loadListener)=>{\n    const windowObject = (0, $28AnR$getOwnerWindow)(element);\n    const documentObject = (0, $28AnR$getOwnerDocument)(element);\n    if (loadListener) documentObject.removeEventListener('DOMContentLoaded', loadListener);\n    if (!$507fabe10e71c6fb$export$d90243b58daecda7.has(windowObject)) return;\n    windowObject.HTMLElement.prototype.focus = $507fabe10e71c6fb$export$d90243b58daecda7.get(windowObject).focus;\n    documentObject.removeEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n    documentObject.removeEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n    documentObject.removeEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n    windowObject.removeEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n    windowObject.removeEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n    if (typeof PointerEvent !== 'undefined') {\n        documentObject.removeEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.removeEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.removeEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n    } else if (process.env.NODE_ENV === 'test') {\n        documentObject.removeEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.removeEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.removeEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n    }\n    $507fabe10e71c6fb$export$d90243b58daecda7.delete(windowObject);\n};\nfunction $507fabe10e71c6fb$export$2f1888112f558a7d(element) {\n    const documentObject = (0, $28AnR$getOwnerDocument)(element);\n    let loadListener;\n    if (documentObject.readyState !== 'loading') $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n    else {\n        loadListener = ()=>{\n            $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n        };\n        documentObject.addEventListener('DOMContentLoaded', loadListener);\n    }\n    return ()=>$507fabe10e71c6fb$var$tearDownWindowFocusTracking(element, loadListener);\n}\n// Server-side rendering does not have the document object defined\n// eslint-disable-next-line no-restricted-globals\nif (typeof document !== 'undefined') $507fabe10e71c6fb$export$2f1888112f558a7d();\nfunction $507fabe10e71c6fb$export$b9b3dfddab17db27() {\n    return $507fabe10e71c6fb$var$currentModality !== 'pointer';\n}\nfunction $507fabe10e71c6fb$export$630ff653c5ada6a9() {\n    return $507fabe10e71c6fb$var$currentModality;\n}\nfunction $507fabe10e71c6fb$export$8397ddfc504fdb9a(modality) {\n    $507fabe10e71c6fb$var$currentModality = modality;\n    $507fabe10e71c6fb$var$currentPointerType = modality === 'pointer' ? 'mouse' : modality;\n    $507fabe10e71c6fb$var$triggerChangeHandlers(modality, null);\n}\nfunction $507fabe10e71c6fb$export$887a228355cf7d95() {\n    return $507fabe10e71c6fb$var$currentPointerType;\n}\nfunction $507fabe10e71c6fb$export$98e20ec92f614cfe() {\n    $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n    let [modality, setModality] = (0, $28AnR$useState)($507fabe10e71c6fb$var$currentModality);\n    (0, $28AnR$useEffect)(()=>{\n        let handler = ()=>{\n            setModality($507fabe10e71c6fb$var$currentModality);\n        };\n        $507fabe10e71c6fb$var$changeHandlers.add(handler);\n        return ()=>{\n            $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n        };\n    }, []);\n    return (0, $28AnR$useIsSSR)() ? null : modality;\n}\nconst $507fabe10e71c6fb$var$nonTextInputTypes = new Set([\n    'checkbox',\n    'radio',\n    'range',\n    'color',\n    'file',\n    'image',\n    'button',\n    'submit',\n    'reset'\n]);\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that\n * focus visible style can be properly set.\n */ function $507fabe10e71c6fb$var$isKeyboardFocusEvent(isTextInput, modality, e) {\n    let document1 = (0, $28AnR$getOwnerDocument)(e === null || e === void 0 ? void 0 : e.target);\n    const IHTMLInputElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLInputElement : HTMLInputElement;\n    const IHTMLTextAreaElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLTextAreaElement : HTMLTextAreaElement;\n    const IHTMLElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLElement : HTMLElement;\n    const IKeyboardEvent = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).KeyboardEvent : KeyboardEvent;\n    // For keyboard events that occur on a non-input element that will move focus into input element (aka ArrowLeft going from Datepicker button to the main input group)\n    // we need to rely on the user passing isTextInput into here. This way we can skip toggling focus visiblity for said input element\n    isTextInput = isTextInput || document1.activeElement instanceof IHTMLInputElement && !$507fabe10e71c6fb$var$nonTextInputTypes.has(document1.activeElement.type) || document1.activeElement instanceof IHTMLTextAreaElement || document1.activeElement instanceof IHTMLElement && document1.activeElement.isContentEditable;\n    return !(isTextInput && modality === 'keyboard' && e instanceof IKeyboardEvent && !$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\nfunction $507fabe10e71c6fb$export$ffd9e5021c1fb2d6(props = {}) {\n    let { isTextInput: isTextInput, autoFocus: autoFocus } = props;\n    let [isFocusVisibleState, setFocusVisible] = (0, $28AnR$useState)(autoFocus || $507fabe10e71c6fb$export$b9b3dfddab17db27());\n    $507fabe10e71c6fb$export$ec71b4b83ac08ec3((isFocusVisible)=>{\n        setFocusVisible(isFocusVisible);\n    }, [\n        isTextInput\n    ], {\n        isTextInput: isTextInput\n    });\n    return {\n        isFocusVisible: isFocusVisibleState\n    };\n}\nfunction $507fabe10e71c6fb$export$ec71b4b83ac08ec3(fn, deps, opts) {\n    $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n    (0, $28AnR$useEffect)(()=>{\n        let handler = (modality, e)=>{\n            // We want to early return for any keyboard events that occur inside text inputs EXCEPT for Tab and Escape\n            if (!$507fabe10e71c6fb$var$isKeyboardFocusEvent(!!(opts === null || opts === void 0 ? void 0 : opts.isTextInput), modality, e)) return;\n            fn($507fabe10e71c6fb$export$b9b3dfddab17db27());\n        };\n        $507fabe10e71c6fb$var$changeHandlers.add(handler);\n        return ()=>{\n            $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, deps);\n}\n\n\nexport {$507fabe10e71c6fb$export$d90243b58daecda7 as hasSetupGlobalListeners, $507fabe10e71c6fb$export$2f1888112f558a7d as addWindowFocusTracking, $507fabe10e71c6fb$export$b9b3dfddab17db27 as isFocusVisible, $507fabe10e71c6fb$export$630ff653c5ada6a9 as getInteractionModality, $507fabe10e71c6fb$export$8397ddfc504fdb9a as setInteractionModality, $507fabe10e71c6fb$export$887a228355cf7d95 as getPointerType, $507fabe10e71c6fb$export$98e20ec92f614cfe as useInteractionModality, $507fabe10e71c6fb$export$ffd9e5021c1fb2d6 as useFocusVisible, $507fabe10e71c6fb$export$ec71b4b83ac08ec3 as useFocusVisibleListener};\n//# sourceMappingURL=useFocusVisible.module.js.map\n","import {useSyntheticBlurEvent as $8a9cb279dc87e130$export$715c682d09d639cc} from \"./utils.mjs\";\nimport {useCallback as $hf0lj$useCallback} from \"react\";\nimport {getOwnerDocument as $hf0lj$getOwnerDocument, getActiveElement as $hf0lj$getActiveElement, getEventTarget as $hf0lj$getEventTarget} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\nfunction $a1ea59d68270f0dd$export$f8168d8dd8fd66e6(props) {\n    let { isDisabled: isDisabled, onFocus: onFocusProp, onBlur: onBlurProp, onFocusChange: onFocusChange } = props;\n    const onBlur = (0, $hf0lj$useCallback)((e)=>{\n        if (e.target === e.currentTarget) {\n            if (onBlurProp) onBlurProp(e);\n            if (onFocusChange) onFocusChange(false);\n            return true;\n        }\n    }, [\n        onBlurProp,\n        onFocusChange\n    ]);\n    const onSyntheticFocus = (0, $8a9cb279dc87e130$export$715c682d09d639cc)(onBlur);\n    const onFocus = (0, $hf0lj$useCallback)((e)=>{\n        // Double check that document.activeElement actually matches e.target in case a previously chained\n        // focus handler already moved focus somewhere else.\n        const ownerDocument = (0, $hf0lj$getOwnerDocument)(e.target);\n        const activeElement = ownerDocument ? (0, $hf0lj$getActiveElement)(ownerDocument) : (0, $hf0lj$getActiveElement)();\n        if (e.target === e.currentTarget && activeElement === (0, $hf0lj$getEventTarget)(e.nativeEvent)) {\n            if (onFocusProp) onFocusProp(e);\n            if (onFocusChange) onFocusChange(true);\n            onSyntheticFocus(e);\n        }\n    }, [\n        onFocusChange,\n        onFocusProp,\n        onSyntheticFocus\n    ]);\n    return {\n        focusProps: {\n            onFocus: !isDisabled && (onFocusProp || onFocusChange || onBlurProp) ? onFocus : undefined,\n            onBlur: !isDisabled && (onBlurProp || onFocusChange) ? onBlur : undefined\n        }\n    };\n}\n\n\nexport {$a1ea59d68270f0dd$export$f8168d8dd8fd66e6 as useFocus};\n//# sourceMappingURL=useFocus.module.js.map\n","import {createSyntheticEvent as $8a9cb279dc87e130$export$525bc4921d56d4a, setEventTarget as $8a9cb279dc87e130$export$c2b7abe5d61ec696, useSyntheticBlurEvent as $8a9cb279dc87e130$export$715c682d09d639cc} from \"./utils.mjs\";\nimport {useRef as $3b9Q0$useRef, useCallback as $3b9Q0$useCallback} from \"react\";\nimport {useGlobalListeners as $3b9Q0$useGlobalListeners, getOwnerDocument as $3b9Q0$getOwnerDocument, getActiveElement as $3b9Q0$getActiveElement, getEventTarget as $3b9Q0$getEventTarget, nodeContains as $3b9Q0$nodeContains} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\nfunction $9ab94262bd0047c7$export$420e68273165f4ec(props) {\n    let { isDisabled: isDisabled, onBlurWithin: onBlurWithin, onFocusWithin: onFocusWithin, onFocusWithinChange: onFocusWithinChange } = props;\n    let state = (0, $3b9Q0$useRef)({\n        isFocusWithin: false\n    });\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $3b9Q0$useGlobalListeners)();\n    let onBlur = (0, $3b9Q0$useCallback)((e)=>{\n        // Ignore events bubbling through portals.\n        if (!e.currentTarget.contains(e.target)) return;\n        // We don't want to trigger onBlurWithin and then immediately onFocusWithin again\n        // when moving focus inside the element. Only trigger if the currentTarget doesn't\n        // include the relatedTarget (where focus is moving).\n        if (state.current.isFocusWithin && !e.currentTarget.contains(e.relatedTarget)) {\n            state.current.isFocusWithin = false;\n            removeAllGlobalListeners();\n            if (onBlurWithin) onBlurWithin(e);\n            if (onFocusWithinChange) onFocusWithinChange(false);\n        }\n    }, [\n        onBlurWithin,\n        onFocusWithinChange,\n        state,\n        removeAllGlobalListeners\n    ]);\n    let onSyntheticFocus = (0, $8a9cb279dc87e130$export$715c682d09d639cc)(onBlur);\n    let onFocus = (0, $3b9Q0$useCallback)((e)=>{\n        // Ignore events bubbling through portals.\n        if (!e.currentTarget.contains(e.target)) return;\n        // Double check that document.activeElement actually matches e.target in case a previously chained\n        // focus handler already moved focus somewhere else.\n        const ownerDocument = (0, $3b9Q0$getOwnerDocument)(e.target);\n        const activeElement = (0, $3b9Q0$getActiveElement)(ownerDocument);\n        if (!state.current.isFocusWithin && activeElement === (0, $3b9Q0$getEventTarget)(e.nativeEvent)) {\n            if (onFocusWithin) onFocusWithin(e);\n            if (onFocusWithinChange) onFocusWithinChange(true);\n            state.current.isFocusWithin = true;\n            onSyntheticFocus(e);\n            // Browsers don't fire blur events when elements are removed from the DOM.\n            // However, if a focus event occurs outside the element we're tracking, we\n            // can manually fire onBlur.\n            let currentTarget = e.currentTarget;\n            addGlobalListener(ownerDocument, 'focus', (e)=>{\n                if (state.current.isFocusWithin && !(0, $3b9Q0$nodeContains)(currentTarget, e.target)) {\n                    let nativeEvent = new ownerDocument.defaultView.FocusEvent('blur', {\n                        relatedTarget: e.target\n                    });\n                    (0, $8a9cb279dc87e130$export$c2b7abe5d61ec696)(nativeEvent, currentTarget);\n                    let event = (0, $8a9cb279dc87e130$export$525bc4921d56d4a)(nativeEvent);\n                    onBlur(event);\n                }\n            }, {\n                capture: true\n            });\n        }\n    }, [\n        onFocusWithin,\n        onFocusWithinChange,\n        onSyntheticFocus,\n        addGlobalListener,\n        onBlur\n    ]);\n    if (isDisabled) return {\n        focusWithinProps: {\n            // These cannot be null, that would conflict in mergeProps\n            onFocus: undefined,\n            onBlur: undefined\n        }\n    };\n    return {\n        focusWithinProps: {\n            onFocus: onFocus,\n            onBlur: onBlur\n        }\n    };\n}\n\n\nexport {$9ab94262bd0047c7$export$420e68273165f4ec as useFocusWithin};\n//# sourceMappingURL=useFocusWithin.module.js.map\n","import {useGlobalListeners as $AWxnT$useGlobalListeners, getOwnerDocument as $AWxnT$getOwnerDocument, nodeContains as $AWxnT$nodeContains} from \"@react-aria/utils\";\nimport {useState as $AWxnT$useState, useRef as $AWxnT$useRef, useEffect as $AWxnT$useEffect, useMemo as $AWxnT$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = false;\nlet $6179b936705e76d3$var$hoverCount = 0;\nfunction $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents() {\n    $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = true;\n    // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n    // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n    // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n    // the distant future because a user previously touched the element.\n    setTimeout(()=>{\n        $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = false;\n    }, 50);\n}\nfunction $6179b936705e76d3$var$handleGlobalPointerEvent(e) {\n    if (e.pointerType === 'touch') $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents();\n}\nfunction $6179b936705e76d3$var$setupGlobalTouchEvents() {\n    if (typeof document === 'undefined') return;\n    if ($6179b936705e76d3$var$hoverCount === 0) {\n        if (typeof PointerEvent !== 'undefined') document.addEventListener('pointerup', $6179b936705e76d3$var$handleGlobalPointerEvent);\n        else if (process.env.NODE_ENV === 'test') document.addEventListener('touchend', $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents);\n    }\n    $6179b936705e76d3$var$hoverCount++;\n    return ()=>{\n        $6179b936705e76d3$var$hoverCount--;\n        if ($6179b936705e76d3$var$hoverCount > 0) return;\n        if (typeof PointerEvent !== 'undefined') document.removeEventListener('pointerup', $6179b936705e76d3$var$handleGlobalPointerEvent);\n        else if (process.env.NODE_ENV === 'test') document.removeEventListener('touchend', $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents);\n    };\n}\nfunction $6179b936705e76d3$export$ae780daf29e6d456(props) {\n    let { onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, isDisabled: isDisabled } = props;\n    let [isHovered, setHovered] = (0, $AWxnT$useState)(false);\n    let state = (0, $AWxnT$useRef)({\n        isHovered: false,\n        ignoreEmulatedMouseEvents: false,\n        pointerType: '',\n        target: null\n    }).current;\n    (0, $AWxnT$useEffect)($6179b936705e76d3$var$setupGlobalTouchEvents, []);\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $AWxnT$useGlobalListeners)();\n    let { hoverProps: hoverProps, triggerHoverEnd: triggerHoverEnd } = (0, $AWxnT$useMemo)(()=>{\n        let triggerHoverStart = (event, pointerType)=>{\n            state.pointerType = pointerType;\n            if (isDisabled || pointerType === 'touch' || state.isHovered || !event.currentTarget.contains(event.target)) return;\n            state.isHovered = true;\n            let target = event.currentTarget;\n            state.target = target;\n            // When an element that is hovered over is removed, no pointerleave event is fired by the browser,\n            // even though the originally hovered target may have shrunk in size so it is no longer hovered.\n            // However, a pointerover event will be fired on the new target the mouse is over.\n            // In Chrome this happens immediately. In Safari and Firefox, it happens upon moving the mouse one pixel.\n            addGlobalListener((0, $AWxnT$getOwnerDocument)(event.target), 'pointerover', (e)=>{\n                if (state.isHovered && state.target && !(0, $AWxnT$nodeContains)(state.target, e.target)) triggerHoverEnd(e, e.pointerType);\n            }, {\n                capture: true\n            });\n            if (onHoverStart) onHoverStart({\n                type: 'hoverstart',\n                target: target,\n                pointerType: pointerType\n            });\n            if (onHoverChange) onHoverChange(true);\n            setHovered(true);\n        };\n        let triggerHoverEnd = (event, pointerType)=>{\n            let target = state.target;\n            state.pointerType = '';\n            state.target = null;\n            if (pointerType === 'touch' || !state.isHovered || !target) return;\n            state.isHovered = false;\n            removeAllGlobalListeners();\n            if (onHoverEnd) onHoverEnd({\n                type: 'hoverend',\n                target: target,\n                pointerType: pointerType\n            });\n            if (onHoverChange) onHoverChange(false);\n            setHovered(false);\n        };\n        let hoverProps = {};\n        if (typeof PointerEvent !== 'undefined') {\n            hoverProps.onPointerEnter = (e)=>{\n                if ($6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') return;\n                triggerHoverStart(e, e.pointerType);\n            };\n            hoverProps.onPointerLeave = (e)=>{\n                if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, e.pointerType);\n            };\n        } else if (process.env.NODE_ENV === 'test') {\n            hoverProps.onTouchStart = ()=>{\n                state.ignoreEmulatedMouseEvents = true;\n            };\n            hoverProps.onMouseEnter = (e)=>{\n                if (!state.ignoreEmulatedMouseEvents && !$6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents) triggerHoverStart(e, 'mouse');\n                state.ignoreEmulatedMouseEvents = false;\n            };\n            hoverProps.onMouseLeave = (e)=>{\n                if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, 'mouse');\n            };\n        }\n        return {\n            hoverProps: hoverProps,\n            triggerHoverEnd: triggerHoverEnd\n        };\n    }, [\n        onHoverStart,\n        onHoverChange,\n        onHoverEnd,\n        isDisabled,\n        state,\n        addGlobalListener,\n        removeAllGlobalListeners\n    ]);\n    (0, $AWxnT$useEffect)(()=>{\n        // Call the triggerHoverEnd as soon as isDisabled changes to true\n        // Safe to call triggerHoverEnd, it will early return if we aren't currently hovering\n        if (isDisabled) triggerHoverEnd({\n            currentTarget: state.target\n        }, state.pointerType);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        isDisabled\n    ]);\n    return {\n        hoverProps: hoverProps,\n        isHovered: isHovered\n    };\n}\n\n\nexport {$6179b936705e76d3$export$ae780daf29e6d456 as useHover};\n//# sourceMappingURL=useHover.module.js.map\n","import {isFocusVisible as $isWE5$isFocusVisible, useFocusVisibleListener as $isWE5$useFocusVisibleListener, useFocus as $isWE5$useFocus, useFocusWithin as $isWE5$useFocusWithin} from \"@react-aria/interactions\";\nimport {useRef as $isWE5$useRef, useState as $isWE5$useState, useCallback as $isWE5$useCallback} from \"react\";\n\n\n\nfunction $f7dceffc5ad7768b$export$4e328f61c538687f(props = {}) {\n    let { autoFocus: autoFocus = false, isTextInput: isTextInput, within: within } = props;\n    let state = (0, $isWE5$useRef)({\n        isFocused: false,\n        isFocusVisible: autoFocus || (0, $isWE5$isFocusVisible)()\n    });\n    let [isFocused, setFocused] = (0, $isWE5$useState)(false);\n    let [isFocusVisibleState, setFocusVisible] = (0, $isWE5$useState)(()=>state.current.isFocused && state.current.isFocusVisible);\n    let updateState = (0, $isWE5$useCallback)(()=>setFocusVisible(state.current.isFocused && state.current.isFocusVisible), []);\n    let onFocusChange = (0, $isWE5$useCallback)((isFocused)=>{\n        state.current.isFocused = isFocused;\n        setFocused(isFocused);\n        updateState();\n    }, [\n        updateState\n    ]);\n    (0, $isWE5$useFocusVisibleListener)((isFocusVisible)=>{\n        state.current.isFocusVisible = isFocusVisible;\n        updateState();\n    }, [], {\n        isTextInput: isTextInput\n    });\n    let { focusProps: focusProps } = (0, $isWE5$useFocus)({\n        isDisabled: within,\n        onFocusChange: onFocusChange\n    });\n    let { focusWithinProps: focusWithinProps } = (0, $isWE5$useFocusWithin)({\n        isDisabled: !within,\n        onFocusWithinChange: onFocusChange\n    });\n    return {\n        isFocused: isFocused,\n        isFocusVisible: isFocusVisibleState,\n        focusProps: within ? focusWithinProps : focusProps\n    };\n}\n\n\nexport {$f7dceffc5ad7768b$export$4e328f61c538687f as useFocusRing};\n//# sourceMappingURL=useFocusRing.module.js.map\n","var i=Object.defineProperty;var d=(t,e,n)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var r=(t,e,n)=>(d(t,typeof e!=\"symbol\"?e+\"\":e,n),n);class o{constructor(){r(this,\"current\",this.detect());r(this,\"handoffState\",\"pending\");r(this,\"currentId\",0)}set(e){this.current!==e&&(this.handoffState=\"pending\",this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current===\"server\"}get isClient(){return this.current===\"client\"}detect(){return typeof window==\"undefined\"||typeof document==\"undefined\"?\"server\":\"client\"}handoff(){this.handoffState===\"pending\"&&(this.handoffState=\"complete\")}get isHandoffComplete(){return this.handoffState===\"complete\"}}let s=new o;export{s as env};\n","import{env as t}from'./env.js';function l(n){var u;return t.isServer?null:n==null?document:(u=n==null?void 0:n.ownerDocument)!=null?u:document}function r(n){var u,o;return t.isServer?null:n==null?document:(o=(u=n==null?void 0:n.getRootNode)==null?void 0:u.call(n))!=null?o:document}function e(n){var u,o;return(o=(u=r(n))==null?void 0:u.activeElement)!=null?o:null}function d(n){return e(n)===n}export{e as getActiveElement,l as getOwnerDocument,r as getRootNode,d as isActiveElement};\n","function t(e){typeof queueMicrotask==\"function\"?queueMicrotask(e):Promise.resolve().then(e).catch(o=>setTimeout(()=>{throw o}))}export{t as microTask};\n","import{microTask as a}from'./micro-task.js';function o(){let s=[],r={addEventListener(e,t,n,i){return e.addEventListener(t,n,i),r.add(()=>e.removeEventListener(t,n,i))},requestAnimationFrame(...e){let t=requestAnimationFrame(...e);return r.add(()=>cancelAnimationFrame(t))},nextFrame(...e){return r.requestAnimationFrame(()=>r.requestAnimationFrame(...e))},setTimeout(...e){let t=setTimeout(...e);return r.add(()=>clearTimeout(t))},microTask(...e){let t={current:!0};return a(()=>{t.current&&e[0]()}),r.add(()=>{t.current=!1})},style(e,t,n){let i=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:n}),this.add(()=>{Object.assign(e.style,{[t]:i})})},group(e){let t=o();return e(t),this.add(()=>t.dispose())},add(e){return s.includes(e)||s.push(e),()=>{let t=s.indexOf(e);if(t>=0)for(let n of s.splice(t,1))n()}},dispose(){for(let e of s.splice(0))e()}};return r}export{o as disposables};\n","import{useEffect as s,useState as o}from\"react\";import{disposables as t}from'../utils/disposables.js';function p(){let[e]=o(t);return s(()=>()=>e.dispose(),[e]),e}export{p as useDisposables};\n","import{useEffect as f,useLayoutEffect as c}from\"react\";import{env as i}from'../utils/env.js';let n=(e,t)=>{i.isServer?f(e,t):c(e,t)};export{n as useIsoMorphicEffect};\n","import{useRef as t}from\"react\";import{useIsoMorphicEffect as o}from'./use-iso-morphic-effect.js';function s(e){let r=t(e);return o(()=>{r.current=e},[e]),r}export{s as useLatestValue};\n","import a from\"react\";import{useLatestValue as n}from'./use-latest-value.js';let o=function(t){let e=n(t);return a.useCallback((...r)=>e.current(...r),[e])};export{o as useEvent};\n","import{useRef as a,useState as m}from\"react\";import{getOwnerDocument as d}from'../utils/owner.js';import{useDisposables as g}from'./use-disposables.js';import{useEvent as u}from'./use-event.js';function E(e){let t=e.width/2,n=e.height/2;return{top:e.clientY-n,right:e.clientX+t,bottom:e.clientY+n,left:e.clientX-t}}function P(e,t){return!(!e||!t||e.right<t.left||e.left>t.right||e.bottom<t.top||e.top>t.bottom)}function w({disabled:e=!1}={}){let t=a(null),[n,l]=m(!1),r=g(),o=u(()=>{t.current=null,l(!1),r.dispose()}),f=u(s=>{if(r.dispose(),t.current===null){t.current=s.currentTarget,l(!0);{let i=d(s.currentTarget);r.addEventListener(i,\"pointerup\",o,!1),r.addEventListener(i,\"pointermove\",c=>{if(t.current){let p=E(c);l(P(p,t.current.getBoundingClientRect()))}},!1),r.addEventListener(i,\"pointercancel\",o,!1)}}});return{pressed:n,pressProps:e?{}:{onPointerDown:f,onPointerUp:o,onClick:o}}}export{w as useActivePress};\n","import{useMemo as t}from\"react\";function n(e){return t(()=>e,Object.values(e))}export{n as useSlot};\n","import n,{createContext as r,useContext as i}from\"react\";let e=r(void 0);function a(){return i(e)}function l({value:t,children:o}){return n.createElement(e.Provider,{value:t},o)}export{l as DisabledProvider,a as useDisabled};\n","function t(...r){return Array.from(new Set(r.flatMap(n=>typeof n==\"string\"?n.split(\" \"):[]))).filter(Boolean).join(\" \")}export{t as classNames};\n","function u(r,n,...a){if(r in n){let e=n[r];return typeof e==\"function\"?e(...a):e}let t=new Error(`Tried to handle \"${r}\" but there is no handler defined. Only defined handlers are: ${Object.keys(n).map(e=>`\"${e}\"`).join(\", \")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}export{u as match};\n","import E,{Fragment as j,cloneElement as v,createElement as S,forwardRef as w,isValidElement as k,useCallback as x,useRef as M}from\"react\";import{classNames as N}from'./class-names.js';import{match as O}from'./match.js';var A=(a=>(a[a.None=0]=\"None\",a[a.RenderStrategy=1]=\"RenderStrategy\",a[a.Static=2]=\"Static\",a))(A||{}),C=(e=>(e[e.Unmount=0]=\"Unmount\",e[e.Hidden=1]=\"Hidden\",e))(C||{});function K(){let n=$();return x(r=>U({mergeRefs:n,...r}),[n])}function U({ourProps:n,theirProps:r,slot:e,defaultTag:a,features:s,visible:t=!0,name:l,mergeRefs:i}){i=i!=null?i:I;let o=P(r,n);if(t)return F(o,e,a,l,i);let y=s!=null?s:0;if(y&2){let{static:f=!1,...u}=o;if(f)return F(u,e,a,l,i)}if(y&1){let{unmount:f=!0,...u}=o;return O(f?0:1,{[0](){return null},[1](){return F({...u,hidden:!0,style:{display:\"none\"}},e,a,l,i)}})}return F(o,e,a,l,i)}function F(n,r={},e,a,s){let{as:t=e,children:l,refName:i=\"ref\",...o}=h(n,[\"unmount\",\"static\"]),y=n.ref!==void 0?{[i]:n.ref}:{},f=typeof l==\"function\"?l(r):l;\"className\"in o&&o.className&&typeof o.className==\"function\"&&(o.className=o.className(r)),o[\"aria-labelledby\"]&&o[\"aria-labelledby\"]===o.id&&(o[\"aria-labelledby\"]=void 0);let u={};if(r){let d=!1,p=[];for(let[c,T]of Object.entries(r))typeof T==\"boolean\"&&(d=!0),T===!0&&p.push(c.replace(/([A-Z])/g,g=>`-${g.toLowerCase()}`));if(d){u[\"data-headlessui-state\"]=p.join(\" \");for(let c of p)u[`data-${c}`]=\"\"}}if(b(t)&&(Object.keys(m(o)).length>0||Object.keys(m(u)).length>0))if(!k(f)||Array.isArray(f)&&f.length>1||D(f)){if(Object.keys(m(o)).length>0)throw new Error(['Passing props on \"Fragment\"!',\"\",`The current component <${a} /> is rendering a \"Fragment\".`,\"However we need to passthrough the following props:\",Object.keys(m(o)).concat(Object.keys(m(u))).map(d=>`  - ${d}`).join(`\n`),\"\",\"You can apply a few solutions:\",['Add an `as=\"...\"` prop, to ensure that we render an actual element instead of a \"Fragment\".',\"Render a single element as the child so that we can forward the props onto that element.\"].map(d=>`  - ${d}`).join(`\n`)].join(`\n`))}else{let d=f.props,p=d==null?void 0:d.className,c=typeof p==\"function\"?(...R)=>N(p(...R),o.className):N(p,o.className),T=c?{className:c}:{},g=P(f.props,m(h(o,[\"ref\"])));for(let R in u)R in g&&delete u[R];return v(f,Object.assign({},g,u,y,{ref:s(H(f),y.ref)},T))}return S(t,Object.assign({},h(o,[\"ref\"]),!b(t)&&y,!b(t)&&u),f)}function $(){let n=M([]),r=x(e=>{for(let a of n.current)a!=null&&(typeof a==\"function\"?a(e):a.current=e)},[]);return(...e)=>{if(!e.every(a=>a==null))return n.current=e,r}}function I(...n){return n.every(r=>r==null)?void 0:r=>{for(let e of n)e!=null&&(typeof e==\"function\"?e(r):e.current=r)}}function P(...n){var a;if(n.length===0)return{};if(n.length===1)return n[0];let r={},e={};for(let s of n)for(let t in s)t.startsWith(\"on\")&&typeof s[t]==\"function\"?((a=e[t])!=null||(e[t]=[]),e[t].push(s[t])):r[t]=s[t];if(r.disabled||r[\"aria-disabled\"])for(let s in e)/^(on(?:Click|Pointer|Mouse|Key)(?:Down|Up|Press)?)$/.test(s)&&(e[s]=[t=>{var l;return(l=t==null?void 0:t.preventDefault)==null?void 0:l.call(t)}]);for(let s in e)Object.assign(r,{[s](t,...l){let i=e[s];for(let o of i){if((t instanceof Event||(t==null?void 0:t.nativeEvent)instanceof Event)&&t.defaultPrevented)return;o(t,...l)}}});return r}function V(...n){var a;if(n.length===0)return{};if(n.length===1)return n[0];let r={},e={};for(let s of n)for(let t in s)t.startsWith(\"on\")&&typeof s[t]==\"function\"?((a=e[t])!=null||(e[t]=[]),e[t].push(s[t])):r[t]=s[t];for(let s in e)Object.assign(r,{[s](...t){let l=e[s];for(let i of l)i==null||i(...t)}});return r}function Y(n){var r;return Object.assign(w(n),{displayName:(r=n.displayName)!=null?r:n.name})}function m(n){let r=Object.assign({},n);for(let e in r)r[e]===void 0&&delete r[e];return r}function h(n,r=[]){let e=Object.assign({},n);for(let a of r)a in e&&delete e[a];return e}function H(n){return E.version.split(\".\")[0]>=\"19\"?n.props.ref:n.ref}function b(n){return n===j||n===Symbol.for(\"react.fragment\")}function D(n){return b(n.type)}export{A as RenderFeatures,C as RenderStrategy,m as compact,Y as forwardRefWithAs,b as isFragment,D as isFragmentInstance,V as mergeProps,K as useRender};\n","import{useRef as o,useState as f}from\"react\";import{flushSync as a}from\"react-dom\";import{useEvent as m}from'./use-event.js';function b(l,r,c){let[i,s]=f(c),e=l!==void 0,t=o(e),u=o(!1),d=o(!1);return e&&!t.current&&!u.current?(u.current=!0,t.current=e,console.error(\"A component is changing from uncontrolled to controlled. This may be caused by the value changing from undefined to a defined value, which should not happen.\")):!e&&t.current&&!d.current&&(d.current=!0,t.current=e,console.error(\"A component is changing from controlled to uncontrolled. This may be caused by the value changing from a defined value to undefined, which should not happen.\")),[e?l:i,m(n=>(e||a(()=>s(n)),r==null?void 0:r(n)))]}export{b as useControllable};\n","import{useState as u}from\"react\";function l(e){let[t]=u(e);return t}export{l as useDefaultValue};\n","import{isValidElement as f}from\"react\";function p(t={},i=null,n=[]){for(let[e,o]of Object.entries(t))s(n,r(i,e),o);return n}function r(t,i){return t?t+\"[\"+i+\"]\":i}function s(t,i,n){if(Array.isArray(n))for(let[e,o]of n.entries())s(t,r(i,e.toString()),o);else n instanceof Date?t.push([i,n.toISOString()]):typeof n==\"boolean\"?t.push([i,n?\"1\":\"0\"]):typeof n==\"string\"?t.push([i,n]):typeof n==\"number\"?t.push([i,`${n}`]):n==null?t.push([i,\"\"]):c(n)&&!f(n)&&p(n,i,t)}function g(t){var n,e;let i=(n=t==null?void 0:t.form)!=null?n:t.closest(\"form\");if(i){for(let o of i.elements)if(o!==t&&(o.tagName===\"INPUT\"&&o.type===\"submit\"||o.tagName===\"BUTTON\"&&o.type===\"submit\"||o.nodeName===\"INPUT\"&&o.type===\"image\")){o.click();return}(e=i.requestSubmit)==null||e.call(i)}}function c(t){if(Object.prototype.toString.call(t)!==\"[object Object]\")return!1;let i=Object.getPrototypeOf(t);return i===null||Object.getPrototypeOf(i)===null}export{g as attemptSubmit,p as objectToFormEntries};\n","import{forwardRefWithAs as i,useRender as p}from'../utils/render.js';let a=\"span\";var s=(e=>(e[e.None=1]=\"None\",e[e.Focusable=2]=\"Focusable\",e[e.Hidden=4]=\"Hidden\",e))(s||{});function l(t,r){var n;let{features:d=1,...e}=t,o={ref:r,\"aria-hidden\":(d&2)===2?!0:(n=e[\"aria-hidden\"])!=null?n:void 0,hidden:(d&4)===4?!0:void 0,style:{position:\"fixed\",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",borderWidth:\"0\",...(d&4)===4&&(d&2)!==2&&{display:\"none\"}}};return p()({ourProps:o,theirProps:e,slot:{},defaultTag:a,name:\"Hidden\"})}let f=i(l);export{f as Hidden,s as HiddenFeatures};\n","import o,{createContext as H,useContext as E,useEffect as m,useState as u}from\"react\";import{createPortal as g}from\"react-dom\";import{useDisposables as h}from'../hooks/use-disposables.js';import{objectToFormEntries as x}from'../utils/form.js';import{compact as y}from'../utils/render.js';import{Hidden as l,HiddenFeatures as d}from'./hidden.js';let f=H(null);function W(t){let[e,r]=u(null);return o.createElement(f.Provider,{value:{target:e}},t.children,o.createElement(l,{features:d.Hidden,ref:r}))}function c({children:t}){let e=E(f);if(!e)return o.createElement(o.Fragment,null,t);let{target:r}=e;return r?g(o.createElement(o.Fragment,null,t),r):null}function j({data:t,form:e,disabled:r,onReset:n,overrides:F}){let[i,a]=u(null),p=h();return m(()=>{if(n&&i)return p.addEventListener(i,\"reset\",n)},[i,e,n]),o.createElement(c,null,o.createElement(C,{setForm:a,formId:e}),x(t).map(([s,v])=>o.createElement(l,{features:d.Hidden,...y({key:s,as:\"input\",type:\"hidden\",hidden:!0,readOnly:!0,form:e,disabled:r,name:s,value:v,...F})})))}function C({setForm:t,formId:e}){return m(()=>{if(e){let r=document.getElementById(e);r&&t(r)}},[t,e]),e?null:o.createElement(l,{features:d.Hidden,as:\"input\",type:\"hidden\",hidden:!0,readOnly:!0,ref:r=>{if(!r)return;let n=r.closest(\"form\");n&&t(n)}})}export{j as FormFields,W as FormFieldsProvider,c as HoistFormFields};\n","import n,{createContext as d,useContext as i}from\"react\";let e=d(void 0);function u(){return i(e)}function f({id:t,children:r}){return n.createElement(e.Provider,{value:t},r)}export{f as IdProvider,u as useProvidedId};\n","function o(e){return typeof e!=\"object\"||e===null?!1:\"nodeType\"in e}function t(e){return o(e)&&\"tagName\"in e}function n(e){return t(e)&&\"accessKey\"in e}function i(e){return t(e)&&\"tabIndex\"in e}function r(e){return t(e)&&\"style\"in e}function u(e){return n(e)&&e.nodeName===\"IFRAME\"}function l(e){return n(e)&&e.nodeName===\"INPUT\"}function s(e){return n(e)&&e.nodeName===\"TEXTAREA\"}function m(e){return n(e)&&e.nodeName===\"LABEL\"}function a(e){return n(e)&&e.nodeName===\"FIELDSET\"}function E(e){return n(e)&&e.nodeName===\"LEGEND\"}function L(e){return t(e)?e.matches('a[href],audio[controls],button,details,embed,iframe,img[usemap],input:not([type=\"hidden\"]),label,select,textarea,video[controls]'):!1}export{r as hasInlineStyle,t as isElement,n as isHTMLElement,a as isHTMLFieldSetElement,u as isHTMLIframeElement,l as isHTMLInputElement,m as isHTMLLabelElement,E as isHTMLLegendElement,s as isHTMLTextAreaElement,i as isHTMLorSVGElement,L as isInteractiveElement,o as isNode};\n","import*as n from'./dom.js';function s(l){let e=l.parentElement,t=null;for(;e&&!n.isHTMLFieldSetElement(e);)n.isHTMLLegendElement(e)&&(t=e),e=e.parentElement;let i=(e==null?void 0:e.getAttribute(\"disabled\"))===\"\";return i&&r(t)?!1:i}function r(l){if(!l)return!1;let e=l.previousElementSibling;for(;e!==null;){if(n.isHTMLLegendElement(e))return!1;e=e.previousElementSibling}return!0}export{s as isDisabledReactIssue7711};\n","import{useEffect as l,useRef as i}from\"react\";import{useEvent as r}from'./use-event.js';let u=Symbol();function T(t,n=!0){return Object.assign(t,{[u]:n})}function y(...t){let n=i(t);l(()=>{n.current=t},[t]);let c=r(e=>{for(let o of n.current)o!=null&&(typeof o==\"function\"?o(e):o.current=e)});return t.every(e=>e==null||(e==null?void 0:e[u]))?void 0:c}export{T as optionalRef,y as useSyncRefs};\n","\"use client\";import m,{createContext as D,useContext as d,useMemo as u,useState as T}from\"react\";import{useEvent as P}from'../../hooks/use-event.js';import{useId as g}from'../../hooks/use-id.js';import{useIsoMorphicEffect as x}from'../../hooks/use-iso-morphic-effect.js';import{useSlot as y}from'../../hooks/use-slot.js';import{useSyncRefs as E}from'../../hooks/use-sync-refs.js';import{useDisabled as v}from'../../internal/disabled.js';import{forwardRefWithAs as R,useRender as S}from'../../utils/render.js';let a=D(null);a.displayName=\"DescriptionContext\";function f(){let r=d(a);if(r===null){let e=new Error(\"You used a <Description /> component, but it is not inside a relevant parent.\");throw Error.captureStackTrace&&Error.captureStackTrace(e,f),e}return r}function w(){var r,e;return(e=(r=d(a))==null?void 0:r.value)!=null?e:void 0}function H(){let[r,e]=T([]);return[r.length>0?r.join(\" \"):void 0,u(()=>function(t){let i=P(n=>(e(o=>[...o,n]),()=>e(o=>{let s=o.slice(),p=s.indexOf(n);return p!==-1&&s.splice(p,1),s}))),l=u(()=>({register:i,slot:t.slot,name:t.name,props:t.props,value:t.value}),[i,t.slot,t.name,t.props,t.value]);return m.createElement(a.Provider,{value:l},t.children)},[e])]}let I=\"p\";function C(r,e){let c=g(),t=v(),{id:i=`headlessui-description-${c}`,...l}=r,n=f(),o=E(e);x(()=>n.register(i),[i,n.register]);let s=y({...n.slot,disabled:t||!1}),p={ref:o,...n.props,id:i};return S()({ourProps:p,theirProps:l,slot:s,defaultTag:I,name:n.name||\"Description\"})}let _=R(C),M=Object.assign(_,{});export{M as Description,w as useDescribedBy,H as useDescriptions};\n","var o=(r=>(r.Space=\" \",r.Enter=\"Enter\",r.Escape=\"Escape\",r.Backspace=\"Backspace\",r.Delete=\"Delete\",r.ArrowLeft=\"ArrowLeft\",r.ArrowUp=\"ArrowUp\",r.ArrowRight=\"ArrowRight\",r.ArrowDown=\"ArrowDown\",r.Home=\"Home\",r.End=\"End\",r.PageUp=\"PageUp\",r.PageDown=\"PageDown\",r.Tab=\"Tab\",r))(o||{});export{o as Keys};\n","\"use client\";import R,{createContext as D,useContext as h,useMemo as v,useState as k}from\"react\";import{useEvent as P}from'../../hooks/use-event.js';import{useId as _}from'../../hooks/use-id.js';import{useIsoMorphicEffect as S}from'../../hooks/use-iso-morphic-effect.js';import{useSlot as A}from'../../hooks/use-slot.js';import{useSyncRefs as B}from'../../hooks/use-sync-refs.js';import{useDisabled as F}from'../../internal/disabled.js';import{useProvidedId as M}from'../../internal/id.js';import*as m from'../../utils/dom.js';import{forwardRefWithAs as I,useRender as H}from'../../utils/render.js';let L=D(null);L.displayName=\"LabelContext\";function C(){let n=h(L);if(n===null){let l=new Error(\"You used a <Label /> component, but it is not inside a relevant parent.\");throw Error.captureStackTrace&&Error.captureStackTrace(l,C),l}return n}function N(n){var a,e,o;let l=(e=(a=h(L))==null?void 0:a.value)!=null?e:void 0;return((o=n==null?void 0:n.length)!=null?o:0)>0?[l,...n].filter(Boolean).join(\" \"):l}function V({inherit:n=!1}={}){let l=N(),[a,e]=k([]),o=n?[l,...a].filter(Boolean):a;return[o.length>0?o.join(\" \"):void 0,v(()=>function(t){let p=P(i=>(e(u=>[...u,i]),()=>e(u=>{let d=u.slice(),f=d.indexOf(i);return f!==-1&&d.splice(f,1),d}))),b=v(()=>({register:p,slot:t.slot,name:t.name,props:t.props,value:t.value}),[p,t.slot,t.name,t.props,t.value]);return R.createElement(L.Provider,{value:b},t.children)},[e])]}let G=\"label\";function U(n,l){var y;let a=_(),e=C(),o=M(),T=F(),{id:t=`headlessui-label-${a}`,htmlFor:p=o!=null?o:(y=e.props)==null?void 0:y.htmlFor,passive:b=!1,...i}=n,u=B(l);S(()=>e.register(t),[t,e.register]);let d=P(s=>{let g=s.currentTarget;if(!(s.target!==s.currentTarget&&m.isInteractiveElement(s.target))&&(m.isHTMLLabelElement(g)&&s.preventDefault(),e.props&&\"onClick\"in e.props&&typeof e.props.onClick==\"function\"&&e.props.onClick(s),m.isHTMLLabelElement(g))){let r=document.getElementById(g.htmlFor);if(r){let E=r.getAttribute(\"disabled\");if(E===\"true\"||E===\"\")return;let x=r.getAttribute(\"aria-disabled\");if(x===\"true\"||x===\"\")return;(m.isHTMLInputElement(r)&&(r.type===\"file\"||r.type===\"radio\"||r.type===\"checkbox\")||r.role===\"radio\"||r.role===\"checkbox\"||r.role===\"switch\")&&r.click(),r.focus({preventScroll:!0})}}}),f=A({...e.slot,disabled:T||!1}),c={ref:u,...e.props,id:t,htmlFor:p,onClick:d};return b&&(\"onClick\"in c&&(delete c.htmlFor,delete c.onClick),\"onClick\"in i&&delete i.onClick),H()({ourProps:c,theirProps:i,slot:f,defaultTag:p?G:\"div\",name:e.name||\"Label\"})}let j=I(U),Z=Object.assign(j,{});export{Z as Label,C as useLabelContext,N as useLabelledBy,V as useLabels};\n","\"use client\";import r,{createContext as n,useContext as i}from\"react\";let e=n(()=>{});function u(){return i(e)}function C({value:t,children:o}){return r.createElement(e.Provider,{value:t},o)}export{C as CloseProvider,u as useClose};\n","import{useCallback as n}from\"react\";function l(e,r){return e!==null&&r!==null&&typeof e==\"object\"&&typeof r==\"object\"&&\"id\"in e&&\"id\"in r?e.id===r.id:e===r}function u(e=l){return n((r,t)=>{if(typeof e==\"string\"){let o=e;return(r==null?void 0:r[o])===(t==null?void 0:t[o])}return e(r,t)},[e])}export{u as useByComparator};\n","import{useState as l}from\"react\";import{disposables as m}from'../utils/disposables.js';import{useIsoMorphicEffect as p}from'./use-iso-morphic-effect.js';function h(i){if(i===null)return{width:0,height:0};let{width:t,height:e}=i.getBoundingClientRect();return{width:t,height:e}}function w(i,t,e=!1){let[r,f]=l(()=>h(t));return p(()=>{if(!t||!i)return;let n=m();return n.requestAnimationFrame(function s(){n.requestAnimationFrame(s),f(u=>{let o=h(t);return o.width===u.width&&o.height===u.height?u:o})}),()=>{n.dispose()}},[t,i]),e?{width:`${r.width}px`,height:`${r.height}px`}:r}export{w as useElementSize};\n","var g=(f=>(f[f.Left=0]=\"Left\",f[f.Right=2]=\"Right\",f))(g||{});export{g as MouseButton};\n","import{useRef as l}from\"react\";import{MouseButton as f}from'../components/mouse.js';import{isDisabledReactIssue7711 as n}from'../utils/bugs.js';import{useEvent as o}from'./use-event.js';function s(t){let r=l(null),u=o(e=>{r.current=e.pointerType,!n(e.currentTarget)&&e.pointerType===\"mouse\"&&e.button===f.Left&&(e.preventDefault(),t(e))}),i=o(e=>{r.current!==\"mouse\"&&(n(e.currentTarget)||t(e))});return{onPointerDown:u,onClick:i}}export{s as useHandleToggle};\n","class a extends Map{constructor(t){super();this.factory=t}get(t){let e=super.get(t);return e===void 0&&(e=this.factory(t),this.set(t,e)),e}}export{a as DefaultMap};\n","var h=Object.defineProperty;var v=(t,e,r)=>e in t?h(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var S=(t,e,r)=>(v(t,typeof e!=\"symbol\"?e+\"\":e,r),r),b=(t,e,r)=>{if(!e.has(t))throw TypeError(\"Cannot \"+r)};var i=(t,e,r)=>(b(t,e,\"read from private field\"),r?r.call(t):e.get(t)),c=(t,e,r)=>{if(e.has(t))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(t):e.set(t,r)},u=(t,e,r,s)=>(b(t,e,\"write to private field\"),s?s.call(t,r):e.set(t,r),r);var n,a,o;import{DefaultMap as m}from'./utils/default-map.js';import{disposables as y}from'./utils/disposables.js';import{env as d}from'./utils/env.js';class T{constructor(e){c(this,n,{});c(this,a,new m(()=>new Set));c(this,o,new Set);S(this,\"disposables\",y());u(this,n,e),d.isServer&&this.disposables.microTask(()=>{this.dispose()})}dispose(){this.disposables.dispose()}get state(){return i(this,n)}subscribe(e,r){if(d.isServer)return()=>{};let s={selector:e,callback:r,current:e(i(this,n))};return i(this,o).add(s),this.disposables.add(()=>{i(this,o).delete(s)})}on(e,r){return d.isServer?()=>{}:(i(this,a).get(e).add(r),this.disposables.add(()=>{i(this,a).get(e).delete(r)}))}send(e){let r=this.reduce(i(this,n),e);if(r!==i(this,n)){u(this,n,r);for(let s of i(this,o)){let l=s.selector(i(this,n));j(s.current,l)||(s.current=l,s.callback(l))}for(let s of i(this,a).get(e.type))s(i(this,n),e)}}}n=new WeakMap,a=new WeakMap,o=new WeakMap;function j(t,e){return Object.is(t,e)?!0:typeof t!=\"object\"||t===null||typeof e!=\"object\"||e===null?!1:Array.isArray(t)&&Array.isArray(e)?t.length!==e.length?!1:f(t[Symbol.iterator](),e[Symbol.iterator]()):t instanceof Map&&e instanceof Map||t instanceof Set&&e instanceof Set?t.size!==e.size?!1:f(t.entries(),e.entries()):p(t)&&p(e)?f(Object.entries(t)[Symbol.iterator](),Object.entries(e)[Symbol.iterator]()):!1}function f(t,e){do{let r=t.next(),s=e.next();if(r.done&&s.done)return!0;if(r.done||s.done||!Object.is(r.value,s.value))return!1}while(!0)}function p(t){if(Object.prototype.toString.call(t)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(t);return e===null||Object.getPrototypeOf(e)===null}function k(t){let[e,r]=t(),s=y();return(...l)=>{e(...l),s.dispose(),s.microTask(r)}}export{T as Machine,k as batch,j as shallowEqual};\n","var a=Object.defineProperty;var r=(e,c,t)=>c in e?a(e,c,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[c]=t;var p=(e,c,t)=>(r(e,typeof c!=\"symbol\"?c+\"\":c,t),t);import{Machine as d}from'../machine.js';import{DefaultMap as l}from'../utils/default-map.js';import{match as u}from'../utils/match.js';var k=(t=>(t[t.Push=0]=\"Push\",t[t.Pop=1]=\"Pop\",t))(k||{});let y={[0](e,c){let t=c.id,s=e.stack,i=e.stack.indexOf(t);if(i!==-1){let n=e.stack.slice();return n.splice(i,1),n.push(t),s=n,{...e,stack:s}}return{...e,stack:[...e.stack,t]}},[1](e,c){let t=c.id,s=e.stack.indexOf(t);if(s===-1)return e;let i=e.stack.slice();return i.splice(s,1),{...e,stack:i}}};class o extends d{constructor(){super(...arguments);p(this,\"actions\",{push:t=>this.send({type:0,id:t}),pop:t=>this.send({type:1,id:t})});p(this,\"selectors\",{isTop:(t,s)=>t.stack[t.stack.length-1]===s,inStack:(t,s)=>t.stack.includes(s)})}static new(){return new o({stack:[]})}reduce(t,s){return u(s.type,y,t,s)}}const x=new l(()=>o.new());export{k as ActionTypes,x as stackMachines};\n","/**\n * @license React\n * use-sync-external-store-with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useSyncExternalStore = React.useSyncExternalStore,\n  useRef = React.useRef,\n  useEffect = React.useEffect,\n  useMemo = React.useMemo,\n  useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot,\n  selector,\n  isEqual\n) {\n  var instRef = useRef(null);\n  if (null === instRef.current) {\n    var inst = { hasValue: !1, value: null };\n    instRef.current = inst;\n  } else inst = instRef.current;\n  instRef = useMemo(\n    function () {\n      function memoizedSelector(nextSnapshot) {\n        if (!hasMemo) {\n          hasMemo = !0;\n          memoizedSnapshot = nextSnapshot;\n          nextSnapshot = selector(nextSnapshot);\n          if (void 0 !== isEqual && inst.hasValue) {\n            var currentSelection = inst.value;\n            if (isEqual(currentSelection, nextSnapshot))\n              return (memoizedSelection = currentSelection);\n          }\n          return (memoizedSelection = nextSnapshot);\n        }\n        currentSelection = memoizedSelection;\n        if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n        var nextSelection = selector(nextSnapshot);\n        if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n          return (memoizedSnapshot = nextSnapshot), currentSelection;\n        memoizedSnapshot = nextSnapshot;\n        return (memoizedSelection = nextSelection);\n      }\n      var hasMemo = !1,\n        memoizedSnapshot,\n        memoizedSelection,\n        maybeGetServerSnapshot =\n          void 0 === getServerSnapshot ? null : getServerSnapshot;\n      return [\n        function () {\n          return memoizedSelector(getSnapshot());\n        },\n        null === maybeGetServerSnapshot\n          ? void 0\n          : function () {\n              return memoizedSelector(maybeGetServerSnapshot());\n            }\n      ];\n    },\n    [getSnapshot, getServerSnapshot, selector, isEqual]\n  );\n  var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n  useEffect(\n    function () {\n      inst.hasValue = !0;\n      inst.value = value;\n    },\n    [value]\n  );\n  useDebugValue(value);\n  return value;\n};\n","/**\n * @license React\n * use-sync-external-store-with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function is(x, y) {\n      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n    }\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n    var React = require(\"react\"),\n      objectIs = \"function\" === typeof Object.is ? Object.is : is,\n      useSyncExternalStore = React.useSyncExternalStore,\n      useRef = React.useRef,\n      useEffect = React.useEffect,\n      useMemo = React.useMemo,\n      useDebugValue = React.useDebugValue;\n    exports.useSyncExternalStoreWithSelector = function (\n      subscribe,\n      getSnapshot,\n      getServerSnapshot,\n      selector,\n      isEqual\n    ) {\n      var instRef = useRef(null);\n      if (null === instRef.current) {\n        var inst = { hasValue: !1, value: null };\n        instRef.current = inst;\n      } else inst = instRef.current;\n      instRef = useMemo(\n        function () {\n          function memoizedSelector(nextSnapshot) {\n            if (!hasMemo) {\n              hasMemo = !0;\n              memoizedSnapshot = nextSnapshot;\n              nextSnapshot = selector(nextSnapshot);\n              if (void 0 !== isEqual && inst.hasValue) {\n                var currentSelection = inst.value;\n                if (isEqual(currentSelection, nextSnapshot))\n                  return (memoizedSelection = currentSelection);\n              }\n              return (memoizedSelection = nextSnapshot);\n            }\n            currentSelection = memoizedSelection;\n            if (objectIs(memoizedSnapshot, nextSnapshot))\n              return currentSelection;\n            var nextSelection = selector(nextSnapshot);\n            if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n              return (memoizedSnapshot = nextSnapshot), currentSelection;\n            memoizedSnapshot = nextSnapshot;\n            return (memoizedSelection = nextSelection);\n          }\n          var hasMemo = !1,\n            memoizedSnapshot,\n            memoizedSelection,\n            maybeGetServerSnapshot =\n              void 0 === getServerSnapshot ? null : getServerSnapshot;\n          return [\n            function () {\n              return memoizedSelector(getSnapshot());\n            },\n            null === maybeGetServerSnapshot\n              ? void 0\n              : function () {\n                  return memoizedSelector(maybeGetServerSnapshot());\n                }\n          ];\n        },\n        [getSnapshot, getServerSnapshot, selector, isEqual]\n      );\n      var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n      useEffect(\n        function () {\n          inst.hasValue = !0;\n          inst.value = value;\n        },\n        [value]\n      );\n      useDebugValue(value);\n      return value;\n    };\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/use-sync-external-store-with-selector.production.js');\n} else {\n  module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');\n}\n","import{useSyncExternalStoreWithSelector as a}from\"use-sync-external-store/with-selector\";import{useEvent as t}from'./hooks/use-event.js';import{shallowEqual as o}from'./machine.js';function S(e,n,r=o){return a(t(i=>e.subscribe(s,i)),t(()=>e.state),t(()=>e.state),t(n),r)}function s(e){return e}export{S as useSlice};\n","import{useCallback as n,useId as u}from\"react\";import{stackMachines as p}from'../machines/stack-machine.js';import{useSlice as f}from'../react-glue.js';import{useIsoMorphicEffect as a}from'./use-iso-morphic-effect.js';function I(o,s){let t=u(),r=p.get(s),[i,c]=f(r,n(e=>[r.selectors.isTop(e,t),r.selectors.inStack(e,t)],[r,t]));return a(()=>{if(o)return r.actions.push(t),()=>r.actions.pop(t)},[r,o,t]),o?c?i:!0:!1}export{I as useIsTopLayer};\n","import{disposables as M}from'../utils/disposables.js';import{getOwnerDocument as b}from'../utils/owner.js';import{useIsTopLayer as L}from'./use-is-top-layer.js';import{useIsoMorphicEffect as T}from'./use-iso-morphic-effect.js';let f=new Map,u=new Map;function h(t){var e;let r=(e=u.get(t))!=null?e:0;return u.set(t,r+1),r!==0?()=>m(t):(f.set(t,{\"aria-hidden\":t.getAttribute(\"aria-hidden\"),inert:t.inert}),t.setAttribute(\"aria-hidden\",\"true\"),t.inert=!0,()=>m(t))}function m(t){var i;let r=(i=u.get(t))!=null?i:1;if(r===1?u.delete(t):u.set(t,r-1),r!==1)return;let e=f.get(t);e&&(e[\"aria-hidden\"]===null?t.removeAttribute(\"aria-hidden\"):t.setAttribute(\"aria-hidden\",e[\"aria-hidden\"]),t.inert=e.inert,f.delete(t))}function y(t,{allowed:r,disallowed:e}={}){let i=L(t,\"inert-others\");T(()=>{var d,c;if(!i)return;let a=M();for(let n of(d=e==null?void 0:e())!=null?d:[])n&&a.add(h(n));let s=(c=r==null?void 0:r())!=null?c:[];for(let n of s){if(!n)continue;let l=b(n);if(!l)continue;let o=n.parentElement;for(;o&&o!==l.body;){for(let p of o.children)s.some(E=>p.contains(E))||a.add(h(p));o=o.parentElement}}return a.dispose},[i,r,e])}export{y as useInertOthers};\n","import{useEffect as l}from\"react\";import{disposables as u}from'../utils/disposables.js';import*as c from'../utils/dom.js';import{useLatestValue as d}from'./use-latest-value.js';function p(s,n,o){let i=d(t=>{let e=t.getBoundingClientRect();e.x===0&&e.y===0&&e.width===0&&e.height===0&&o()});l(()=>{if(!s)return;let t=n===null?null:c.isHTMLElement(n)?n:n.current;if(!t)return;let e=u();if(typeof ResizeObserver!=\"undefined\"){let r=new ResizeObserver(()=>i.current(t));r.observe(t),e.add(()=>r.disconnect())}if(typeof IntersectionObserver!=\"undefined\"){let r=new IntersectionObserver(()=>i.current(t));r.observe(t),e.add(()=>r.disconnect())}return()=>e.dispose()},[n,i,s])}export{p as useOnDisappear};\n","import{disposables as p}from'./disposables.js';import*as y from'./dom.js';import{match as L}from'./match.js';import{getActiveElement as b,getOwnerDocument as F,getRootNode as f}from'./owner.js';let E=[\"[contentEditable=true]\",\"[tabindex]\",\"a[href]\",\"area[href]\",\"button:not([disabled])\",\"iframe\",\"input:not([disabled])\",\"select:not([disabled])\",\"details>summary\",\"textarea:not([disabled])\"].map(e=>`${e}:not([tabindex='-1'])`).join(\",\"),S=[\"[data-autofocus]\"].map(e=>`${e}:not([tabindex='-1'])`).join(\",\");var T=(o=>(o[o.First=1]=\"First\",o[o.Previous=2]=\"Previous\",o[o.Next=4]=\"Next\",o[o.Last=8]=\"Last\",o[o.WrapAround=16]=\"WrapAround\",o[o.NoScroll=32]=\"NoScroll\",o[o.AutoFocus=64]=\"AutoFocus\",o))(T||{}),A=(n=>(n[n.Error=0]=\"Error\",n[n.Overflow=1]=\"Overflow\",n[n.Success=2]=\"Success\",n[n.Underflow=3]=\"Underflow\",n))(A||{}),O=(t=>(t[t.Previous=-1]=\"Previous\",t[t.Next=1]=\"Next\",t))(O||{});function x(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(E)).sort((r,t)=>Math.sign((r.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}function h(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(S)).sort((r,t)=>Math.sign((r.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}var I=(t=>(t[t.Strict=0]=\"Strict\",t[t.Loose=1]=\"Loose\",t))(I||{});function H(e,r=0){var t;return e===((t=F(e))==null?void 0:t.body)?!1:L(r,{[0](){return e.matches(E)},[1](){let l=e;for(;l!==null;){if(l.matches(E))return!0;l=l.parentElement}return!1}})}function K(e){p().nextFrame(()=>{let r=b(e);r&&y.isHTMLorSVGElement(r)&&!H(r,0)&&w(e)})}var g=(t=>(t[t.Keyboard=0]=\"Keyboard\",t[t.Mouse=1]=\"Mouse\",t))(g||{});typeof window!=\"undefined\"&&typeof document!=\"undefined\"&&(document.addEventListener(\"keydown\",e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible=\"\")},!0),document.addEventListener(\"click\",e=>{e.detail===1?delete document.documentElement.dataset.headlessuiFocusVisible:e.detail===0&&(document.documentElement.dataset.headlessuiFocusVisible=\"\")},!0));function w(e){e==null||e.focus({preventScroll:!0})}let _=[\"textarea\",\"input\"].join(\",\");function P(e){var r,t;return(t=(r=e==null?void 0:e.matches)==null?void 0:r.call(e,_))!=null?t:!1}function G(e,r=t=>t){return e.slice().sort((t,l)=>{let n=r(t),a=r(l);if(n===null||a===null)return 0;let u=n.compareDocumentPosition(a);return u&Node.DOCUMENT_POSITION_FOLLOWING?-1:u&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function R(e,r,t=e===null?document.body:f(e)){return v(x(t),r,{relativeTo:e})}function v(e,r,{sorted:t=!0,relativeTo:l=null,skipElements:n=[]}={}){let a=Array.isArray(e)?e.length>0?f(e[0]):document:f(e),u=Array.isArray(e)?t?G(e):e:r&64?h(e):x(e);n.length>0&&u.length>1&&(u=u.filter(i=>!n.some(d=>d!=null&&\"current\"in d?(d==null?void 0:d.current)===i:d===i))),l=l!=null?l:a==null?void 0:a.activeElement;let o=(()=>{if(r&5)return 1;if(r&10)return-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),M=(()=>{if(r&1)return 0;if(r&2)return Math.max(0,u.indexOf(l))-1;if(r&4)return Math.max(0,u.indexOf(l))+1;if(r&8)return u.length-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),N=r&32?{preventScroll:!0}:{},m=0,c=u.length,s;do{if(m>=c||m+c<=0)return 0;let i=M+m;if(r&16)i=(i+c)%c;else{if(i<0)return 3;if(i>=c)return 1}s=u[i],s==null||s.focus(N),m+=o}while(s!==b(s));return r&6&&P(s)&&s.select(),2}export{T as Focus,A as FocusResult,I as FocusableMode,w as focusElement,R as focusFrom,v as focusIn,E as focusableSelector,h as getAutoFocusableElements,x as getFocusableElements,H as isFocusableElement,K as restoreFocusIfNecessary,G as sortByDomNode};\n","function t(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function i(){return/Android/gi.test(window.navigator.userAgent)}function n(){return t()||i()}export{i as isAndroid,t as isIOS,n as isMobile};\n","import{useEffect as c}from\"react\";import{useLatestValue as a}from'./use-latest-value.js';function i(t,e,o,n){let u=a(o);c(()=>{if(!t)return;function r(m){u.current(m)}return document.addEventListener(e,r,n),()=>document.removeEventListener(e,r,n)},[t,e,n])}export{i as useDocumentEvent};\n","import{useEffect as a}from\"react\";import{useLatestValue as f}from'./use-latest-value.js';function s(t,e,o,n){let i=f(o);a(()=>{if(!t)return;function r(d){i.current(d)}return window.addEventListener(e,r,n),()=>window.removeEventListener(e,r,n)},[t,e,n])}export{s as useWindowEvent};\n","import{useCallback as T,useRef as E}from\"react\";import*as d from'../utils/dom.js';import{FocusableMode as g,isFocusableElement as y}from'../utils/focus-management.js';import{isMobile as p}from'../utils/platform.js';import{useDocumentEvent as a}from'./use-document-event.js';import{useLatestValue as L}from'./use-latest-value.js';import{useWindowEvent as x}from'./use-window-event.js';const C=30;function k(o,f,h){let m=L(h),s=T(function(e,c){if(e.defaultPrevented)return;let r=c(e);if(r===null||!r.getRootNode().contains(r)||!r.isConnected)return;let M=function u(n){return typeof n==\"function\"?u(n()):Array.isArray(n)||n instanceof Set?n:[n]}(f);for(let u of M)if(u!==null&&(u.contains(r)||e.composed&&e.composedPath().includes(u)))return;return!y(r,g.Loose)&&r.tabIndex!==-1&&e.preventDefault(),m.current(e,r)},[m,f]),i=E(null);a(o,\"pointerdown\",t=>{var e,c;p()||(i.current=((c=(e=t.composedPath)==null?void 0:e.call(t))==null?void 0:c[0])||t.target)},!0),a(o,\"pointerup\",t=>{if(p()||!i.current)return;let e=i.current;return i.current=null,s(t,()=>e)},!0);let l=E({x:0,y:0});a(o,\"touchstart\",t=>{l.current.x=t.touches[0].clientX,l.current.y=t.touches[0].clientY},!0),a(o,\"touchend\",t=>{let e={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY};if(!(Math.abs(e.x-l.current.x)>=C||Math.abs(e.y-l.current.y)>=C))return s(t,()=>d.isHTMLorSVGElement(t.target)?t.target:null)},!0),x(o,\"blur\",t=>s(t,()=>d.isHTMLIframeElement(window.document.activeElement)?window.document.activeElement:null),!0)}export{k as useOutsideClick};\n","import{useMemo as o}from\"react\";import{getOwnerDocument as t,getRootNode as r}from'../utils/owner.js';function u(...e){return o(()=>t(...e),[...e])}function c(...e){return o(()=>r(...e),[...e])}export{u as useOwnerDocument,c as useRootDocument};\n","import{useRef as o}from\"react\";import*as E from'../utils/dom.js';import{useDocumentEvent as d}from'./use-document-event.js';var H=(e=>(e[e.Ignore=0]=\"Ignore\",e[e.Select=1]=\"Select\",e[e.Close=2]=\"Close\",e))(H||{});const S={Ignore:{kind:0},Select:r=>({kind:1,target:r}),Close:{kind:2}},M=200,f=5;function L(r,{trigger:n,action:T,close:e,select:p}){let l=o(null),i=o(null),u=o(null);d(r&&n!==null,\"pointerdown\",t=>{E.isNode(t==null?void 0:t.target)&&n!=null&&n.contains(t.target)&&(i.current=t.x,u.current=t.y,l.current=t.timeStamp)}),d(r&&n!==null,\"pointerup\",t=>{var s,m;let c=l.current;if(c===null||(l.current=null,!E.isHTMLorSVGElement(t.target))||Math.abs(t.x-((s=i.current)!=null?s:t.x))<f&&Math.abs(t.y-((m=u.current)!=null?m:t.y))<f)return;let a=T(t);switch(a.kind){case 0:return;case 1:{t.timeStamp-c>M&&(p(a.target),e());break}case 2:{e();break}}},{capture:!0})}export{S as Action,L as useQuickRelease};\n","import{useEffect as d}from\"react\";import{useLatestValue as s}from'./use-latest-value.js';function E(n,e,a,t){let i=s(a);d(()=>{n=n!=null?n:window;function r(o){i.current(o)}return n.addEventListener(e,r,t),()=>n.removeEventListener(e,r,t)},[n,e,t])}export{E as useEventListener};\n","import{useMemo as a}from\"react\";function e(t,u){return a(()=>{var n;if(t.type)return t.type;let r=(n=t.as)!=null?n:\"button\";if(typeof r==\"string\"&&r.toLowerCase()===\"button\"||(u==null?void 0:u.tagName)===\"BUTTON\"&&!u.hasAttribute(\"type\"))return\"button\"},[t.type,t.as,u])}export{e as useResolveButtonType};\n","import{useSyncExternalStore as e}from\"react\";function o(t){return e(t.subscribe,t.getSnapshot,t.getSnapshot)}export{o as useStore};\n","function a(o,r){let t=o(),n=new Set;return{getSnapshot(){return t},subscribe(e){return n.add(e),()=>n.delete(e)},dispatch(e,...s){let i=r[e].call(t,...s);i&&(t=i,n.forEach(c=>c()))}}}export{a as createStore};\n","function d(){let r;return{before({doc:e}){var l;let o=e.documentElement,t=(l=e.defaultView)!=null?l:window;r=Math.max(0,t.innerWidth-o.clientWidth)},after({doc:e,d:o}){let t=e.documentElement,l=Math.max(0,t.clientWidth-t.offsetWidth),n=Math.max(0,r-l);o.style(t,\"paddingRight\",`${n}px`)}}}export{d as adjustScrollbarPadding};\n","import{disposables as u}from'../../utils/disposables.js';import*as i from'../../utils/dom.js';import{isIOS as p}from'../../utils/platform.js';function w(){return p()?{before({doc:o,d:r,meta:m}){function a(s){for(let l of m().containers)for(let c of l())if(c.contains(s))return!0;return!1}r.microTask(()=>{var c;if(window.getComputedStyle(o.documentElement).scrollBehavior!==\"auto\"){let t=u();t.style(o.documentElement,\"scrollBehavior\",\"auto\"),r.add(()=>r.microTask(()=>t.dispose()))}let s=(c=window.scrollY)!=null?c:window.pageYOffset,l=null;r.addEventListener(o,\"click\",t=>{if(i.isHTMLorSVGElement(t.target))try{let e=t.target.closest(\"a\");if(!e)return;let{hash:n}=new URL(e.href),f=o.querySelector(n);i.isHTMLorSVGElement(f)&&!a(f)&&(l=f)}catch{}},!0),r.group(t=>{r.addEventListener(o,\"touchstart\",e=>{if(t.dispose(),i.isHTMLorSVGElement(e.target)&&i.hasInlineStyle(e.target))if(a(e.target)){let n=e.target;for(;n.parentElement&&a(n.parentElement);)n=n.parentElement;t.style(n,\"overscrollBehavior\",\"contain\")}else t.style(e.target,\"touchAction\",\"none\")})}),r.addEventListener(o,\"touchmove\",t=>{if(i.isHTMLorSVGElement(t.target)){if(i.isHTMLInputElement(t.target))return;if(a(t.target)){let e=t.target;for(;e.parentElement&&e.dataset.headlessuiPortal!==\"\"&&!(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth);)e=e.parentElement;e.dataset.headlessuiPortal===\"\"&&t.preventDefault()}else t.preventDefault()}},{passive:!1}),r.add(()=>{var e;let t=(e=window.scrollY)!=null?e:window.pageYOffset;s!==t&&window.scrollTo(0,s),l&&l.isConnected&&(l.scrollIntoView({block:\"nearest\"}),l=null)})})}}:{}}export{w as handleIOSLocking};\n","function r(){return{before({doc:e,d:o}){o.style(e.documentElement,\"overflow\",\"hidden\")}}}export{r as preventScroll};\n","import{disposables as s}from'../../utils/disposables.js';import{createStore as d}from'../../utils/store.js';import{adjustScrollbarPadding as i}from'./adjust-scrollbar-padding.js';import{handleIOSLocking as l}from'./handle-ios-locking.js';import{preventScroll as p}from'./prevent-scroll.js';function r(e){let o={};for(let t of e)Object.assign(o,t(o));return o}let c=d(()=>new Map,{PUSH(e,o){var n;let t=(n=this.get(e))!=null?n:{doc:e,count:0,d:s(),meta:new Set,computedMeta:{}};return t.count++,t.meta.add(o),t.computedMeta=r(t.meta),this.set(e,t),this},POP(e,o){let t=this.get(e);return t&&(t.count--,t.meta.delete(o),t.computedMeta=r(t.meta)),this},SCROLL_PREVENT(e){let o={doc:e.doc,d:e.d,meta(){return e.computedMeta}},t=[l(),i(),p()];t.forEach(({before:n})=>n==null?void 0:n(o)),t.forEach(({after:n})=>n==null?void 0:n(o))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});c.subscribe(()=>{let e=c.getSnapshot(),o=new Map;for(let[t]of e)o.set(t,t.documentElement.style.overflow);for(let t of e.values()){let n=o.get(t.doc)===\"hidden\",a=t.count!==0;(a&&!n||!a&&n)&&c.dispatch(t.count>0?\"SCROLL_PREVENT\":\"SCROLL_ALLOW\",t),t.count===0&&c.dispatch(\"TEARDOWN\",t)}});export{c as overflows};\n","import{useStore as s}from'../../hooks/use-store.js';import{useIsoMorphicEffect as u}from'../use-iso-morphic-effect.js';import{overflows as t}from'./overflow-store.js';function a(r,e,n=()=>({containers:[]})){let f=s(t),o=e?f.get(e):void 0,i=o?o.count>0:!1;return u(()=>{if(!(!e||!r))return t.dispatch(\"PUSH\",e,n),()=>t.dispatch(\"POP\",e,n)},[r,e]),i}export{a as useDocumentOverflowLockedEffect};\n","import{useDocumentOverflowLockedEffect as l}from'./document-overflow/use-document-overflow.js';import{useIsTopLayer as m}from'./use-is-top-layer.js';function f(e,c,n=()=>[document.body]){let r=m(e,\"scroll-lock\");l(r,c,t=>{var o;return{containers:[...(o=t.containers)!=null?o:[],n]}})}export{f as useScrollLock};\n","import{useRef as o}from\"react\";function t(e){return[e.screenX,e.screenY]}function u(){let e=o([-1,-1]);return{wasMoved(r){let n=t(r);return e.current[0]===n[0]&&e.current[1]===n[1]?!1:(e.current=n,!0)},update(r){e.current=t(r)}}}export{u as useTrackedPointer};\n","import{useCallback as t,useState as b}from\"react\";function c(u=0){let[r,a]=b(u),g=t(e=>a(e),[]),s=t(e=>a(l=>l|e),[]),m=t(e=>(r&e)===e,[r]),n=t(e=>a(l=>l&~e),[]),F=t(e=>a(l=>l^e),[]);return{flags:r,setFlag:g,addFlag:s,hasFlag:m,removeFlag:n,toggleFlag:F}}export{c as useFlags};\n","var T,S;import{useRef as c,useState as b}from\"react\";import{disposables as m}from'../utils/disposables.js';import{useDisposables as g}from'./use-disposables.js';import{useFlags as y}from'./use-flags.js';import{useIsoMorphicEffect as L}from'./use-iso-morphic-effect.js';typeof process!=\"undefined\"&&typeof globalThis!=\"undefined\"&&typeof Element!=\"undefined\"&&((T=process==null?void 0:process.env)==null?void 0:T[\"NODE_ENV\"])===\"test\"&&typeof((S=Element==null?void 0:Element.prototype)==null?void 0:S.getAnimations)==\"undefined\"&&(Element.prototype.getAnimations=function(){return console.warn([\"Headless UI has polyfilled `Element.prototype.getAnimations` for your tests.\",\"Please install a proper polyfill e.g. `jsdom-testing-mocks`, to silence these warnings.\",\"\",\"Example usage:\",\"```js\",\"import { mockAnimationsApi } from 'jsdom-testing-mocks'\",\"mockAnimationsApi()\",\"```\"].join(`\n`)),[]});var A=(i=>(i[i.None=0]=\"None\",i[i.Closed=1]=\"Closed\",i[i.Enter=2]=\"Enter\",i[i.Leave=4]=\"Leave\",i))(A||{});function x(e){let r={};for(let t in e)e[t]===!0&&(r[`data-${t}`]=\"\");return r}function N(e,r,t,n){let[i,a]=b(t),{hasFlag:s,addFlag:o,removeFlag:l}=y(e&&i?3:0),u=c(!1),f=c(!1),E=g();return L(()=>{var d;if(e){if(t&&a(!0),!r){t&&o(3);return}return(d=n==null?void 0:n.start)==null||d.call(n,t),C(r,{inFlight:u,prepare(){f.current?f.current=!1:f.current=u.current,u.current=!0,!f.current&&(t?(o(3),l(4)):(o(4),l(2)))},run(){f.current?t?(l(3),o(4)):(l(4),o(3)):t?l(1):o(1)},done(){var p;f.current&&D(r)||(u.current=!1,l(7),t||a(!1),(p=n==null?void 0:n.end)==null||p.call(n,t))}})}},[e,t,r,E]),e?[i,{closed:s(1),enter:s(2),leave:s(4),transition:s(2)||s(4)}]:[t,{closed:void 0,enter:void 0,leave:void 0,transition:void 0}]}function C(e,{prepare:r,run:t,done:n,inFlight:i}){let a=m();return j(e,{prepare:r,inFlight:i}),a.nextFrame(()=>{t(),a.requestAnimationFrame(()=>{a.add(M(e,n))})}),a.dispose}function M(e,r){var a,s;let t=m();if(!e)return t.dispose;let n=!1;t.add(()=>{n=!0});let i=(s=(a=e.getAnimations)==null?void 0:a.call(e).filter(o=>o instanceof CSSTransition))!=null?s:[];return i.length===0?(r(),t.dispose):(Promise.allSettled(i.map(o=>o.finished)).then(()=>{n||r()}),t.dispose)}function j(e,{inFlight:r,prepare:t}){if(r!=null&&r.current){t();return}let n=e.style.transition;e.style.transition=\"none\",t(),e.offsetHeight,e.style.transition=n}function D(e){var t,n;return((n=(t=e.getAnimations)==null?void 0:t.call(e))!=null?n:[]).some(i=>i instanceof CSSTransition&&i.playState!==\"finished\")}export{x as transitionDataAttributes,N as useTransition};\n","import{useEffect as f,useRef as s}from\"react\";import{useEvent as i}from'./use-event.js';function m(u,t){let e=s([]),r=i(u);f(()=>{let o=[...e.current];for(let[a,l]of t.entries())if(e.current[a]!==l){let n=r(t,o);return e.current=t,n}},[r,...t])}export{m as useWatch};\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n  return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (_e) {\n      return false;\n    }\n  });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n  return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\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.scrollX,\n    scrollTop: element.scrollY\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}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { isShadowRoot, isHTMLElement } from '@floating-ui/utils/dom';\n\nfunction activeElement(doc) {\n  let activeElement = doc.activeElement;\n  while (((_activeElement = activeElement) == null || (_activeElement = _activeElement.shadowRoot) == null ? void 0 : _activeElement.activeElement) != null) {\n    var _activeElement;\n    activeElement = activeElement.shadowRoot.activeElement;\n  }\n  return activeElement;\n}\nfunction contains(parent, child) {\n  if (!parent || !child) {\n    return false;\n  }\n  const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n\n  // then fallback to custom implementation with Shadow DOM support\n  if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    while (next) {\n      if (parent === next) {\n        return true;\n      }\n      // @ts-ignore\n      next = next.parentNode || next.host;\n    }\n  }\n\n  // Give up, the result is false\n  return false;\n}\n// Avoid Chrome DevTools blue warning.\nfunction getPlatform() {\n  const uaData = navigator.userAgentData;\n  if (uaData != null && uaData.platform) {\n    return uaData.platform;\n  }\n  return navigator.platform;\n}\nfunction getUserAgent() {\n  const uaData = navigator.userAgentData;\n  if (uaData && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(_ref => {\n      let {\n        brand,\n        version\n      } = _ref;\n      return brand + \"/\" + version;\n    }).join(' ');\n  }\n  return navigator.userAgent;\n}\n\n// License: https://github.com/adobe/react-spectrum/blob/b35d5c02fe900badccd0cf1a8f23bb593419f238/packages/@react-aria/utils/src/isVirtualEvent.ts\nfunction isVirtualClick(event) {\n  // FIXME: Firefox is now emitting a deprecation warning for `mozInputSource`.\n  // Try to find a workaround for this. `react-aria` source still has the check.\n  if (event.mozInputSource === 0 && event.isTrusted) {\n    return true;\n  }\n  if (isAndroid() && event.pointerType) {\n    return event.type === 'click' && event.buttons === 1;\n  }\n  return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n  if (isJSDOM()) return false;\n  return !isAndroid() && event.width === 0 && event.height === 0 || isAndroid() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse' ||\n  // iOS VoiceOver returns 0.333• for width/height.\n  event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'touch';\n}\nfunction isSafari() {\n  // Chrome DevTools does not complain about navigator.vendor\n  return /apple/i.test(navigator.vendor);\n}\nfunction isAndroid() {\n  const re = /android/i;\n  return re.test(getPlatform()) || re.test(getUserAgent());\n}\nfunction isMac() {\n  return getPlatform().toLowerCase().startsWith('mac') && !navigator.maxTouchPoints;\n}\nfunction isJSDOM() {\n  return getUserAgent().includes('jsdom/');\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n  // On some Linux machines with Chromium, mouse inputs return a `pointerType`\n  // of \"pen\": https://github.com/floating-ui/floating-ui/issues/2015\n  const values = ['mouse', 'pen'];\n  if (!strict) {\n    values.push('', undefined);\n  }\n  return values.includes(pointerType);\n}\nfunction isReactEvent(event) {\n  return 'nativeEvent' in event;\n}\nfunction isRootElement(element) {\n  return element.matches('html,body');\n}\nfunction getDocument(node) {\n  return (node == null ? void 0 : node.ownerDocument) || document;\n}\nfunction isEventTargetWithin(event, node) {\n  if (node == null) {\n    return false;\n  }\n  if ('composedPath' in event) {\n    return event.composedPath().includes(node);\n  }\n\n  // TS thinks `event` is of type never as it assumes all browsers support composedPath, but browsers without shadow dom don't\n  const e = event;\n  return e.target != null && node.contains(e.target);\n}\nfunction getTarget(event) {\n  if ('composedPath' in event) {\n    return event.composedPath()[0];\n  }\n\n  // TS thinks `event` is of type never as it assumes all browsers support\n  // `composedPath()`, but browsers without shadow DOM don't.\n  return event.target;\n}\nconst TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),\" + \"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nfunction isTypeableElement(element) {\n  return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nfunction stopEvent(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\nfunction isTypeableCombobox(element) {\n  if (!element) return false;\n  return element.getAttribute('role') === 'combobox' && isTypeableElement(element);\n}\n\nexport { TYPEABLE_SELECTOR, activeElement, contains, getDocument, getPlatform, getTarget, getUserAgent, isAndroid, isEventTargetWithin, isJSDOM, isMac, isMouseLikePointerType, isReactEvent, isRootElement, isSafari, isTypeableCombobox, isTypeableElement, isVirtualClick, isVirtualPointerEvent, stopEvent };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n  return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === '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 [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\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}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\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[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += 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 given reference element.\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    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\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  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(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    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\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    elements,\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\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    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(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    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\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$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, 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. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\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 = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? 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$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = 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$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[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\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$arrow, _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      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\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      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\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 sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\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          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\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\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$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).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$filter2[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        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, 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      } = evaluate(options, state);\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 = getPaddingObject(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 (getSideAxis(placement) === 'y') {\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\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\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 = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\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: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\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 (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\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      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\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 = clamp(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 = clamp(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          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\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      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\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 = originSides.has(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      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\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 maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = 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 (isYAxis) {\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, shift, size };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\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    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? 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 = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\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 = createCoords(1);\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 = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\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 currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (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 += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\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);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\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 + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\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\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\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 = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\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) : createCoords(1);\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      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\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, [], false).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 && absoluteOrFixed.has(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' ? isTopLayer(element) ? [] : 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  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\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 = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\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      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\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  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\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 win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\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 = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.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 && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\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 */\nconst detectOverflow = detectOverflow$1;\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 = offset$1;\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 = autoPlacement$1;\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 = shift$1;\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 = flip$1;\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 = size$1;\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 = hide$1;\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 = arrow$1;\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 = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\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 { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\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;\n  let i;\n  let 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/useFloating\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  }, []);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, []);\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 hasWhileElementsMounted = whileElementsMounted != null;\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const openRef = useLatestRef(open);\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        // The floating element's position may be recomputed while it's closed\n        // but still mounted (such as when transitioning out). To ensure\n        // `isPositioned` will be `false` initially on the next open, avoid\n        // setting it to `true` when `open === false` (must be specified).\n        isPositioned: openRef.current !== false\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, openRef]);\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      }\n      update();\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\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\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$1 = options => {\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const {\n        element,\n        padding\n      } = typeof options === 'function' ? options(state) : options;\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$2({\n            element: element.current,\n            padding\n          }).fn(state);\n        }\n        return {};\n      }\n      if (element) {\n        return arrow$2({\n          element,\n          padding\n        }).fn(state);\n      }\n      return {};\n    }\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 = (options, deps) => ({\n  ...offset$1(options),\n  options: [options, deps]\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 = (options, deps) => ({\n  ...shift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n  ...limitShift$1(options),\n  options: [options, deps]\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 = (options, deps) => ({\n  ...flip$1(options),\n  options: [options, deps]\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 = (options, deps) => ({\n  ...size$1(options),\n  options: [options, deps]\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 = (options, deps) => ({\n  ...autoPlacement$1(options),\n  options: [options, deps]\n});\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 = (options, deps) => ({\n  ...hide$1(options),\n  options: [options, deps]\n});\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 = (options, deps) => ({\n  ...inline$1(options),\n  options: [options, deps]\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 * 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, deps) => ({\n  ...arrow$1(options),\n  options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import * as React from 'react';\nimport { useLayoutEffect, useEffect, useRef } from 'react';\nimport { stopEvent, getDocument, isMouseLikePointerType, contains, activeElement, isSafari, isTypeableCombobox, isVirtualClick, isVirtualPointerEvent, getTarget, getPlatform, isTypeableElement, isReactEvent, isRootElement, isEventTargetWithin, isMac, getUserAgent } from '@floating-ui/react/utils';\nimport { floor, evaluate, max, min, round } from '@floating-ui/utils';\nimport { getComputedStyle, isElement, getNodeName, isHTMLElement, getWindow, isLastTraversableNode, getParentNode, isWebKit } from '@floating-ui/utils/dom';\nimport { tabbable, isTabbable } from 'tabbable';\nimport * as ReactDOM from 'react-dom';\nimport { getOverflowAncestors, useFloating as useFloating$1, offset, detectOverflow } from '@floating-ui/react-dom';\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/react-dom';\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n * @see https://floating-ui.com/docs/react-utils#usemergerefs\n */\nfunction useMergeRefs(refs) {\n  return React.useMemo(() => {\n    if (refs.every(ref => ref == null)) {\n      return null;\n    }\n    return value => {\n      refs.forEach(ref => {\n        if (typeof ref === 'function') {\n          ref(value);\n        } else if (ref != null) {\n          ref.current = value;\n        }\n      });\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n  ...React\n};\n\nconst useInsertionEffect = SafeReact.useInsertionEffect;\nconst useSafeInsertionEffect = useInsertionEffect || (fn => fn());\nfunction useEffectEvent(callback) {\n  const ref = React.useRef(() => {\n    if (process.env.NODE_ENV !== \"production\") {\n      throw new Error('Cannot call an event handler while rendering.');\n    }\n  });\n  useSafeInsertionEffect(() => {\n    ref.current = callback;\n  });\n  return React.useCallback(function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return ref.current == null ? void 0 : ref.current(...args);\n  }, []);\n}\n\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nfunction isDifferentRow(index, cols, prevRow) {\n  return Math.floor(index / cols) !== prevRow;\n}\nfunction isIndexOutOfBounds(listRef, index) {\n  return index < 0 || index >= listRef.current.length;\n}\nfunction getMinIndex(listRef, disabledIndices) {\n  return findNonDisabledIndex(listRef, {\n    disabledIndices\n  });\n}\nfunction getMaxIndex(listRef, disabledIndices) {\n  return findNonDisabledIndex(listRef, {\n    decrement: true,\n    startingIndex: listRef.current.length,\n    disabledIndices\n  });\n}\nfunction findNonDisabledIndex(listRef, _temp) {\n  let {\n    startingIndex = -1,\n    decrement = false,\n    disabledIndices,\n    amount = 1\n  } = _temp === void 0 ? {} : _temp;\n  const list = listRef.current;\n  let index = startingIndex;\n  do {\n    index += decrement ? -amount : amount;\n  } while (index >= 0 && index <= list.length - 1 && isDisabled(list, index, disabledIndices));\n  return index;\n}\nfunction getGridNavigatedIndex(elementsRef, _ref) {\n  let {\n    event,\n    orientation,\n    loop,\n    rtl,\n    cols,\n    disabledIndices,\n    minIndex,\n    maxIndex,\n    prevIndex,\n    stopEvent: stop = false\n  } = _ref;\n  let nextIndex = prevIndex;\n  if (event.key === ARROW_UP) {\n    stop && stopEvent(event);\n    if (prevIndex === -1) {\n      nextIndex = maxIndex;\n    } else {\n      nextIndex = findNonDisabledIndex(elementsRef, {\n        startingIndex: nextIndex,\n        amount: cols,\n        decrement: true,\n        disabledIndices\n      });\n      if (loop && (prevIndex - cols < minIndex || nextIndex < 0)) {\n        const col = prevIndex % cols;\n        const maxCol = maxIndex % cols;\n        const offset = maxIndex - (maxCol - col);\n        if (maxCol === col) {\n          nextIndex = maxIndex;\n        } else {\n          nextIndex = maxCol > col ? offset : offset - cols;\n        }\n      }\n    }\n    if (isIndexOutOfBounds(elementsRef, nextIndex)) {\n      nextIndex = prevIndex;\n    }\n  }\n  if (event.key === ARROW_DOWN) {\n    stop && stopEvent(event);\n    if (prevIndex === -1) {\n      nextIndex = minIndex;\n    } else {\n      nextIndex = findNonDisabledIndex(elementsRef, {\n        startingIndex: prevIndex,\n        amount: cols,\n        disabledIndices\n      });\n      if (loop && prevIndex + cols > maxIndex) {\n        nextIndex = findNonDisabledIndex(elementsRef, {\n          startingIndex: prevIndex % cols - cols,\n          amount: cols,\n          disabledIndices\n        });\n      }\n    }\n    if (isIndexOutOfBounds(elementsRef, nextIndex)) {\n      nextIndex = prevIndex;\n    }\n  }\n\n  // Remains on the same row/column.\n  if (orientation === 'both') {\n    const prevRow = floor(prevIndex / cols);\n    if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) {\n      stop && stopEvent(event);\n      if (prevIndex % cols !== cols - 1) {\n        nextIndex = findNonDisabledIndex(elementsRef, {\n          startingIndex: prevIndex,\n          disabledIndices\n        });\n        if (loop && isDifferentRow(nextIndex, cols, prevRow)) {\n          nextIndex = findNonDisabledIndex(elementsRef, {\n            startingIndex: prevIndex - prevIndex % cols - 1,\n            disabledIndices\n          });\n        }\n      } else if (loop) {\n        nextIndex = findNonDisabledIndex(elementsRef, {\n          startingIndex: prevIndex - prevIndex % cols - 1,\n          disabledIndices\n        });\n      }\n      if (isDifferentRow(nextIndex, cols, prevRow)) {\n        nextIndex = prevIndex;\n      }\n    }\n    if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) {\n      stop && stopEvent(event);\n      if (prevIndex % cols !== 0) {\n        nextIndex = findNonDisabledIndex(elementsRef, {\n          startingIndex: prevIndex,\n          decrement: true,\n          disabledIndices\n        });\n        if (loop && isDifferentRow(nextIndex, cols, prevRow)) {\n          nextIndex = findNonDisabledIndex(elementsRef, {\n            startingIndex: prevIndex + (cols - prevIndex % cols),\n            decrement: true,\n            disabledIndices\n          });\n        }\n      } else if (loop) {\n        nextIndex = findNonDisabledIndex(elementsRef, {\n          startingIndex: prevIndex + (cols - prevIndex % cols),\n          decrement: true,\n          disabledIndices\n        });\n      }\n      if (isDifferentRow(nextIndex, cols, prevRow)) {\n        nextIndex = prevIndex;\n      }\n    }\n    const lastRow = floor(maxIndex / cols) === prevRow;\n    if (isIndexOutOfBounds(elementsRef, nextIndex)) {\n      if (loop && lastRow) {\n        nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledIndex(elementsRef, {\n          startingIndex: prevIndex - prevIndex % cols - 1,\n          disabledIndices\n        });\n      } else {\n        nextIndex = prevIndex;\n      }\n    }\n  }\n  return nextIndex;\n}\n\n/** For each cell index, gets the item index that occupies that cell */\nfunction buildCellMap(sizes, cols, dense) {\n  const cellMap = [];\n  let startIndex = 0;\n  sizes.forEach((_ref2, index) => {\n    let {\n      width,\n      height\n    } = _ref2;\n    if (width > cols) {\n      if (process.env.NODE_ENV !== \"production\") {\n        throw new Error(\"[Floating UI]: Invalid grid - item width at index \" + index + \" is greater than grid columns\");\n      }\n    }\n    let itemPlaced = false;\n    if (dense) {\n      startIndex = 0;\n    }\n    while (!itemPlaced) {\n      const targetCells = [];\n      for (let i = 0; i < width; i++) {\n        for (let j = 0; j < height; j++) {\n          targetCells.push(startIndex + i + j * cols);\n        }\n      }\n      if (startIndex % cols + width <= cols && targetCells.every(cell => cellMap[cell] == null)) {\n        targetCells.forEach(cell => {\n          cellMap[cell] = index;\n        });\n        itemPlaced = true;\n      } else {\n        startIndex++;\n      }\n    }\n  });\n\n  // convert into a non-sparse array\n  return [...cellMap];\n}\n\n/** Gets cell index of an item's corner or -1 when index is -1. */\nfunction getCellIndexOfCorner(index, sizes, cellMap, cols, corner) {\n  if (index === -1) return -1;\n  const firstCellIndex = cellMap.indexOf(index);\n  const sizeItem = sizes[index];\n  switch (corner) {\n    case 'tl':\n      return firstCellIndex;\n    case 'tr':\n      if (!sizeItem) {\n        return firstCellIndex;\n      }\n      return firstCellIndex + sizeItem.width - 1;\n    case 'bl':\n      if (!sizeItem) {\n        return firstCellIndex;\n      }\n      return firstCellIndex + (sizeItem.height - 1) * cols;\n    case 'br':\n      return cellMap.lastIndexOf(index);\n  }\n}\n\n/** Gets all cell indices that correspond to the specified indices */\nfunction getCellIndices(indices, cellMap) {\n  return cellMap.flatMap((index, cellIndex) => indices.includes(index) ? [cellIndex] : []);\n}\nfunction isDisabled(list, index, disabledIndices) {\n  if (disabledIndices) {\n    return disabledIndices.includes(index);\n  }\n  const element = list[index];\n  return element == null || element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n}\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\nfunction sortByDocumentPosition(a, b) {\n  const position = a.compareDocumentPosition(b);\n  if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n    return -1;\n  }\n  if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) {\n    return 1;\n  }\n  return 0;\n}\nfunction areMapsEqual(map1, map2) {\n  if (map1.size !== map2.size) {\n    return false;\n  }\n  for (const [key, value] of map1.entries()) {\n    if (value !== map2.get(key)) {\n      return false;\n    }\n  }\n  return true;\n}\nconst FloatingListContext = /*#__PURE__*/React.createContext({\n  register: () => {},\n  unregister: () => {},\n  map: /*#__PURE__*/new Map(),\n  elementsRef: {\n    current: []\n  }\n});\n/**\n * Provides context for a list of items within the floating element.\n * @see https://floating-ui.com/docs/FloatingList\n */\nfunction FloatingList(props) {\n  const {\n    children,\n    elementsRef,\n    labelsRef\n  } = props;\n  const [map, setMap] = React.useState(() => new Map());\n  const register = React.useCallback(node => {\n    setMap(prevMap => new Map(prevMap).set(node, null));\n  }, []);\n  const unregister = React.useCallback(node => {\n    setMap(prevMap => {\n      const map = new Map(prevMap);\n      map.delete(node);\n      return map;\n    });\n  }, []);\n  index(() => {\n    const newMap = new Map(map);\n    const nodes = Array.from(newMap.keys()).sort(sortByDocumentPosition);\n    nodes.forEach((node, index) => {\n      newMap.set(node, index);\n    });\n    if (!areMapsEqual(map, newMap)) {\n      setMap(newMap);\n    }\n  }, [map]);\n  return /*#__PURE__*/React.createElement(FloatingListContext.Provider, {\n    value: React.useMemo(() => ({\n      register,\n      unregister,\n      map,\n      elementsRef,\n      labelsRef\n    }), [register, unregister, map, elementsRef, labelsRef])\n  }, children);\n}\n/**\n * Used to register a list item and its index (DOM position) in the\n * `FloatingList`.\n * @see https://floating-ui.com/docs/FloatingList#uselistitem\n */\nfunction useListItem(props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    label\n  } = props;\n  const {\n    register,\n    unregister,\n    map,\n    elementsRef,\n    labelsRef\n  } = React.useContext(FloatingListContext);\n  const [index$1, setIndex] = React.useState(null);\n  const componentRef = React.useRef(null);\n  const ref = React.useCallback(node => {\n    componentRef.current = node;\n    if (index$1 !== null) {\n      elementsRef.current[index$1] = node;\n      if (labelsRef) {\n        var _node$textContent;\n        const isLabelDefined = label !== undefined;\n        labelsRef.current[index$1] = isLabelDefined ? label : (_node$textContent = node == null ? void 0 : node.textContent) != null ? _node$textContent : null;\n      }\n    }\n  }, [index$1, elementsRef, labelsRef, label]);\n  index(() => {\n    const node = componentRef.current;\n    if (node) {\n      register(node);\n      return () => {\n        unregister(node);\n      };\n    }\n  }, [register, unregister]);\n  index(() => {\n    const index = componentRef.current ? map.get(componentRef.current) : null;\n    if (index != null) {\n      setIndex(index);\n    }\n  }, [map]);\n  return React.useMemo(() => ({\n    ref,\n    index: index$1 == null ? -1 : index$1\n  }), [index$1, ref]);\n}\n\nfunction renderJsx(render, computedProps) {\n  if (typeof render === 'function') {\n    return render(computedProps);\n  }\n  if (render) {\n    return /*#__PURE__*/React.cloneElement(render, computedProps);\n  }\n  return /*#__PURE__*/React.createElement(\"div\", computedProps);\n}\nconst CompositeContext = /*#__PURE__*/React.createContext({\n  activeIndex: 0,\n  onNavigate: () => {}\n});\nconst horizontalKeys = [ARROW_LEFT, ARROW_RIGHT];\nconst verticalKeys = [ARROW_UP, ARROW_DOWN];\nconst allKeys = [...horizontalKeys, ...verticalKeys];\n\n/**\n * Creates a single tab stop whose items are navigated by arrow keys, which\n * provides list navigation outside of floating element contexts.\n *\n * This is useful to enable navigation of a list of items that aren’t part of a\n * floating element. A menubar is an example of a composite, with each reference\n * element being an item.\n * @see https://floating-ui.com/docs/Composite\n */\nconst Composite = /*#__PURE__*/React.forwardRef(function Composite(props, forwardedRef) {\n  const {\n    render,\n    orientation = 'both',\n    loop = true,\n    rtl = false,\n    cols = 1,\n    disabledIndices,\n    activeIndex: externalActiveIndex,\n    onNavigate: externalSetActiveIndex,\n    itemSizes,\n    dense = false,\n    ...domProps\n  } = props;\n  const [internalActiveIndex, internalSetActiveIndex] = React.useState(0);\n  const activeIndex = externalActiveIndex != null ? externalActiveIndex : internalActiveIndex;\n  const onNavigate = useEffectEvent(externalSetActiveIndex != null ? externalSetActiveIndex : internalSetActiveIndex);\n  const elementsRef = React.useRef([]);\n  const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n  const contextValue = React.useMemo(() => ({\n    activeIndex,\n    onNavigate\n  }), [activeIndex, onNavigate]);\n  const isGrid = cols > 1;\n  function handleKeyDown(event) {\n    if (!allKeys.includes(event.key)) return;\n    let nextIndex = activeIndex;\n    const minIndex = getMinIndex(elementsRef, disabledIndices);\n    const maxIndex = getMaxIndex(elementsRef, disabledIndices);\n    const horizontalEndKey = rtl ? ARROW_LEFT : ARROW_RIGHT;\n    const horizontalStartKey = rtl ? ARROW_RIGHT : ARROW_LEFT;\n    if (isGrid) {\n      const sizes = itemSizes || Array.from({\n        length: elementsRef.current.length\n      }, () => ({\n        width: 1,\n        height: 1\n      }));\n      // To calculate movements on the grid, we use hypothetical cell indices\n      // as if every item was 1x1, then convert back to real indices.\n      const cellMap = buildCellMap(sizes, cols, dense);\n      const minGridIndex = cellMap.findIndex(index => index != null && !isDisabled(elementsRef.current, index, disabledIndices));\n      // last enabled index\n      const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isDisabled(elementsRef.current, index, disabledIndices) ? cellIndex : foundIndex, -1);\n      const maybeNextIndex = cellMap[getGridNavigatedIndex({\n        current: cellMap.map(itemIndex => itemIndex ? elementsRef.current[itemIndex] : null)\n      }, {\n        event,\n        orientation,\n        loop,\n        rtl,\n        cols,\n        // treat undefined (empty grid spaces) as disabled indices so we\n        // don't end up in them\n        disabledIndices: getCellIndices([...(disabledIndices || elementsRef.current.map((_, index) => isDisabled(elementsRef.current, index) ? index : undefined)), undefined], cellMap),\n        minIndex: minGridIndex,\n        maxIndex: maxGridIndex,\n        prevIndex: getCellIndexOfCorner(activeIndex > maxIndex ? minIndex : activeIndex, sizes, cellMap, cols,\n        // use a corner matching the edge closest to the direction we're\n        // moving in so we don't end up in the same item. Prefer\n        // top/left over bottom/right.\n        event.key === ARROW_DOWN ? 'bl' : event.key === horizontalEndKey ? 'tr' : 'tl')\n      })];\n      if (maybeNextIndex != null) {\n        nextIndex = maybeNextIndex;\n      }\n    }\n    const toEndKeys = {\n      horizontal: [horizontalEndKey],\n      vertical: [ARROW_DOWN],\n      both: [horizontalEndKey, ARROW_DOWN]\n    }[orientation];\n    const toStartKeys = {\n      horizontal: [horizontalStartKey],\n      vertical: [ARROW_UP],\n      both: [horizontalStartKey, ARROW_UP]\n    }[orientation];\n    const preventedKeys = isGrid ? allKeys : {\n      horizontal: horizontalKeys,\n      vertical: verticalKeys,\n      both: allKeys\n    }[orientation];\n    if (nextIndex === activeIndex && [...toEndKeys, ...toStartKeys].includes(event.key)) {\n      if (loop && nextIndex === maxIndex && toEndKeys.includes(event.key)) {\n        nextIndex = minIndex;\n      } else if (loop && nextIndex === minIndex && toStartKeys.includes(event.key)) {\n        nextIndex = maxIndex;\n      } else {\n        nextIndex = findNonDisabledIndex(elementsRef, {\n          startingIndex: nextIndex,\n          decrement: toStartKeys.includes(event.key),\n          disabledIndices\n        });\n      }\n    }\n    if (nextIndex !== activeIndex && !isIndexOutOfBounds(elementsRef, nextIndex)) {\n      var _elementsRef$current$;\n      event.stopPropagation();\n      if (preventedKeys.includes(event.key)) {\n        event.preventDefault();\n      }\n      onNavigate(nextIndex);\n      (_elementsRef$current$ = elementsRef.current[nextIndex]) == null || _elementsRef$current$.focus();\n    }\n  }\n  const computedProps = {\n    ...domProps,\n    ...renderElementProps,\n    ref: forwardedRef,\n    'aria-orientation': orientation === 'both' ? undefined : orientation,\n    onKeyDown(e) {\n      domProps.onKeyDown == null || domProps.onKeyDown(e);\n      renderElementProps.onKeyDown == null || renderElementProps.onKeyDown(e);\n      handleKeyDown(e);\n    }\n  };\n  return /*#__PURE__*/React.createElement(CompositeContext.Provider, {\n    value: contextValue\n  }, /*#__PURE__*/React.createElement(FloatingList, {\n    elementsRef: elementsRef\n  }, renderJsx(render, computedProps)));\n});\n/**\n * @see https://floating-ui.com/docs/Composite\n */\nconst CompositeItem = /*#__PURE__*/React.forwardRef(function CompositeItem(props, forwardedRef) {\n  const {\n    render,\n    ...domProps\n  } = props;\n  const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n  const {\n    activeIndex,\n    onNavigate\n  } = React.useContext(CompositeContext);\n  const {\n    ref,\n    index\n  } = useListItem();\n  const mergedRef = useMergeRefs([ref, forwardedRef, renderElementProps.ref]);\n  const isActive = activeIndex === index;\n  const computedProps = {\n    ...domProps,\n    ...renderElementProps,\n    ref: mergedRef,\n    tabIndex: isActive ? 0 : -1,\n    'data-active': isActive ? '' : undefined,\n    onFocus(e) {\n      domProps.onFocus == null || domProps.onFocus(e);\n      renderElementProps.onFocus == null || renderElementProps.onFocus(e);\n      onNavigate(index);\n    }\n  };\n  return renderJsx(render, computedProps);\n});\n\nfunction _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}\n\nlet serverHandoffComplete = false;\nlet count = 0;\nconst genId = () => // Ensure the id is unique with multiple independent versions of Floating UI\n// on <React 18\n\"floating-ui-\" + Math.random().toString(36).slice(2, 6) + count++;\nfunction useFloatingId() {\n  const [id, setId] = React.useState(() => serverHandoffComplete ? genId() : undefined);\n  index(() => {\n    if (id == null) {\n      setId(genId());\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  React.useEffect(() => {\n    serverHandoffComplete = true;\n  }, []);\n  return id;\n}\nconst useReactId = SafeReact.useId;\n\n/**\n * Uses React 18's built-in `useId()` when available, or falls back to a\n * slightly less performant (requiring a double render) implementation for\n * earlier React versions.\n * @see https://floating-ui.com/docs/react-utils#useid\n */\nconst useId = useReactId || useFloatingId;\n\nlet devMessageSet;\nif (process.env.NODE_ENV !== \"production\") {\n  devMessageSet = /*#__PURE__*/new Set();\n}\nfunction warn() {\n  var _devMessageSet;\n  for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {\n    messages[_key] = arguments[_key];\n  }\n  const message = \"Floating UI: \" + messages.join(' ');\n  if (!((_devMessageSet = devMessageSet) != null && _devMessageSet.has(message))) {\n    var _devMessageSet2;\n    (_devMessageSet2 = devMessageSet) == null || _devMessageSet2.add(message);\n    console.warn(message);\n  }\n}\nfunction error() {\n  var _devMessageSet3;\n  for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    messages[_key2] = arguments[_key2];\n  }\n  const message = \"Floating UI: \" + messages.join(' ');\n  if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {\n    var _devMessageSet4;\n    (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);\n    console.error(message);\n  }\n}\n\n/**\n * Renders a pointing arrow triangle.\n * @see https://floating-ui.com/docs/FloatingArrow\n */\nconst FloatingArrow = /*#__PURE__*/React.forwardRef(function FloatingArrow(props, ref) {\n  const {\n    context: {\n      placement,\n      elements: {\n        floating\n      },\n      middlewareData: {\n        arrow,\n        shift\n      }\n    },\n    width = 14,\n    height = 7,\n    tipRadius = 0,\n    strokeWidth = 0,\n    staticOffset,\n    stroke,\n    d,\n    style: {\n      transform,\n      ...restStyle\n    } = {},\n    ...rest\n  } = props;\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!ref) {\n      warn('The `ref` prop is required for `FloatingArrow`.');\n    }\n  }\n  const clipPathId = useId();\n  const [isRTL, setIsRTL] = React.useState(false);\n\n  // https://github.com/floating-ui/floating-ui/issues/2932\n  index(() => {\n    if (!floating) return;\n    const isRTL = getComputedStyle(floating).direction === 'rtl';\n    if (isRTL) {\n      setIsRTL(true);\n    }\n  }, [floating]);\n  if (!floating) {\n    return null;\n  }\n  const [side, alignment] = placement.split('-');\n  const isVerticalSide = side === 'top' || side === 'bottom';\n  let computedStaticOffset = staticOffset;\n  if (isVerticalSide && shift != null && shift.x || !isVerticalSide && shift != null && shift.y) {\n    computedStaticOffset = null;\n  }\n\n  // Strokes must be double the border width, this ensures the stroke's width\n  // works as you'd expect.\n  const computedStrokeWidth = strokeWidth * 2;\n  const halfStrokeWidth = computedStrokeWidth / 2;\n  const svgX = width / 2 * (tipRadius / -8 + 1);\n  const svgY = height / 2 * tipRadius / 4;\n  const isCustomShape = !!d;\n  const yOffsetProp = computedStaticOffset && alignment === 'end' ? 'bottom' : 'top';\n  let xOffsetProp = computedStaticOffset && alignment === 'end' ? 'right' : 'left';\n  if (computedStaticOffset && isRTL) {\n    xOffsetProp = alignment === 'end' ? 'left' : 'right';\n  }\n  const arrowX = (arrow == null ? void 0 : arrow.x) != null ? computedStaticOffset || arrow.x : '';\n  const arrowY = (arrow == null ? void 0 : arrow.y) != null ? computedStaticOffset || arrow.y : '';\n  const dValue = d || 'M0,0' + (\" H\" + width) + (\" L\" + (width - svgX) + \",\" + (height - svgY)) + (\" Q\" + width / 2 + \",\" + height + \" \" + svgX + \",\" + (height - svgY)) + ' Z';\n  const rotation = {\n    top: isCustomShape ? 'rotate(180deg)' : '',\n    left: isCustomShape ? 'rotate(90deg)' : 'rotate(-90deg)',\n    bottom: isCustomShape ? '' : 'rotate(180deg)',\n    right: isCustomShape ? 'rotate(-90deg)' : 'rotate(90deg)'\n  }[side];\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({}, rest, {\n    \"aria-hidden\": true,\n    ref: ref,\n    width: isCustomShape ? width : width + computedStrokeWidth,\n    height: width,\n    viewBox: \"0 0 \" + width + \" \" + (height > width ? height : width),\n    style: {\n      position: 'absolute',\n      pointerEvents: 'none',\n      [xOffsetProp]: arrowX,\n      [yOffsetProp]: arrowY,\n      [side]: isVerticalSide || isCustomShape ? '100%' : \"calc(100% - \" + computedStrokeWidth / 2 + \"px)\",\n      transform: [rotation, transform].filter(t => !!t).join(' '),\n      ...restStyle\n    }\n  }), computedStrokeWidth > 0 && /*#__PURE__*/React.createElement(\"path\", {\n    clipPath: \"url(#\" + clipPathId + \")\",\n    fill: \"none\",\n    stroke: stroke\n    // Account for the stroke on the fill path rendered below.\n    ,\n    strokeWidth: computedStrokeWidth + (d ? 0 : 1),\n    d: dValue\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    stroke: computedStrokeWidth && !d ? rest.fill : 'none',\n    d: dValue\n  }), /*#__PURE__*/React.createElement(\"clipPath\", {\n    id: clipPathId\n  }, /*#__PURE__*/React.createElement(\"rect\", {\n    x: -halfStrokeWidth,\n    y: halfStrokeWidth * (isCustomShape ? -1 : 1),\n    width: width + computedStrokeWidth,\n    height: width\n  })));\n});\n\nfunction createPubSub() {\n  const map = new Map();\n  return {\n    emit(event, data) {\n      var _map$get;\n      (_map$get = map.get(event)) == null || _map$get.forEach(handler => handler(data));\n    },\n    on(event, listener) {\n      map.set(event, [...(map.get(event) || []), listener]);\n    },\n    off(event, listener) {\n      var _map$get2;\n      map.set(event, ((_map$get2 = map.get(event)) == null ? void 0 : _map$get2.filter(l => l !== listener)) || []);\n    }\n  };\n}\n\nconst FloatingNodeContext = /*#__PURE__*/React.createContext(null);\nconst FloatingTreeContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */\nconst useFloatingParentNodeId = () => {\n  var _React$useContext;\n  return ((_React$useContext = React.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;\n};\n\n/**\n * Returns the nearest floating tree context, if available.\n */\nconst useFloatingTree = () => React.useContext(FloatingTreeContext);\n\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction useFloatingNodeId(customParentId) {\n  const id = useId();\n  const tree = useFloatingTree();\n  const reactParentId = useFloatingParentNodeId();\n  const parentId = customParentId || reactParentId;\n  index(() => {\n    const node = {\n      id,\n      parentId\n    };\n    tree == null || tree.addNode(node);\n    return () => {\n      tree == null || tree.removeNode(node);\n    };\n  }, [tree, id, parentId]);\n  return id;\n}\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingNode(props) {\n  const {\n    children,\n    id\n  } = props;\n  const parentId = useFloatingParentNodeId();\n  return /*#__PURE__*/React.createElement(FloatingNodeContext.Provider, {\n    value: React.useMemo(() => ({\n      id,\n      parentId\n    }), [id, parentId])\n  }, children);\n}\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingTree(props) {\n  const {\n    children\n  } = props;\n  const nodesRef = React.useRef([]);\n  const addNode = React.useCallback(node => {\n    nodesRef.current = [...nodesRef.current, node];\n  }, []);\n  const removeNode = React.useCallback(node => {\n    nodesRef.current = nodesRef.current.filter(n => n !== node);\n  }, []);\n  const events = React.useState(() => createPubSub())[0];\n  return /*#__PURE__*/React.createElement(FloatingTreeContext.Provider, {\n    value: React.useMemo(() => ({\n      nodesRef,\n      addNode,\n      removeNode,\n      events\n    }), [addNode, removeNode, events])\n  }, children);\n}\n\nfunction createAttribute(name) {\n  return \"data-floating-ui-\" + name;\n}\n\nfunction useLatestRef(value) {\n  const ref = useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\nconst safePolygonIdentifier = /*#__PURE__*/createAttribute('safe-polygon');\nfunction getDelay(value, prop, pointerType) {\n  if (pointerType && !isMouseLikePointerType(pointerType)) {\n    return 0;\n  }\n  if (typeof value === 'number') {\n    return value;\n  }\n  return value == null ? void 0 : value[prop];\n}\n/**\n * Opens the floating element while hovering over the reference element, like\n * CSS `:hover`.\n * @see https://floating-ui.com/docs/useHover\n */\nfunction useHover(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    dataRef,\n    events,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    delay = 0,\n    handleClose = null,\n    mouseOnly = false,\n    restMs = 0,\n    move = true\n  } = props;\n  const tree = useFloatingTree();\n  const parentId = useFloatingParentNodeId();\n  const handleCloseRef = useLatestRef(handleClose);\n  const delayRef = useLatestRef(delay);\n  const openRef = useLatestRef(open);\n  const pointerTypeRef = React.useRef();\n  const timeoutRef = React.useRef(-1);\n  const handlerRef = React.useRef();\n  const restTimeoutRef = React.useRef(-1);\n  const blockMouseMoveRef = React.useRef(true);\n  const performedPointerEventsMutationRef = React.useRef(false);\n  const unbindMouseMoveRef = React.useRef(() => {});\n  const restTimeoutPendingRef = React.useRef(false);\n  const isHoverOpen = React.useCallback(() => {\n    var _dataRef$current$open;\n    const type = (_dataRef$current$open = dataRef.current.openEvent) == null ? void 0 : _dataRef$current$open.type;\n    return (type == null ? void 0 : type.includes('mouse')) && type !== 'mousedown';\n  }, [dataRef]);\n\n  // When closing before opening, clear the delay timeouts to cancel it\n  // from showing.\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onOpenChange(_ref) {\n      let {\n        open\n      } = _ref;\n      if (!open) {\n        clearTimeout(timeoutRef.current);\n        clearTimeout(restTimeoutRef.current);\n        blockMouseMoveRef.current = true;\n        restTimeoutPendingRef.current = false;\n      }\n    }\n    events.on('openchange', onOpenChange);\n    return () => {\n      events.off('openchange', onOpenChange);\n    };\n  }, [enabled, events]);\n  React.useEffect(() => {\n    if (!enabled) return;\n    if (!handleCloseRef.current) return;\n    if (!open) return;\n    function onLeave(event) {\n      if (isHoverOpen()) {\n        onOpenChange(false, event, 'hover');\n      }\n    }\n    const html = getDocument(elements.floating).documentElement;\n    html.addEventListener('mouseleave', onLeave);\n    return () => {\n      html.removeEventListener('mouseleave', onLeave);\n    };\n  }, [elements.floating, open, onOpenChange, enabled, handleCloseRef, isHoverOpen]);\n  const closeWithDelay = React.useCallback(function (event, runElseBranch, reason) {\n    if (runElseBranch === void 0) {\n      runElseBranch = true;\n    }\n    if (reason === void 0) {\n      reason = 'hover';\n    }\n    const closeDelay = getDelay(delayRef.current, 'close', pointerTypeRef.current);\n    if (closeDelay && !handlerRef.current) {\n      clearTimeout(timeoutRef.current);\n      timeoutRef.current = window.setTimeout(() => onOpenChange(false, event, reason), closeDelay);\n    } else if (runElseBranch) {\n      clearTimeout(timeoutRef.current);\n      onOpenChange(false, event, reason);\n    }\n  }, [delayRef, onOpenChange]);\n  const cleanupMouseMoveHandler = useEffectEvent(() => {\n    unbindMouseMoveRef.current();\n    handlerRef.current = undefined;\n  });\n  const clearPointerEvents = useEffectEvent(() => {\n    if (performedPointerEventsMutationRef.current) {\n      const body = getDocument(elements.floating).body;\n      body.style.pointerEvents = '';\n      body.removeAttribute(safePolygonIdentifier);\n      performedPointerEventsMutationRef.current = false;\n    }\n  });\n  const isClickLikeOpenEvent = useEffectEvent(() => {\n    return dataRef.current.openEvent ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type) : false;\n  });\n\n  // Registering the mouse events on the reference directly to bypass React's\n  // delegation system. If the cursor was on a disabled element and then entered\n  // the reference (no gap), `mouseenter` doesn't fire in the delegation system.\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onMouseEnter(event) {\n      clearTimeout(timeoutRef.current);\n      blockMouseMoveRef.current = false;\n      if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current) || restMs > 0 && !getDelay(delayRef.current, 'open')) {\n        return;\n      }\n      const openDelay = getDelay(delayRef.current, 'open', pointerTypeRef.current);\n      if (openDelay) {\n        timeoutRef.current = window.setTimeout(() => {\n          if (!openRef.current) {\n            onOpenChange(true, event, 'hover');\n          }\n        }, openDelay);\n      } else if (!open) {\n        onOpenChange(true, event, 'hover');\n      }\n    }\n    function onMouseLeave(event) {\n      if (isClickLikeOpenEvent()) return;\n      unbindMouseMoveRef.current();\n      const doc = getDocument(elements.floating);\n      clearTimeout(restTimeoutRef.current);\n      restTimeoutPendingRef.current = false;\n      if (handleCloseRef.current && dataRef.current.floatingContext) {\n        // Prevent clearing `onScrollMouseLeave` timeout.\n        if (!open) {\n          clearTimeout(timeoutRef.current);\n        }\n        handlerRef.current = handleCloseRef.current({\n          ...dataRef.current.floatingContext,\n          tree,\n          x: event.clientX,\n          y: event.clientY,\n          onClose() {\n            clearPointerEvents();\n            cleanupMouseMoveHandler();\n            if (!isClickLikeOpenEvent()) {\n              closeWithDelay(event, true, 'safe-polygon');\n            }\n          }\n        });\n        const handler = handlerRef.current;\n        doc.addEventListener('mousemove', handler);\n        unbindMouseMoveRef.current = () => {\n          doc.removeEventListener('mousemove', handler);\n        };\n        return;\n      }\n\n      // Allow interactivity without `safePolygon` on touch devices. With a\n      // pointer, a short close delay is an alternative, so it should work\n      // consistently.\n      const shouldClose = pointerTypeRef.current === 'touch' ? !contains(elements.floating, event.relatedTarget) : true;\n      if (shouldClose) {\n        closeWithDelay(event);\n      }\n    }\n\n    // Ensure the floating element closes after scrolling even if the pointer\n    // did not move.\n    // https://github.com/floating-ui/floating-ui/discussions/1692\n    function onScrollMouseLeave(event) {\n      if (isClickLikeOpenEvent()) return;\n      if (!dataRef.current.floatingContext) return;\n      handleCloseRef.current == null || handleCloseRef.current({\n        ...dataRef.current.floatingContext,\n        tree,\n        x: event.clientX,\n        y: event.clientY,\n        onClose() {\n          clearPointerEvents();\n          cleanupMouseMoveHandler();\n          if (!isClickLikeOpenEvent()) {\n            closeWithDelay(event);\n          }\n        }\n      })(event);\n    }\n    if (isElement(elements.domReference)) {\n      var _elements$floating;\n      const ref = elements.domReference;\n      open && ref.addEventListener('mouseleave', onScrollMouseLeave);\n      (_elements$floating = elements.floating) == null || _elements$floating.addEventListener('mouseleave', onScrollMouseLeave);\n      move && ref.addEventListener('mousemove', onMouseEnter, {\n        once: true\n      });\n      ref.addEventListener('mouseenter', onMouseEnter);\n      ref.addEventListener('mouseleave', onMouseLeave);\n      return () => {\n        var _elements$floating2;\n        open && ref.removeEventListener('mouseleave', onScrollMouseLeave);\n        (_elements$floating2 = elements.floating) == null || _elements$floating2.removeEventListener('mouseleave', onScrollMouseLeave);\n        move && ref.removeEventListener('mousemove', onMouseEnter);\n        ref.removeEventListener('mouseenter', onMouseEnter);\n        ref.removeEventListener('mouseleave', onMouseLeave);\n      };\n    }\n  }, [elements, enabled, context, mouseOnly, restMs, move, closeWithDelay, cleanupMouseMoveHandler, clearPointerEvents, onOpenChange, open, openRef, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent]);\n\n  // Block pointer-events of every element other than the reference and floating\n  // while the floating element is open and has a `handleClose` handler. Also\n  // handles nested floating elements.\n  // https://github.com/floating-ui/floating-ui/issues/1722\n  index(() => {\n    var _handleCloseRef$curre;\n    if (!enabled) return;\n    if (open && (_handleCloseRef$curre = handleCloseRef.current) != null && _handleCloseRef$curre.__options.blockPointerEvents && isHoverOpen()) {\n      performedPointerEventsMutationRef.current = true;\n      const floatingEl = elements.floating;\n      if (isElement(elements.domReference) && floatingEl) {\n        var _tree$nodesRef$curren;\n        const body = getDocument(elements.floating).body;\n        body.setAttribute(safePolygonIdentifier, '');\n        const ref = elements.domReference;\n        const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating;\n        if (parentFloating) {\n          parentFloating.style.pointerEvents = '';\n        }\n        body.style.pointerEvents = 'none';\n        ref.style.pointerEvents = 'auto';\n        floatingEl.style.pointerEvents = 'auto';\n        return () => {\n          body.style.pointerEvents = '';\n          ref.style.pointerEvents = '';\n          floatingEl.style.pointerEvents = '';\n        };\n      }\n    }\n  }, [enabled, open, parentId, elements, tree, handleCloseRef, isHoverOpen]);\n  index(() => {\n    if (!open) {\n      pointerTypeRef.current = undefined;\n      restTimeoutPendingRef.current = false;\n      cleanupMouseMoveHandler();\n      clearPointerEvents();\n    }\n  }, [open, cleanupMouseMoveHandler, clearPointerEvents]);\n  React.useEffect(() => {\n    return () => {\n      cleanupMouseMoveHandler();\n      clearTimeout(timeoutRef.current);\n      clearTimeout(restTimeoutRef.current);\n      clearPointerEvents();\n    };\n  }, [enabled, elements.domReference, cleanupMouseMoveHandler, clearPointerEvents]);\n  const reference = React.useMemo(() => {\n    function setPointerRef(event) {\n      pointerTypeRef.current = event.pointerType;\n    }\n    return {\n      onPointerDown: setPointerRef,\n      onPointerEnter: setPointerRef,\n      onMouseMove(event) {\n        const {\n          nativeEvent\n        } = event;\n        function handleMouseMove() {\n          if (!blockMouseMoveRef.current && !openRef.current) {\n            onOpenChange(true, nativeEvent, 'hover');\n          }\n        }\n        if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current)) {\n          return;\n        }\n        if (open || restMs === 0) {\n          return;\n        }\n\n        // Ignore insignificant movements to account for tremors.\n        if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) {\n          return;\n        }\n        clearTimeout(restTimeoutRef.current);\n        if (pointerTypeRef.current === 'touch') {\n          handleMouseMove();\n        } else {\n          restTimeoutPendingRef.current = true;\n          restTimeoutRef.current = window.setTimeout(handleMouseMove, restMs);\n        }\n      }\n    };\n  }, [mouseOnly, onOpenChange, open, openRef, restMs]);\n  const floating = React.useMemo(() => ({\n    onMouseEnter() {\n      clearTimeout(timeoutRef.current);\n    },\n    onMouseLeave(event) {\n      if (!isClickLikeOpenEvent()) {\n        closeWithDelay(event.nativeEvent, false);\n      }\n    }\n  }), [closeWithDelay, isClickLikeOpenEvent]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating\n  } : {}, [enabled, reference, floating]);\n}\n\nconst NOOP = () => {};\nconst FloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n  delay: 0,\n  initialDelay: 0,\n  timeoutMs: 0,\n  currentId: null,\n  setCurrentId: NOOP,\n  setState: NOOP,\n  isInstantPhase: false\n});\n\n/**\n * @deprecated\n * Use the return value of `useDelayGroup()` instead.\n */\nconst useDelayGroupContext = () => React.useContext(FloatingDelayGroupContext);\n/**\n * Provides context for a group of floating elements that should share a\n * `delay`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction FloatingDelayGroup(props) {\n  const {\n    children,\n    delay,\n    timeoutMs = 0\n  } = props;\n  const [state, setState] = React.useReducer((prev, next) => ({\n    ...prev,\n    ...next\n  }), {\n    delay,\n    timeoutMs,\n    initialDelay: delay,\n    currentId: null,\n    isInstantPhase: false\n  });\n  const initialCurrentIdRef = React.useRef(null);\n  const setCurrentId = React.useCallback(currentId => {\n    setState({\n      currentId\n    });\n  }, []);\n  index(() => {\n    if (state.currentId) {\n      if (initialCurrentIdRef.current === null) {\n        initialCurrentIdRef.current = state.currentId;\n      } else if (!state.isInstantPhase) {\n        setState({\n          isInstantPhase: true\n        });\n      }\n    } else {\n      if (state.isInstantPhase) {\n        setState({\n          isInstantPhase: false\n        });\n      }\n      initialCurrentIdRef.current = null;\n    }\n  }, [state.currentId, state.isInstantPhase]);\n  return /*#__PURE__*/React.createElement(FloatingDelayGroupContext.Provider, {\n    value: React.useMemo(() => ({\n      ...state,\n      setState,\n      setCurrentId\n    }), [state, setCurrentId])\n  }, children);\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `FloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useDelayGroup(context, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    floatingId\n  } = context;\n  const {\n    id: optionId,\n    enabled = true\n  } = options;\n  const id = optionId != null ? optionId : floatingId;\n  const groupContext = useDelayGroupContext();\n  const {\n    currentId,\n    setCurrentId,\n    initialDelay,\n    setState,\n    timeoutMs\n  } = groupContext;\n  index(() => {\n    if (!enabled) return;\n    if (!currentId) return;\n    setState({\n      delay: {\n        open: 1,\n        close: getDelay(initialDelay, 'close')\n      }\n    });\n    if (currentId !== id) {\n      onOpenChange(false);\n    }\n  }, [enabled, id, onOpenChange, setState, currentId, initialDelay]);\n  index(() => {\n    function unset() {\n      onOpenChange(false);\n      setState({\n        delay: initialDelay,\n        currentId: null\n      });\n    }\n    if (!enabled) return;\n    if (!currentId) return;\n    if (!open && currentId === id) {\n      if (timeoutMs) {\n        const timeout = window.setTimeout(unset, timeoutMs);\n        return () => {\n          clearTimeout(timeout);\n        };\n      }\n      unset();\n    }\n  }, [enabled, open, setState, currentId, id, onOpenChange, initialDelay, timeoutMs]);\n  index(() => {\n    if (!enabled) return;\n    if (setCurrentId === NOOP || !open) return;\n    setCurrentId(id);\n  }, [enabled, open, setCurrentId, id]);\n  return groupContext;\n}\n\nlet rafId = 0;\nfunction enqueueFocus(el, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    preventScroll = false,\n    cancelPrevious = true,\n    sync = false\n  } = options;\n  cancelPrevious && cancelAnimationFrame(rafId);\n  const exec = () => el == null ? void 0 : el.focus({\n    preventScroll\n  });\n  if (sync) {\n    exec();\n  } else {\n    rafId = requestAnimationFrame(exec);\n  }\n}\n\nfunction getAncestors(nodes, id) {\n  var _nodes$find;\n  let allAncestors = [];\n  let currentParentId = (_nodes$find = nodes.find(node => node.id === id)) == null ? void 0 : _nodes$find.parentId;\n  while (currentParentId) {\n    const currentNode = nodes.find(node => node.id === currentParentId);\n    currentParentId = currentNode == null ? void 0 : currentNode.parentId;\n    if (currentNode) {\n      allAncestors = allAncestors.concat(currentNode);\n    }\n  }\n  return allAncestors;\n}\n\nfunction getChildren(nodes, id) {\n  let allChildren = nodes.filter(node => {\n    var _node$context;\n    return node.parentId === id && ((_node$context = node.context) == null ? void 0 : _node$context.open);\n  });\n  let currentChildren = allChildren;\n  while (currentChildren.length) {\n    currentChildren = nodes.filter(node => {\n      var _currentChildren;\n      return (_currentChildren = currentChildren) == null ? void 0 : _currentChildren.some(n => {\n        var _node$context2;\n        return node.parentId === n.id && ((_node$context2 = node.context) == null ? void 0 : _node$context2.open);\n      });\n    });\n    allChildren = allChildren.concat(currentChildren);\n  }\n  return allChildren;\n}\nfunction getDeepestNode(nodes, id) {\n  let deepestNodeId;\n  let maxDepth = -1;\n  function findDeepest(nodeId, depth) {\n    if (depth > maxDepth) {\n      deepestNodeId = nodeId;\n      maxDepth = depth;\n    }\n    const children = getChildren(nodes, nodeId);\n    children.forEach(child => {\n      findDeepest(child.id, depth + 1);\n    });\n  }\n  findDeepest(id, 0);\n  return nodes.find(node => node.id === deepestNodeId);\n}\n\n// Modified to add conditional `aria-hidden` support:\n// https://github.com/theKashey/aria-hidden/blob/9220c8f4a4fd35f63bee5510a9f41a37264382d4/src/index.ts\nlet counterMap = /*#__PURE__*/new WeakMap();\nlet uncontrolledElementsSet = /*#__PURE__*/new WeakSet();\nlet markerMap = {};\nlet lockCount$1 = 0;\nconst supportsInert = () => typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nconst unwrapHost = node => node && (node.host || unwrapHost(node.parentNode));\nconst correctElements = (parent, targets) => targets.map(target => {\n  if (parent.contains(target)) {\n    return target;\n  }\n  const correctedTarget = unwrapHost(target);\n  if (parent.contains(correctedTarget)) {\n    return correctedTarget;\n  }\n  return null;\n}).filter(x => x != null);\nfunction applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert) {\n  const markerName = 'data-floating-ui-inert';\n  const controlAttribute = inert ? 'inert' : ariaHidden ? 'aria-hidden' : null;\n  const avoidElements = correctElements(body, uncorrectedAvoidElements);\n  const elementsToKeep = new Set();\n  const elementsToStop = new Set(avoidElements);\n  const hiddenElements = [];\n  if (!markerMap[markerName]) {\n    markerMap[markerName] = new WeakMap();\n  }\n  const markerCounter = markerMap[markerName];\n  avoidElements.forEach(keep);\n  deep(body);\n  elementsToKeep.clear();\n  function keep(el) {\n    if (!el || elementsToKeep.has(el)) {\n      return;\n    }\n    elementsToKeep.add(el);\n    el.parentNode && keep(el.parentNode);\n  }\n  function deep(parent) {\n    if (!parent || elementsToStop.has(parent)) {\n      return;\n    }\n    [].forEach.call(parent.children, node => {\n      if (getNodeName(node) === 'script') return;\n      if (elementsToKeep.has(node)) {\n        deep(node);\n      } else {\n        const attr = controlAttribute ? node.getAttribute(controlAttribute) : null;\n        const alreadyHidden = attr !== null && attr !== 'false';\n        const counterValue = (counterMap.get(node) || 0) + 1;\n        const markerValue = (markerCounter.get(node) || 0) + 1;\n        counterMap.set(node, counterValue);\n        markerCounter.set(node, markerValue);\n        hiddenElements.push(node);\n        if (counterValue === 1 && alreadyHidden) {\n          uncontrolledElementsSet.add(node);\n        }\n        if (markerValue === 1) {\n          node.setAttribute(markerName, '');\n        }\n        if (!alreadyHidden && controlAttribute) {\n          node.setAttribute(controlAttribute, 'true');\n        }\n      }\n    });\n  }\n  lockCount$1++;\n  return () => {\n    hiddenElements.forEach(element => {\n      const counterValue = (counterMap.get(element) || 0) - 1;\n      const markerValue = (markerCounter.get(element) || 0) - 1;\n      counterMap.set(element, counterValue);\n      markerCounter.set(element, markerValue);\n      if (!counterValue) {\n        if (!uncontrolledElementsSet.has(element) && controlAttribute) {\n          element.removeAttribute(controlAttribute);\n        }\n        uncontrolledElementsSet.delete(element);\n      }\n      if (!markerValue) {\n        element.removeAttribute(markerName);\n      }\n    });\n    lockCount$1--;\n    if (!lockCount$1) {\n      counterMap = new WeakMap();\n      counterMap = new WeakMap();\n      uncontrolledElementsSet = new WeakSet();\n      markerMap = {};\n    }\n  };\n}\nfunction markOthers(avoidElements, ariaHidden, inert) {\n  if (ariaHidden === void 0) {\n    ariaHidden = false;\n  }\n  if (inert === void 0) {\n    inert = false;\n  }\n  const body = getDocument(avoidElements[0]).body;\n  return applyAttributeToOthers(avoidElements.concat(Array.from(body.querySelectorAll('[aria-live]'))), body, ariaHidden, inert);\n}\n\nconst getTabbableOptions = () => ({\n  getShadowRoot: true,\n  displayCheck:\n  // JSDOM does not support the `tabbable` library. To solve this we can\n  // check if `ResizeObserver` is a real function (not polyfilled), which\n  // determines if the current environment is JSDOM-like.\n  typeof ResizeObserver === 'function' && ResizeObserver.toString().includes('[native code]') ? 'full' : 'none'\n});\nfunction getTabbableIn(container, direction) {\n  const allTabbable = tabbable(container, getTabbableOptions());\n  if (direction === 'prev') {\n    allTabbable.reverse();\n  }\n  const activeIndex = allTabbable.indexOf(activeElement(getDocument(container)));\n  const nextTabbableElements = allTabbable.slice(activeIndex + 1);\n  return nextTabbableElements[0];\n}\nfunction getNextTabbable() {\n  return getTabbableIn(document.body, 'next');\n}\nfunction getPreviousTabbable() {\n  return getTabbableIn(document.body, 'prev');\n}\nfunction isOutsideEvent(event, container) {\n  const containerElement = container || event.currentTarget;\n  const relatedTarget = event.relatedTarget;\n  return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nfunction disableFocusInside(container) {\n  const tabbableElements = tabbable(container, getTabbableOptions());\n  tabbableElements.forEach(element => {\n    element.dataset.tabindex = element.getAttribute('tabindex') || '';\n    element.setAttribute('tabindex', '-1');\n  });\n}\nfunction enableFocusInside(container) {\n  const elements = container.querySelectorAll('[data-tabindex]');\n  elements.forEach(element => {\n    const tabindex = element.dataset.tabindex;\n    delete element.dataset.tabindex;\n    if (tabindex) {\n      element.setAttribute('tabindex', tabindex);\n    } else {\n      element.removeAttribute('tabindex');\n    }\n  });\n}\n\n// See Diego Haz's Sandbox for making this logic work well on Safari/iOS:\n// https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/FocusTrap.tsx\n\nconst HIDDEN_STYLES = {\n  border: 0,\n  clip: 'rect(0 0 0 0)',\n  height: '1px',\n  margin: '-1px',\n  overflow: 'hidden',\n  padding: 0,\n  position: 'fixed',\n  whiteSpace: 'nowrap',\n  width: '1px',\n  top: 0,\n  left: 0\n};\nlet timeoutId;\nfunction setActiveElementOnTab(event) {\n  if (event.key === 'Tab') {\n    event.target;\n    clearTimeout(timeoutId);\n  }\n}\nconst FocusGuard = /*#__PURE__*/React.forwardRef(function FocusGuard(props, ref) {\n  const [role, setRole] = React.useState();\n  index(() => {\n    if (isSafari()) {\n      // Unlike other screen readers such as NVDA and JAWS, the virtual cursor\n      // on VoiceOver does trigger the onFocus event, so we can use the focus\n      // trap element. On Safari, only buttons trigger the onFocus event.\n      // NB: \"group\" role in the Sandbox no longer appears to work, must be a\n      // button role.\n      setRole('button');\n    }\n    document.addEventListener('keydown', setActiveElementOnTab);\n    return () => {\n      document.removeEventListener('keydown', setActiveElementOnTab);\n    };\n  }, []);\n  const restProps = {\n    ref,\n    tabIndex: 0,\n    // Role is only for VoiceOver\n    role,\n    'aria-hidden': role ? undefined : true,\n    [createAttribute('focus-guard')]: '',\n    style: HIDDEN_STYLES\n  };\n  return /*#__PURE__*/React.createElement(\"span\", _extends({}, props, restProps));\n});\n\nconst PortalContext = /*#__PURE__*/React.createContext(null);\nconst attr = /*#__PURE__*/createAttribute('portal');\n/**\n * @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode\n */\nfunction useFloatingPortalNode(props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    id,\n    root\n  } = props;\n  const uniqueId = useId();\n  const portalContext = usePortalContext();\n  const [portalNode, setPortalNode] = React.useState(null);\n  const portalNodeRef = React.useRef(null);\n  index(() => {\n    return () => {\n      portalNode == null || portalNode.remove();\n      // Allow the subsequent layout effects to create a new node on updates.\n      // The portal node will still be cleaned up on unmount.\n      // https://github.com/floating-ui/floating-ui/issues/2454\n      queueMicrotask(() => {\n        portalNodeRef.current = null;\n      });\n    };\n  }, [portalNode]);\n  index(() => {\n    // Wait for the uniqueId to be generated before creating the portal node in\n    // React <18 (using `useFloatingId` instead of the native `useId`).\n    // https://github.com/floating-ui/floating-ui/issues/2778\n    if (!uniqueId) return;\n    if (portalNodeRef.current) return;\n    const existingIdRoot = id ? document.getElementById(id) : null;\n    if (!existingIdRoot) return;\n    const subRoot = document.createElement('div');\n    subRoot.id = uniqueId;\n    subRoot.setAttribute(attr, '');\n    existingIdRoot.appendChild(subRoot);\n    portalNodeRef.current = subRoot;\n    setPortalNode(subRoot);\n  }, [id, uniqueId]);\n  index(() => {\n    // Wait for the root to exist before creating the portal node. The root must\n    // be stored in state, not a ref, for this to work reactively.\n    if (root === null) return;\n    if (!uniqueId) return;\n    if (portalNodeRef.current) return;\n    let container = root || (portalContext == null ? void 0 : portalContext.portalNode);\n    if (container && !isElement(container)) container = container.current;\n    container = container || document.body;\n    let idWrapper = null;\n    if (id) {\n      idWrapper = document.createElement('div');\n      idWrapper.id = id;\n      container.appendChild(idWrapper);\n    }\n    const subRoot = document.createElement('div');\n    subRoot.id = uniqueId;\n    subRoot.setAttribute(attr, '');\n    container = idWrapper || container;\n    container.appendChild(subRoot);\n    portalNodeRef.current = subRoot;\n    setPortalNode(subRoot);\n  }, [id, root, uniqueId, portalContext]);\n  return portalNode;\n}\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n */\nfunction FloatingPortal(props) {\n  const {\n    children,\n    id,\n    root,\n    preserveTabOrder = true\n  } = props;\n  const portalNode = useFloatingPortalNode({\n    id,\n    root\n  });\n  const [focusManagerState, setFocusManagerState] = React.useState(null);\n  const beforeOutsideRef = React.useRef(null);\n  const afterOutsideRef = React.useRef(null);\n  const beforeInsideRef = React.useRef(null);\n  const afterInsideRef = React.useRef(null);\n  const modal = focusManagerState == null ? void 0 : focusManagerState.modal;\n  const open = focusManagerState == null ? void 0 : focusManagerState.open;\n  const shouldRenderGuards =\n  // The FocusManager and therefore floating element are currently open/\n  // rendered.\n  !!focusManagerState &&\n  // Guards are only for non-modal focus management.\n  !focusManagerState.modal &&\n  // Don't render if unmount is transitioning.\n  focusManagerState.open && preserveTabOrder && !!(root || portalNode);\n\n  // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n  React.useEffect(() => {\n    if (!portalNode || !preserveTabOrder || modal) {\n      return;\n    }\n\n    // Make sure elements inside the portal element are tabbable only when the\n    // portal has already been focused, either by tabbing into a focus trap\n    // element outside or using the mouse.\n    function onFocus(event) {\n      if (portalNode && isOutsideEvent(event)) {\n        const focusing = event.type === 'focusin';\n        const manageFocus = focusing ? enableFocusInside : disableFocusInside;\n        manageFocus(portalNode);\n      }\n    }\n    // Listen to the event on the capture phase so they run before the focus\n    // trap elements onFocus prop is called.\n    portalNode.addEventListener('focusin', onFocus, true);\n    portalNode.addEventListener('focusout', onFocus, true);\n    return () => {\n      portalNode.removeEventListener('focusin', onFocus, true);\n      portalNode.removeEventListener('focusout', onFocus, true);\n    };\n  }, [portalNode, preserveTabOrder, modal]);\n  React.useEffect(() => {\n    if (!portalNode) return;\n    if (open) return;\n    enableFocusInside(portalNode);\n  }, [open, portalNode]);\n  return /*#__PURE__*/React.createElement(PortalContext.Provider, {\n    value: React.useMemo(() => ({\n      preserveTabOrder,\n      beforeOutsideRef,\n      afterOutsideRef,\n      beforeInsideRef,\n      afterInsideRef,\n      portalNode,\n      setFocusManagerState\n    }), [preserveTabOrder, portalNode])\n  }, shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(FocusGuard, {\n    \"data-type\": \"outside\",\n    ref: beforeOutsideRef,\n    onFocus: event => {\n      if (isOutsideEvent(event, portalNode)) {\n        var _beforeInsideRef$curr;\n        (_beforeInsideRef$curr = beforeInsideRef.current) == null || _beforeInsideRef$curr.focus();\n      } else {\n        const prevTabbable = getPreviousTabbable() || (focusManagerState == null ? void 0 : focusManagerState.refs.domReference.current);\n        prevTabbable == null || prevTabbable.focus();\n      }\n    }\n  }), shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(\"span\", {\n    \"aria-owns\": portalNode.id,\n    style: HIDDEN_STYLES\n  }), portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode), shouldRenderGuards && portalNode && /*#__PURE__*/React.createElement(FocusGuard, {\n    \"data-type\": \"outside\",\n    ref: afterOutsideRef,\n    onFocus: event => {\n      if (isOutsideEvent(event, portalNode)) {\n        var _afterInsideRef$curre;\n        (_afterInsideRef$curre = afterInsideRef.current) == null || _afterInsideRef$curre.focus();\n      } else {\n        const nextTabbable = getNextTabbable() || (focusManagerState == null ? void 0 : focusManagerState.refs.domReference.current);\n        nextTabbable == null || nextTabbable.focus();\n        (focusManagerState == null ? void 0 : focusManagerState.closeOnFocusOut) && (focusManagerState == null ? void 0 : focusManagerState.onOpenChange(false, event.nativeEvent, 'focus-out'));\n      }\n    }\n  }));\n}\nconst usePortalContext = () => React.useContext(PortalContext);\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nfunction getFloatingFocusElement(floatingElement) {\n  if (!floatingElement) {\n    return null;\n  }\n  // Try to find the element that has `{...getFloatingProps()}` spread on it.\n  // This indicates the floating element is acting as a positioning wrapper, and\n  // so focus should be managed on the child element with the event handlers and\n  // aria props.\n  return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(\"[\" + FOCUSABLE_ATTRIBUTE + \"]\") || floatingElement;\n}\n\nconst LIST_LIMIT = 20;\nlet previouslyFocusedElements = [];\nfunction addPreviouslyFocusedElement(element) {\n  previouslyFocusedElements = previouslyFocusedElements.filter(el => el.isConnected);\n  let tabbableEl = element;\n  if (!tabbableEl || getNodeName(tabbableEl) === 'body') return;\n  if (!isTabbable(tabbableEl, getTabbableOptions())) {\n    const tabbableChild = tabbable(tabbableEl, getTabbableOptions())[0];\n    if (tabbableChild) {\n      tabbableEl = tabbableChild;\n    }\n  }\n  previouslyFocusedElements.push(tabbableEl);\n  if (previouslyFocusedElements.length > LIST_LIMIT) {\n    previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT);\n  }\n}\nfunction getPreviouslyFocusedElement() {\n  return previouslyFocusedElements.slice().reverse().find(el => el.isConnected);\n}\nconst VisuallyHiddenDismiss = /*#__PURE__*/React.forwardRef(function VisuallyHiddenDismiss(props, ref) {\n  return /*#__PURE__*/React.createElement(\"button\", _extends({}, props, {\n    type: \"button\",\n    ref: ref,\n    tabIndex: -1,\n    style: HIDDEN_STYLES\n  }));\n});\n/**\n * Provides focus management for the floating element.\n * @see https://floating-ui.com/docs/FloatingFocusManager\n */\nfunction FloatingFocusManager(props) {\n  const {\n    context,\n    children,\n    disabled = false,\n    order = ['content'],\n    guards: _guards = true,\n    initialFocus = 0,\n    returnFocus = true,\n    restoreFocus = false,\n    modal = true,\n    visuallyHiddenDismiss = false,\n    closeOnFocusOut = true\n  } = props;\n  const {\n    open,\n    refs,\n    nodeId,\n    onOpenChange,\n    events,\n    dataRef,\n    floatingId,\n    elements: {\n      domReference,\n      floating\n    }\n  } = context;\n  const ignoreInitialFocus = typeof initialFocus === 'number' && initialFocus < 0;\n  // If the reference is a combobox and is typeable (e.g. input/textarea),\n  // there are different focus semantics. The guards should not be rendered, but\n  // aria-hidden should be applied to all nodes still. Further, the visually\n  // hidden dismiss button should only appear at the end of the list, not the\n  // start.\n  const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;\n\n  // Force the guards to be rendered if the `inert` attribute is not supported.\n  const guards = supportsInert() ? _guards : true;\n  const orderRef = useLatestRef(order);\n  const initialFocusRef = useLatestRef(initialFocus);\n  const returnFocusRef = useLatestRef(returnFocus);\n  const tree = useFloatingTree();\n  const portalContext = usePortalContext();\n  const startDismissButtonRef = React.useRef(null);\n  const endDismissButtonRef = React.useRef(null);\n  const preventReturnFocusRef = React.useRef(false);\n  const isPointerDownRef = React.useRef(false);\n  const tabbableIndexRef = React.useRef(-1);\n  const isInsidePortal = portalContext != null;\n  const floatingFocusElement = getFloatingFocusElement(floating);\n  const getTabbableContent = useEffectEvent(function (container) {\n    if (container === void 0) {\n      container = floatingFocusElement;\n    }\n    return container ? tabbable(container, getTabbableOptions()) : [];\n  });\n  const getTabbableElements = useEffectEvent(container => {\n    const content = getTabbableContent(container);\n    return orderRef.current.map(type => {\n      if (domReference && type === 'reference') {\n        return domReference;\n      }\n      if (floatingFocusElement && type === 'floating') {\n        return floatingFocusElement;\n      }\n      return content;\n    }).filter(Boolean).flat();\n  });\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!modal) return;\n    function onKeyDown(event) {\n      if (event.key === 'Tab') {\n        // The focus guards have nothing to focus, so we need to stop the event.\n        if (contains(floatingFocusElement, activeElement(getDocument(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {\n          stopEvent(event);\n        }\n        const els = getTabbableElements();\n        const target = getTarget(event);\n        if (orderRef.current[0] === 'reference' && target === domReference) {\n          stopEvent(event);\n          if (event.shiftKey) {\n            enqueueFocus(els[els.length - 1]);\n          } else {\n            enqueueFocus(els[1]);\n          }\n        }\n        if (orderRef.current[1] === 'floating' && target === floatingFocusElement && event.shiftKey) {\n          stopEvent(event);\n          enqueueFocus(els[0]);\n        }\n      }\n    }\n    const doc = getDocument(floatingFocusElement);\n    doc.addEventListener('keydown', onKeyDown);\n    return () => {\n      doc.removeEventListener('keydown', onKeyDown);\n    };\n  }, [disabled, domReference, floatingFocusElement, modal, orderRef, isUntrappedTypeableCombobox, getTabbableContent, getTabbableElements]);\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!floating) return;\n    function handleFocusIn(event) {\n      const target = getTarget(event);\n      const tabbableContent = getTabbableContent();\n      const tabbableIndex = tabbableContent.indexOf(target);\n      if (tabbableIndex !== -1) {\n        tabbableIndexRef.current = tabbableIndex;\n      }\n    }\n    floating.addEventListener('focusin', handleFocusIn);\n    return () => {\n      floating.removeEventListener('focusin', handleFocusIn);\n    };\n  }, [disabled, floating, getTabbableContent]);\n  React.useEffect(() => {\n    if (disabled) return;\n    if (!closeOnFocusOut) return;\n\n    // In Safari, buttons lose focus when pressing them.\n    function handlePointerDown() {\n      isPointerDownRef.current = true;\n      setTimeout(() => {\n        isPointerDownRef.current = false;\n      });\n    }\n    function handleFocusOutside(event) {\n      const relatedTarget = event.relatedTarget;\n      queueMicrotask(() => {\n        const movedToUnrelatedNode = !(contains(domReference, relatedTarget) || contains(floating, relatedTarget) || contains(relatedTarget, floating) || contains(portalContext == null ? void 0 : portalContext.portalNode, relatedTarget) || relatedTarget != null && relatedTarget.hasAttribute(createAttribute('focus-guard')) || tree && (getChildren(tree.nodesRef.current, nodeId).find(node => {\n          var _node$context, _node$context2;\n          return contains((_node$context = node.context) == null ? void 0 : _node$context.elements.floating, relatedTarget) || contains((_node$context2 = node.context) == null ? void 0 : _node$context2.elements.domReference, relatedTarget);\n        }) || getAncestors(tree.nodesRef.current, nodeId).find(node => {\n          var _node$context3, _node$context4;\n          return ((_node$context3 = node.context) == null ? void 0 : _node$context3.elements.floating) === relatedTarget || ((_node$context4 = node.context) == null ? void 0 : _node$context4.elements.domReference) === relatedTarget;\n        })));\n\n        // Restore focus to the previous tabbable element index to prevent\n        // focus from being lost outside the floating tree.\n        if (restoreFocus && movedToUnrelatedNode && activeElement(getDocument(floatingFocusElement)) === getDocument(floatingFocusElement).body) {\n          // Let `FloatingPortal` effect knows that focus is still inside the\n          // floating tree.\n          if (isHTMLElement(floatingFocusElement)) {\n            floatingFocusElement.focus();\n          }\n          const prevTabbableIndex = tabbableIndexRef.current;\n          const tabbableContent = getTabbableContent();\n          const nodeToFocus = tabbableContent[prevTabbableIndex] || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;\n          if (isHTMLElement(nodeToFocus)) {\n            nodeToFocus.focus();\n          }\n        }\n\n        // Focus did not move inside the floating tree, and there are no tabbable\n        // portal guards to handle closing.\n        if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current &&\n        // Fix React 18 Strict Mode returnFocus due to double rendering.\n        relatedTarget !== getPreviouslyFocusedElement()) {\n          preventReturnFocusRef.current = true;\n          onOpenChange(false, event, 'focus-out');\n        }\n      });\n    }\n    if (floating && isHTMLElement(domReference)) {\n      domReference.addEventListener('focusout', handleFocusOutside);\n      domReference.addEventListener('pointerdown', handlePointerDown);\n      floating.addEventListener('focusout', handleFocusOutside);\n      return () => {\n        domReference.removeEventListener('focusout', handleFocusOutside);\n        domReference.removeEventListener('pointerdown', handlePointerDown);\n        floating.removeEventListener('focusout', handleFocusOutside);\n      };\n    }\n  }, [disabled, domReference, floating, floatingFocusElement, modal, nodeId, tree, portalContext, onOpenChange, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox]);\n  React.useEffect(() => {\n    var _portalContext$portal;\n    if (disabled) return;\n\n    // Don't hide portals nested within the parent portal.\n    const portalNodes = Array.from((portalContext == null || (_portalContext$portal = portalContext.portalNode) == null ? void 0 : _portalContext$portal.querySelectorAll(\"[\" + createAttribute('portal') + \"]\")) || []);\n    if (floating) {\n      const insideElements = [floating, ...portalNodes, startDismissButtonRef.current, endDismissButtonRef.current, orderRef.current.includes('reference') || isUntrappedTypeableCombobox ? domReference : null].filter(x => x != null);\n      const cleanup = modal || isUntrappedTypeableCombobox ? markOthers(insideElements, guards, !guards) : markOthers(insideElements);\n      return () => {\n        cleanup();\n      };\n    }\n  }, [disabled, domReference, floating, modal, orderRef, portalContext, isUntrappedTypeableCombobox, guards]);\n  index(() => {\n    if (disabled || !isHTMLElement(floatingFocusElement)) return;\n    const doc = getDocument(floatingFocusElement);\n    const previouslyFocusedElement = activeElement(doc);\n\n    // Wait for any layout effect state setters to execute to set `tabIndex`.\n    queueMicrotask(() => {\n      const focusableElements = getTabbableElements(floatingFocusElement);\n      const initialFocusValue = initialFocusRef.current;\n      const elToFocus = (typeof initialFocusValue === 'number' ? focusableElements[initialFocusValue] : initialFocusValue.current) || floatingFocusElement;\n      const focusAlreadyInsideFloatingEl = contains(floatingFocusElement, previouslyFocusedElement);\n      if (!ignoreInitialFocus && !focusAlreadyInsideFloatingEl && open) {\n        enqueueFocus(elToFocus, {\n          preventScroll: elToFocus === floatingFocusElement\n        });\n      }\n    });\n  }, [disabled, open, floatingFocusElement, ignoreInitialFocus, getTabbableElements, initialFocusRef]);\n  index(() => {\n    if (disabled || !floatingFocusElement) return;\n    let preventReturnFocusScroll = false;\n    const doc = getDocument(floatingFocusElement);\n    const previouslyFocusedElement = activeElement(doc);\n    const contextData = dataRef.current;\n    let openEvent = contextData.openEvent;\n    addPreviouslyFocusedElement(previouslyFocusedElement);\n\n    // Dismissing via outside press should always ignore `returnFocus` to\n    // prevent unwanted scrolling.\n    function onOpenChange(_ref) {\n      let {\n        open,\n        reason,\n        event,\n        nested\n      } = _ref;\n      if (open) {\n        openEvent = event;\n      }\n      if (reason === 'escape-key' && refs.domReference.current) {\n        addPreviouslyFocusedElement(refs.domReference.current);\n      }\n      if (reason === 'hover' && event.type === 'mouseleave') {\n        preventReturnFocusRef.current = true;\n      }\n      if (reason !== 'outside-press') return;\n      if (nested) {\n        preventReturnFocusRef.current = false;\n        preventReturnFocusScroll = true;\n      } else {\n        preventReturnFocusRef.current = !(isVirtualClick(event) || isVirtualPointerEvent(event));\n      }\n    }\n    events.on('openchange', onOpenChange);\n    const fallbackEl = doc.createElement('span');\n    fallbackEl.setAttribute('tabindex', '-1');\n    fallbackEl.setAttribute('aria-hidden', 'true');\n    Object.assign(fallbackEl.style, HIDDEN_STYLES);\n    if (isInsidePortal && domReference) {\n      domReference.insertAdjacentElement('afterend', fallbackEl);\n    }\n    function getReturnElement() {\n      if (typeof returnFocusRef.current === 'boolean') {\n        return getPreviouslyFocusedElement() || fallbackEl;\n      }\n      return returnFocusRef.current.current || fallbackEl;\n    }\n    return () => {\n      events.off('openchange', onOpenChange);\n      const activeEl = activeElement(doc);\n      const isFocusInsideFloatingTree = contains(floating, activeEl) || tree && getChildren(tree.nodesRef.current, nodeId).some(node => {\n        var _node$context5;\n        return contains((_node$context5 = node.context) == null ? void 0 : _node$context5.elements.floating, activeEl);\n      });\n      const shouldFocusReference = isFocusInsideFloatingTree || openEvent && ['click', 'mousedown'].includes(openEvent.type);\n      if (shouldFocusReference && refs.domReference.current) {\n        addPreviouslyFocusedElement(refs.domReference.current);\n      }\n      const returnElement = getReturnElement();\n      queueMicrotask(() => {\n        if (\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        returnFocusRef.current && !preventReturnFocusRef.current && isHTMLElement(returnElement) && (\n        // If the focus moved somewhere else after mount, avoid returning focus\n        // since it likely entered a different element which should be\n        // respected: https://github.com/floating-ui/floating-ui/issues/2607\n        returnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {\n          returnElement.focus({\n            preventScroll: preventReturnFocusScroll\n          });\n        }\n        fallbackEl.remove();\n      });\n    };\n  }, [disabled, floating, floatingFocusElement, returnFocusRef, dataRef, refs, events, tree, nodeId, isInsidePortal, domReference]);\n  React.useEffect(() => {\n    // The `returnFocus` cleanup behavior is inside a microtask; ensure we\n    // wait for it to complete before resetting the flag.\n    queueMicrotask(() => {\n      preventReturnFocusRef.current = false;\n    });\n  }, [disabled]);\n\n  // Synchronize the `context` & `modal` value to the FloatingPortal context.\n  // It will decide whether or not it needs to render its own guards.\n  index(() => {\n    if (disabled) return;\n    if (!portalContext) return;\n    portalContext.setFocusManagerState({\n      modal,\n      closeOnFocusOut,\n      open,\n      onOpenChange,\n      refs\n    });\n    return () => {\n      portalContext.setFocusManagerState(null);\n    };\n  }, [disabled, portalContext, modal, open, onOpenChange, refs, closeOnFocusOut]);\n  index(() => {\n    if (disabled) return;\n    if (!floatingFocusElement) return;\n    if (typeof MutationObserver !== 'function') return;\n    if (ignoreInitialFocus) return;\n    const handleMutation = () => {\n      const tabIndex = floatingFocusElement.getAttribute('tabindex');\n      const tabbableContent = getTabbableContent();\n      const activeEl = activeElement(getDocument(floating));\n      const tabbableIndex = tabbableContent.indexOf(activeEl);\n      if (tabbableIndex !== -1) {\n        tabbableIndexRef.current = tabbableIndex;\n      }\n      if (orderRef.current.includes('floating') || activeEl !== refs.domReference.current && tabbableContent.length === 0) {\n        if (tabIndex !== '0') {\n          floatingFocusElement.setAttribute('tabindex', '0');\n        }\n      } else if (tabIndex !== '-1') {\n        floatingFocusElement.setAttribute('tabindex', '-1');\n      }\n    };\n    handleMutation();\n    const observer = new MutationObserver(handleMutation);\n    observer.observe(floatingFocusElement, {\n      childList: true,\n      subtree: true,\n      attributes: true\n    });\n    return () => {\n      observer.disconnect();\n    };\n  }, [disabled, floating, floatingFocusElement, refs, orderRef, getTabbableContent, ignoreInitialFocus]);\n  function renderDismissButton(location) {\n    if (disabled || !visuallyHiddenDismiss || !modal) {\n      return null;\n    }\n    return /*#__PURE__*/React.createElement(VisuallyHiddenDismiss, {\n      ref: location === 'start' ? startDismissButtonRef : endDismissButtonRef,\n      onClick: event => onOpenChange(false, event.nativeEvent)\n    }, typeof visuallyHiddenDismiss === 'string' ? visuallyHiddenDismiss : 'Dismiss');\n  }\n  const shouldRenderGuards = !disabled && guards && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);\n  return /*#__PURE__*/React.createElement(React.Fragment, null, shouldRenderGuards && /*#__PURE__*/React.createElement(FocusGuard, {\n    \"data-type\": \"inside\",\n    ref: portalContext == null ? void 0 : portalContext.beforeInsideRef,\n    onFocus: event => {\n      if (modal) {\n        const els = getTabbableElements();\n        enqueueFocus(order[0] === 'reference' ? els[0] : els[els.length - 1]);\n      } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n        preventReturnFocusRef.current = false;\n        if (isOutsideEvent(event, portalContext.portalNode)) {\n          const nextTabbable = getNextTabbable() || domReference;\n          nextTabbable == null || nextTabbable.focus();\n        } else {\n          var _portalContext$before;\n          (_portalContext$before = portalContext.beforeOutsideRef.current) == null || _portalContext$before.focus();\n        }\n      }\n    }\n  }), !isUntrappedTypeableCombobox && renderDismissButton('start'), children, renderDismissButton('end'), shouldRenderGuards && /*#__PURE__*/React.createElement(FocusGuard, {\n    \"data-type\": \"inside\",\n    ref: portalContext == null ? void 0 : portalContext.afterInsideRef,\n    onFocus: event => {\n      if (modal) {\n        enqueueFocus(getTabbableElements()[0]);\n      } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n        if (closeOnFocusOut) {\n          preventReturnFocusRef.current = true;\n        }\n        if (isOutsideEvent(event, portalContext.portalNode)) {\n          const prevTabbable = getPreviousTabbable() || domReference;\n          prevTabbable == null || prevTabbable.focus();\n        } else {\n          var _portalContext$afterO;\n          (_portalContext$afterO = portalContext.afterOutsideRef.current) == null || _portalContext$afterO.focus();\n        }\n      }\n    }\n  }));\n}\n\nlet lockCount = 0;\nfunction enableScrollLock() {\n  const isIOS = /iP(hone|ad|od)|iOS/.test(getPlatform());\n  const bodyStyle = document.body.style;\n  // RTL <body> scrollbar\n  const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;\n  const paddingProp = scrollbarX ? 'paddingLeft' : 'paddingRight';\n  const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n  const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;\n  const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;\n  bodyStyle.overflow = 'hidden';\n  if (scrollbarWidth) {\n    bodyStyle[paddingProp] = scrollbarWidth + \"px\";\n  }\n\n  // Only iOS doesn't respect `overflow: hidden` on document.body, and this\n  // technique has fewer side effects.\n  if (isIOS) {\n    var _window$visualViewpor, _window$visualViewpor2;\n    // iOS 12 does not support `visualViewport`.\n    const offsetLeft = ((_window$visualViewpor = window.visualViewport) == null ? void 0 : _window$visualViewpor.offsetLeft) || 0;\n    const offsetTop = ((_window$visualViewpor2 = window.visualViewport) == null ? void 0 : _window$visualViewpor2.offsetTop) || 0;\n    Object.assign(bodyStyle, {\n      position: 'fixed',\n      top: -(scrollY - Math.floor(offsetTop)) + \"px\",\n      left: -(scrollX - Math.floor(offsetLeft)) + \"px\",\n      right: '0'\n    });\n  }\n  return () => {\n    Object.assign(bodyStyle, {\n      overflow: '',\n      [paddingProp]: ''\n    });\n    if (isIOS) {\n      Object.assign(bodyStyle, {\n        position: '',\n        top: '',\n        left: '',\n        right: ''\n      });\n      window.scrollTo(scrollX, scrollY);\n    }\n  };\n}\nlet cleanup = () => {};\n\n/**\n * Provides base styling for a fixed overlay element to dim content or block\n * pointer events behind a floating element.\n * It's a regular `<div>`, so it can be styled via any CSS solution you prefer.\n * @see https://floating-ui.com/docs/FloatingOverlay\n */\nconst FloatingOverlay = /*#__PURE__*/React.forwardRef(function FloatingOverlay(props, ref) {\n  const {\n    lockScroll = false,\n    ...rest\n  } = props;\n  index(() => {\n    if (!lockScroll) return;\n    lockCount++;\n    if (lockCount === 1) {\n      cleanup = enableScrollLock();\n    }\n    return () => {\n      lockCount--;\n      if (lockCount === 0) {\n        cleanup();\n      }\n    };\n  }, [lockScroll]);\n  return /*#__PURE__*/React.createElement(\"div\", _extends({\n    ref: ref\n  }, rest, {\n    style: {\n      position: 'fixed',\n      overflow: 'auto',\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0,\n      ...rest.style\n    }\n  }));\n});\n\nfunction isButtonTarget(event) {\n  return isHTMLElement(event.target) && event.target.tagName === 'BUTTON';\n}\nfunction isSpaceIgnored(element) {\n  return isTypeableElement(element);\n}\n/**\n * Opens or closes the floating element when clicking the reference element.\n * @see https://floating-ui.com/docs/useClick\n */\nfunction useClick(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    dataRef,\n    elements: {\n      domReference\n    }\n  } = context;\n  const {\n    enabled = true,\n    event: eventOption = 'click',\n    toggle = true,\n    ignoreMouse = false,\n    keyboardHandlers = true,\n    stickIfOpen = true\n  } = props;\n  const pointerTypeRef = React.useRef();\n  const didKeyDownRef = React.useRef(false);\n  const reference = React.useMemo(() => ({\n    onPointerDown(event) {\n      pointerTypeRef.current = event.pointerType;\n    },\n    onMouseDown(event) {\n      const pointerType = pointerTypeRef.current;\n\n      // Ignore all buttons except for the \"main\" button.\n      // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n      if (event.button !== 0) return;\n      if (eventOption === 'click') return;\n      if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n      if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'mousedown' : true)) {\n        onOpenChange(false, event.nativeEvent, 'click');\n      } else {\n        // Prevent stealing focus from the floating element\n        event.preventDefault();\n        onOpenChange(true, event.nativeEvent, 'click');\n      }\n    },\n    onClick(event) {\n      const pointerType = pointerTypeRef.current;\n      if (eventOption === 'mousedown' && pointerTypeRef.current) {\n        pointerTypeRef.current = undefined;\n        return;\n      }\n      if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n      if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'click' : true)) {\n        onOpenChange(false, event.nativeEvent, 'click');\n      } else {\n        onOpenChange(true, event.nativeEvent, 'click');\n      }\n    },\n    onKeyDown(event) {\n      pointerTypeRef.current = undefined;\n      if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event)) {\n        return;\n      }\n      if (event.key === ' ' && !isSpaceIgnored(domReference)) {\n        // Prevent scrolling\n        event.preventDefault();\n        didKeyDownRef.current = true;\n      }\n      if (event.key === 'Enter') {\n        if (open && toggle) {\n          onOpenChange(false, event.nativeEvent, 'click');\n        } else {\n          onOpenChange(true, event.nativeEvent, 'click');\n        }\n      }\n    },\n    onKeyUp(event) {\n      if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event) || isSpaceIgnored(domReference)) {\n        return;\n      }\n      if (event.key === ' ' && didKeyDownRef.current) {\n        didKeyDownRef.current = false;\n        if (open && toggle) {\n          onOpenChange(false, event.nativeEvent, 'click');\n        } else {\n          onOpenChange(true, event.nativeEvent, 'click');\n        }\n      }\n    }\n  }), [dataRef, domReference, eventOption, ignoreMouse, keyboardHandlers, onOpenChange, open, stickIfOpen, toggle]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nfunction createVirtualElement(domElement, data) {\n  let offsetX = null;\n  let offsetY = null;\n  let isAutoUpdateEvent = false;\n  return {\n    contextElement: domElement || undefined,\n    getBoundingClientRect() {\n      var _data$dataRef$current;\n      const domRect = (domElement == null ? void 0 : domElement.getBoundingClientRect()) || {\n        width: 0,\n        height: 0,\n        x: 0,\n        y: 0\n      };\n      const isXAxis = data.axis === 'x' || data.axis === 'both';\n      const isYAxis = data.axis === 'y' || data.axis === 'both';\n      const canTrackCursorOnAutoUpdate = ['mouseenter', 'mousemove'].includes(((_data$dataRef$current = data.dataRef.current.openEvent) == null ? void 0 : _data$dataRef$current.type) || '') && data.pointerType !== 'touch';\n      let width = domRect.width;\n      let height = domRect.height;\n      let x = domRect.x;\n      let y = domRect.y;\n      if (offsetX == null && data.x && isXAxis) {\n        offsetX = domRect.x - data.x;\n      }\n      if (offsetY == null && data.y && isYAxis) {\n        offsetY = domRect.y - data.y;\n      }\n      x -= offsetX || 0;\n      y -= offsetY || 0;\n      width = 0;\n      height = 0;\n      if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {\n        width = data.axis === 'y' ? domRect.width : 0;\n        height = data.axis === 'x' ? domRect.height : 0;\n        x = isXAxis && data.x != null ? data.x : x;\n        y = isYAxis && data.y != null ? data.y : y;\n      } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {\n        height = data.axis === 'x' ? domRect.height : height;\n        width = data.axis === 'y' ? domRect.width : width;\n      }\n      isAutoUpdateEvent = true;\n      return {\n        width,\n        height,\n        x,\n        y,\n        top: y,\n        right: x + width,\n        bottom: y + height,\n        left: x\n      };\n    }\n  };\n}\nfunction isMouseBasedEvent(event) {\n  return event != null && event.clientX != null;\n}\n/**\n * Positions the floating element relative to a client point (in the viewport),\n * such as the mouse position. By default, it follows the mouse cursor.\n * @see https://floating-ui.com/docs/useClientPoint\n */\nfunction useClientPoint(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    dataRef,\n    elements: {\n      floating,\n      domReference\n    },\n    refs\n  } = context;\n  const {\n    enabled = true,\n    axis = 'both',\n    x = null,\n    y = null\n  } = props;\n  const initialRef = React.useRef(false);\n  const cleanupListenerRef = React.useRef(null);\n  const [pointerType, setPointerType] = React.useState();\n  const [reactive, setReactive] = React.useState([]);\n  const setReference = useEffectEvent((x, y) => {\n    if (initialRef.current) return;\n\n    // Prevent setting if the open event was not a mouse-like one\n    // (e.g. focus to open, then hover over the reference element).\n    // Only apply if the event exists.\n    if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {\n      return;\n    }\n    refs.setPositionReference(createVirtualElement(domReference, {\n      x,\n      y,\n      axis,\n      dataRef,\n      pointerType\n    }));\n  });\n  const handleReferenceEnterOrMove = useEffectEvent(event => {\n    if (x != null || y != null) return;\n    if (!open) {\n      setReference(event.clientX, event.clientY);\n    } else if (!cleanupListenerRef.current) {\n      // If there's no cleanup, there's no listener, but we want to ensure\n      // we add the listener if the cursor landed on the floating element and\n      // then back on the reference (i.e. it's interactive).\n      setReactive([]);\n    }\n  });\n\n  // If the pointer is a mouse-like pointer, we want to continue following the\n  // mouse even if the floating element is transitioning out. On touch\n  // devices, this is undesirable because the floating element will move to\n  // the dismissal touch point.\n  const openCheck = isMouseLikePointerType(pointerType) ? floating : open;\n  const addListener = React.useCallback(() => {\n    // Explicitly specified `x`/`y` coordinates shouldn't add a listener.\n    if (!openCheck || !enabled || x != null || y != null) return;\n    const win = getWindow(floating);\n    function handleMouseMove(event) {\n      const target = getTarget(event);\n      if (!contains(floating, target)) {\n        setReference(event.clientX, event.clientY);\n      } else {\n        win.removeEventListener('mousemove', handleMouseMove);\n        cleanupListenerRef.current = null;\n      }\n    }\n    if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {\n      win.addEventListener('mousemove', handleMouseMove);\n      const cleanup = () => {\n        win.removeEventListener('mousemove', handleMouseMove);\n        cleanupListenerRef.current = null;\n      };\n      cleanupListenerRef.current = cleanup;\n      return cleanup;\n    }\n    refs.setPositionReference(domReference);\n  }, [openCheck, enabled, x, y, floating, dataRef, refs, domReference, setReference]);\n  React.useEffect(() => {\n    return addListener();\n  }, [addListener, reactive]);\n  React.useEffect(() => {\n    if (enabled && !floating) {\n      initialRef.current = false;\n    }\n  }, [enabled, floating]);\n  React.useEffect(() => {\n    if (!enabled && open) {\n      initialRef.current = true;\n    }\n  }, [enabled, open]);\n  index(() => {\n    if (enabled && (x != null || y != null)) {\n      initialRef.current = false;\n      setReference(x, y);\n    }\n  }, [enabled, x, y, setReference]);\n  const reference = React.useMemo(() => {\n    function setPointerTypeRef(_ref) {\n      let {\n        pointerType\n      } = _ref;\n      setPointerType(pointerType);\n    }\n    return {\n      onPointerDown: setPointerTypeRef,\n      onPointerEnter: setPointerTypeRef,\n      onMouseMove: handleReferenceEnterOrMove,\n      onMouseEnter: handleReferenceEnterOrMove\n    };\n  }, [handleReferenceEnterOrMove]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nconst bubbleHandlerKeys = {\n  pointerdown: 'onPointerDown',\n  mousedown: 'onMouseDown',\n  click: 'onClick'\n};\nconst captureHandlerKeys = {\n  pointerdown: 'onPointerDownCapture',\n  mousedown: 'onMouseDownCapture',\n  click: 'onClickCapture'\n};\nconst normalizeProp = normalizable => {\n  var _normalizable$escapeK, _normalizable$outside;\n  return {\n    escapeKey: typeof normalizable === 'boolean' ? normalizable : (_normalizable$escapeK = normalizable == null ? void 0 : normalizable.escapeKey) != null ? _normalizable$escapeK : false,\n    outsidePress: typeof normalizable === 'boolean' ? normalizable : (_normalizable$outside = normalizable == null ? void 0 : normalizable.outsidePress) != null ? _normalizable$outside : true\n  };\n};\n/**\n * Closes the floating element when a dismissal is requested — by default, when\n * the user presses the `escape` key or outside of the floating element.\n * @see https://floating-ui.com/docs/useDismiss\n */\nfunction useDismiss(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    elements,\n    dataRef\n  } = context;\n  const {\n    enabled = true,\n    escapeKey = true,\n    outsidePress: unstable_outsidePress = true,\n    outsidePressEvent = 'pointerdown',\n    referencePress = false,\n    referencePressEvent = 'pointerdown',\n    ancestorScroll = false,\n    bubbles,\n    capture\n  } = props;\n  const tree = useFloatingTree();\n  const outsidePressFn = useEffectEvent(typeof unstable_outsidePress === 'function' ? unstable_outsidePress : () => false);\n  const outsidePress = typeof unstable_outsidePress === 'function' ? outsidePressFn : unstable_outsidePress;\n  const insideReactTreeRef = React.useRef(false);\n  const endedOrStartedInsideRef = React.useRef(false);\n  const {\n    escapeKey: escapeKeyBubbles,\n    outsidePress: outsidePressBubbles\n  } = normalizeProp(bubbles);\n  const {\n    escapeKey: escapeKeyCapture,\n    outsidePress: outsidePressCapture\n  } = normalizeProp(capture);\n  const isComposingRef = React.useRef(false);\n  const closeOnEscapeKeyDown = useEffectEvent(event => {\n    var _dataRef$current$floa;\n    if (!open || !enabled || !escapeKey || event.key !== 'Escape') {\n      return;\n    }\n\n    // Wait until IME is settled. Pressing `Escape` while composing should\n    // close the compose menu, but not the floating element.\n    if (isComposingRef.current) {\n      return;\n    }\n    const nodeId = (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n    const children = tree ? getChildren(tree.nodesRef.current, nodeId) : [];\n    if (!escapeKeyBubbles) {\n      event.stopPropagation();\n      if (children.length > 0) {\n        let shouldDismiss = true;\n        children.forEach(child => {\n          var _child$context;\n          if ((_child$context = child.context) != null && _child$context.open && !child.context.dataRef.current.__escapeKeyBubbles) {\n            shouldDismiss = false;\n            return;\n          }\n        });\n        if (!shouldDismiss) {\n          return;\n        }\n      }\n    }\n    onOpenChange(false, isReactEvent(event) ? event.nativeEvent : event, 'escape-key');\n  });\n  const closeOnEscapeKeyDownCapture = useEffectEvent(event => {\n    var _getTarget2;\n    const callback = () => {\n      var _getTarget;\n      closeOnEscapeKeyDown(event);\n      (_getTarget = getTarget(event)) == null || _getTarget.removeEventListener('keydown', callback);\n    };\n    (_getTarget2 = getTarget(event)) == null || _getTarget2.addEventListener('keydown', callback);\n  });\n  const closeOnPressOutside = useEffectEvent(event => {\n    var _dataRef$current$floa2;\n    // Given developers can stop the propagation of the synthetic event,\n    // we can only be confident with a positive value.\n    const insideReactTree = insideReactTreeRef.current;\n    insideReactTreeRef.current = false;\n\n    // When click outside is lazy (`click` event), handle dragging.\n    // Don't close if:\n    // - The click started inside the floating element.\n    // - The click ended inside the floating element.\n    const endedOrStartedInside = endedOrStartedInsideRef.current;\n    endedOrStartedInsideRef.current = false;\n    if (outsidePressEvent === 'click' && endedOrStartedInside) {\n      return;\n    }\n    if (insideReactTree) {\n      return;\n    }\n    if (typeof outsidePress === 'function' && !outsidePress(event)) {\n      return;\n    }\n    const target = getTarget(event);\n    const inertSelector = \"[\" + createAttribute('inert') + \"]\";\n    const markers = getDocument(elements.floating).querySelectorAll(inertSelector);\n    let targetRootAncestor = isElement(target) ? target : null;\n    while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {\n      const nextParent = getParentNode(targetRootAncestor);\n      if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {\n        break;\n      }\n      targetRootAncestor = nextParent;\n    }\n\n    // Check if the click occurred on a third-party element injected after the\n    // floating element rendered.\n    if (markers.length && isElement(target) && !isRootElement(target) &&\n    // Clicked on a direct ancestor (e.g. FloatingOverlay).\n    !contains(target, elements.floating) &&\n    // If the target root element contains none of the markers, then the\n    // element was injected after the floating element rendered.\n    Array.from(markers).every(marker => !contains(targetRootAncestor, marker))) {\n      return;\n    }\n\n    // Check if the click occurred on the scrollbar\n    if (isHTMLElement(target) && floating) {\n      // In Firefox, `target.scrollWidth > target.clientWidth` for inline\n      // elements.\n      const canScrollX = target.clientWidth > 0 && target.scrollWidth > target.clientWidth;\n      const canScrollY = target.clientHeight > 0 && target.scrollHeight > target.clientHeight;\n      let xCond = canScrollY && event.offsetX > target.clientWidth;\n\n      // In some browsers it is possible to change the <body> (or window)\n      // scrollbar to the left side, but is very rare and is difficult to\n      // check for. Plus, for modal dialogs with backdrops, it is more\n      // important that the backdrop is checked but not so much the window.\n      if (canScrollY) {\n        const isRTL = getComputedStyle(target).direction === 'rtl';\n        if (isRTL) {\n          xCond = event.offsetX <= target.offsetWidth - target.clientWidth;\n        }\n      }\n      if (xCond || canScrollX && event.offsetY > target.clientHeight) {\n        return;\n      }\n    }\n    const nodeId = (_dataRef$current$floa2 = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa2.nodeId;\n    const targetIsInsideChildren = tree && getChildren(tree.nodesRef.current, nodeId).some(node => {\n      var _node$context;\n      return isEventTargetWithin(event, (_node$context = node.context) == null ? void 0 : _node$context.elements.floating);\n    });\n    if (isEventTargetWithin(event, elements.floating) || isEventTargetWithin(event, elements.domReference) || targetIsInsideChildren) {\n      return;\n    }\n    const children = tree ? getChildren(tree.nodesRef.current, nodeId) : [];\n    if (children.length > 0) {\n      let shouldDismiss = true;\n      children.forEach(child => {\n        var _child$context2;\n        if ((_child$context2 = child.context) != null && _child$context2.open && !child.context.dataRef.current.__outsidePressBubbles) {\n          shouldDismiss = false;\n          return;\n        }\n      });\n      if (!shouldDismiss) {\n        return;\n      }\n    }\n    onOpenChange(false, event, 'outside-press');\n  });\n  const closeOnPressOutsideCapture = useEffectEvent(event => {\n    var _getTarget4;\n    const callback = () => {\n      var _getTarget3;\n      closeOnPressOutside(event);\n      (_getTarget3 = getTarget(event)) == null || _getTarget3.removeEventListener(outsidePressEvent, callback);\n    };\n    (_getTarget4 = getTarget(event)) == null || _getTarget4.addEventListener(outsidePressEvent, callback);\n  });\n  React.useEffect(() => {\n    if (!open || !enabled) {\n      return;\n    }\n    dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;\n    dataRef.current.__outsidePressBubbles = outsidePressBubbles;\n    let compositionTimeout = -1;\n    function onScroll(event) {\n      onOpenChange(false, event, 'ancestor-scroll');\n    }\n    function handleCompositionStart() {\n      window.clearTimeout(compositionTimeout);\n      isComposingRef.current = true;\n    }\n    function handleCompositionEnd() {\n      // Safari fires `compositionend` before `keydown`, so we need to wait\n      // until the next tick to set `isComposing` to `false`.\n      // https://bugs.webkit.org/show_bug.cgi?id=165004\n      compositionTimeout = window.setTimeout(() => {\n        isComposingRef.current = false;\n      },\n      // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.\n      // Only apply to WebKit for the test to remain 0ms.\n      isWebKit() ? 5 : 0);\n    }\n    const doc = getDocument(elements.floating);\n    if (escapeKey) {\n      doc.addEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n      doc.addEventListener('compositionstart', handleCompositionStart);\n      doc.addEventListener('compositionend', handleCompositionEnd);\n    }\n    outsidePress && doc.addEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n    let ancestors = [];\n    if (ancestorScroll) {\n      if (isElement(elements.domReference)) {\n        ancestors = getOverflowAncestors(elements.domReference);\n      }\n      if (isElement(elements.floating)) {\n        ancestors = ancestors.concat(getOverflowAncestors(elements.floating));\n      }\n      if (!isElement(elements.reference) && elements.reference && elements.reference.contextElement) {\n        ancestors = ancestors.concat(getOverflowAncestors(elements.reference.contextElement));\n      }\n    }\n\n    // Ignore the visual viewport for scrolling dismissal (allow pinch-zoom)\n    ancestors = ancestors.filter(ancestor => {\n      var _doc$defaultView;\n      return ancestor !== ((_doc$defaultView = doc.defaultView) == null ? void 0 : _doc$defaultView.visualViewport);\n    });\n    ancestors.forEach(ancestor => {\n      ancestor.addEventListener('scroll', onScroll, {\n        passive: true\n      });\n    });\n    return () => {\n      if (escapeKey) {\n        doc.removeEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n        doc.removeEventListener('compositionstart', handleCompositionStart);\n        doc.removeEventListener('compositionend', handleCompositionEnd);\n      }\n      outsidePress && doc.removeEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n      ancestors.forEach(ancestor => {\n        ancestor.removeEventListener('scroll', onScroll);\n      });\n      window.clearTimeout(compositionTimeout);\n    };\n  }, [dataRef, elements, escapeKey, outsidePress, outsidePressEvent, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, escapeKeyCapture, closeOnEscapeKeyDownCapture, closeOnPressOutside, outsidePressCapture, closeOnPressOutsideCapture]);\n  React.useEffect(() => {\n    insideReactTreeRef.current = false;\n  }, [outsidePress, outsidePressEvent]);\n  const reference = React.useMemo(() => ({\n    onKeyDown: closeOnEscapeKeyDown,\n    [bubbleHandlerKeys[referencePressEvent]]: event => {\n      if (referencePress) {\n        onOpenChange(false, event.nativeEvent, 'reference-press');\n      }\n    }\n  }), [closeOnEscapeKeyDown, onOpenChange, referencePress, referencePressEvent]);\n  const floating = React.useMemo(() => ({\n    onKeyDown: closeOnEscapeKeyDown,\n    onMouseDown() {\n      endedOrStartedInsideRef.current = true;\n    },\n    onMouseUp() {\n      endedOrStartedInsideRef.current = true;\n    },\n    [captureHandlerKeys[outsidePressEvent]]: () => {\n      insideReactTreeRef.current = true;\n    }\n  }), [closeOnEscapeKeyDown, outsidePressEvent]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating\n  } : {}, [enabled, reference, floating]);\n}\n\nfunction useFloatingRootContext(options) {\n  const {\n    open = false,\n    onOpenChange: onOpenChangeProp,\n    elements: elementsProp\n  } = options;\n  const floatingId = useId();\n  const dataRef = React.useRef({});\n  const [events] = React.useState(() => createPubSub());\n  const nested = useFloatingParentNodeId() != null;\n  if (process.env.NODE_ENV !== \"production\") {\n    const optionDomReference = elementsProp.reference;\n    if (optionDomReference && !isElement(optionDomReference)) {\n      error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `refs.setPositionReference()`', 'instead.');\n    }\n  }\n  const [positionReference, setPositionReference] = React.useState(elementsProp.reference);\n  const onOpenChange = useEffectEvent((open, event, reason) => {\n    dataRef.current.openEvent = open ? event : undefined;\n    events.emit('openchange', {\n      open,\n      event,\n      reason,\n      nested\n    });\n    onOpenChangeProp == null || onOpenChangeProp(open, event, reason);\n  });\n  const refs = React.useMemo(() => ({\n    setPositionReference\n  }), []);\n  const elements = React.useMemo(() => ({\n    reference: positionReference || elementsProp.reference || null,\n    floating: elementsProp.floating || null,\n    domReference: elementsProp.reference\n  }), [positionReference, elementsProp.reference, elementsProp.floating]);\n  return React.useMemo(() => ({\n    dataRef,\n    open,\n    onOpenChange,\n    elements,\n    events,\n    floatingId,\n    refs\n  }), [open, onOpenChange, elements, events, floatingId, refs]);\n}\n\n/**\n * Provides data to position a floating element and context to add interactions.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    nodeId\n  } = options;\n  const internalRootContext = useFloatingRootContext({\n    ...options,\n    elements: {\n      reference: null,\n      floating: null,\n      ...options.elements\n    }\n  });\n  const rootContext = options.rootContext || internalRootContext;\n  const computedElements = rootContext.elements;\n  const [_domReference, setDomReference] = React.useState(null);\n  const [positionReference, _setPositionReference] = React.useState(null);\n  const optionDomReference = computedElements == null ? void 0 : computedElements.domReference;\n  const domReference = optionDomReference || _domReference;\n  const domReferenceRef = React.useRef(null);\n  const tree = useFloatingTree();\n  index(() => {\n    if (domReference) {\n      domReferenceRef.current = domReference;\n    }\n  }, [domReference]);\n  const position = useFloating$1({\n    ...options,\n    elements: {\n      ...computedElements,\n      ...(positionReference && {\n        reference: positionReference\n      })\n    }\n  });\n  const setPositionReference = React.useCallback(node => {\n    const computedPositionReference = isElement(node) ? {\n      getBoundingClientRect: () => node.getBoundingClientRect(),\n      contextElement: node\n    } : node;\n    // Store the positionReference in state if the DOM reference is specified externally via the\n    // `elements.reference` option. This ensures that it won't be overridden on future renders.\n    _setPositionReference(computedPositionReference);\n    position.refs.setReference(computedPositionReference);\n  }, [position.refs]);\n  const setReference = React.useCallback(node => {\n    if (isElement(node) || node === null) {\n      domReferenceRef.current = node;\n      setDomReference(node);\n    }\n\n    // Backwards-compatibility for passing a virtual element to `reference`\n    // after it has set the DOM reference.\n    if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||\n    // Don't allow setting virtual elements using the old technique back to\n    // `null` to support `positionReference` + an unstable `reference`\n    // callback ref.\n    node !== null && !isElement(node)) {\n      position.refs.setReference(node);\n    }\n  }, [position.refs]);\n  const refs = React.useMemo(() => ({\n    ...position.refs,\n    setReference,\n    setPositionReference,\n    domReference: domReferenceRef\n  }), [position.refs, setReference, setPositionReference]);\n  const elements = React.useMemo(() => ({\n    ...position.elements,\n    domReference: domReference\n  }), [position.elements, domReference]);\n  const context = React.useMemo(() => ({\n    ...position,\n    ...rootContext,\n    refs,\n    elements,\n    nodeId\n  }), [position, refs, elements, nodeId, rootContext]);\n  index(() => {\n    rootContext.dataRef.current.floatingContext = context;\n    const node = tree == null ? void 0 : tree.nodesRef.current.find(node => node.id === nodeId);\n    if (node) {\n      node.context = context;\n    }\n  });\n  return React.useMemo(() => ({\n    ...position,\n    context,\n    refs,\n    elements\n  }), [position, refs, elements, context]);\n}\n\n/**\n * Opens the floating element while the reference element has focus, like CSS\n * `:focus`.\n * @see https://floating-ui.com/docs/useFocus\n */\nfunction useFocus(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    onOpenChange,\n    events,\n    dataRef,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    visibleOnly = true\n  } = props;\n  const blockFocusRef = React.useRef(false);\n  const timeoutRef = React.useRef();\n  const keyboardModalityRef = React.useRef(true);\n  React.useEffect(() => {\n    if (!enabled) return;\n    const win = getWindow(elements.domReference);\n\n    // If the reference was focused and the user left the tab/window, and the\n    // floating element was not open, the focus should be blocked when they\n    // return to the tab/window.\n    function onBlur() {\n      if (!open && isHTMLElement(elements.domReference) && elements.domReference === activeElement(getDocument(elements.domReference))) {\n        blockFocusRef.current = true;\n      }\n    }\n    function onKeyDown() {\n      keyboardModalityRef.current = true;\n    }\n    win.addEventListener('blur', onBlur);\n    win.addEventListener('keydown', onKeyDown, true);\n    return () => {\n      win.removeEventListener('blur', onBlur);\n      win.removeEventListener('keydown', onKeyDown, true);\n    };\n  }, [elements.domReference, open, enabled]);\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onOpenChange(_ref) {\n      let {\n        reason\n      } = _ref;\n      if (reason === 'reference-press' || reason === 'escape-key') {\n        blockFocusRef.current = true;\n      }\n    }\n    events.on('openchange', onOpenChange);\n    return () => {\n      events.off('openchange', onOpenChange);\n    };\n  }, [events, enabled]);\n  React.useEffect(() => {\n    return () => {\n      clearTimeout(timeoutRef.current);\n    };\n  }, []);\n  const reference = React.useMemo(() => ({\n    onPointerDown(event) {\n      if (isVirtualPointerEvent(event.nativeEvent)) return;\n      keyboardModalityRef.current = false;\n    },\n    onMouseLeave() {\n      blockFocusRef.current = false;\n    },\n    onFocus(event) {\n      if (blockFocusRef.current) return;\n      const target = getTarget(event.nativeEvent);\n      if (visibleOnly && isElement(target)) {\n        try {\n          // Mac Safari unreliably matches `:focus-visible` on the reference\n          // if focus was outside the page initially - use the fallback\n          // instead.\n          if (isSafari() && isMac()) throw Error();\n          if (!target.matches(':focus-visible')) return;\n        } catch (e) {\n          // Old browsers will throw an error when using `:focus-visible`.\n          if (!keyboardModalityRef.current && !isTypeableElement(target)) {\n            return;\n          }\n        }\n      }\n      onOpenChange(true, event.nativeEvent, 'focus');\n    },\n    onBlur(event) {\n      blockFocusRef.current = false;\n      const relatedTarget = event.relatedTarget;\n      const nativeEvent = event.nativeEvent;\n\n      // Hit the non-modal focus management portal guard. Focus will be\n      // moved into the floating element immediately after.\n      const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';\n\n      // Wait for the window blur listener to fire.\n      timeoutRef.current = window.setTimeout(() => {\n        var _dataRef$current$floa;\n        const activeEl = activeElement(elements.domReference ? elements.domReference.ownerDocument : document);\n\n        // Focus left the page, keep it open.\n        if (!relatedTarget && activeEl === elements.domReference) return;\n\n        // When focusing the reference element (e.g. regular click), then\n        // clicking into the floating element, prevent it from hiding.\n        // Note: it must be focusable, e.g. `tabindex=\"-1\"`.\n        // We can not rely on relatedTarget to point to the correct element\n        // as it will only point to the shadow host of the newly focused element\n        // and not the element that actually has received focus if it is located\n        // inside a shadow root.\n        if (contains((_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.refs.floating.current, activeEl) || contains(elements.domReference, activeEl) || movedToFocusGuard) {\n          return;\n        }\n        onOpenChange(false, nativeEvent, 'focus');\n      });\n    }\n  }), [dataRef, elements.domReference, onOpenChange, visibleOnly]);\n  return React.useMemo(() => enabled ? {\n    reference\n  } : {}, [enabled, reference]);\n}\n\nconst ACTIVE_KEY = 'active';\nconst SELECTED_KEY = 'selected';\nfunction mergeProps(userProps, propsList, elementKey) {\n  const map = new Map();\n  const isItem = elementKey === 'item';\n  let domUserProps = userProps;\n  if (isItem && userProps) {\n    const {\n      [ACTIVE_KEY]: _,\n      [SELECTED_KEY]: __,\n      ...validProps\n    } = userProps;\n    domUserProps = validProps;\n  }\n  return {\n    ...(elementKey === 'floating' && {\n      tabIndex: -1,\n      [FOCUSABLE_ATTRIBUTE]: ''\n    }),\n    ...domUserProps,\n    ...propsList.map(value => {\n      const propsOrGetProps = value ? value[elementKey] : null;\n      if (typeof propsOrGetProps === 'function') {\n        return userProps ? propsOrGetProps(userProps) : null;\n      }\n      return propsOrGetProps;\n    }).concat(userProps).reduce((acc, props) => {\n      if (!props) {\n        return acc;\n      }\n      Object.entries(props).forEach(_ref => {\n        let [key, value] = _ref;\n        if (isItem && [ACTIVE_KEY, SELECTED_KEY].includes(key)) {\n          return;\n        }\n        if (key.indexOf('on') === 0) {\n          if (!map.has(key)) {\n            map.set(key, []);\n          }\n          if (typeof value === 'function') {\n            var _map$get;\n            (_map$get = map.get(key)) == null || _map$get.push(value);\n            acc[key] = function () {\n              var _map$get2;\n              for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n                args[_key] = arguments[_key];\n              }\n              return (_map$get2 = map.get(key)) == null ? void 0 : _map$get2.map(fn => fn(...args)).find(val => val !== undefined);\n            };\n          }\n        } else {\n          acc[key] = value;\n        }\n      });\n      return acc;\n    }, {})\n  };\n}\n/**\n * Merges an array of interaction hooks' props into prop getters, allowing\n * event handler functions to be composed together without overwriting one\n * another.\n * @see https://floating-ui.com/docs/useInteractions\n */\nfunction useInteractions(propsList) {\n  if (propsList === void 0) {\n    propsList = [];\n  }\n  const referenceDeps = propsList.map(key => key == null ? void 0 : key.reference);\n  const floatingDeps = propsList.map(key => key == null ? void 0 : key.floating);\n  const itemDeps = propsList.map(key => key == null ? void 0 : key.item);\n  const getReferenceProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'reference'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  referenceDeps);\n  const getFloatingProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'floating'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  floatingDeps);\n  const getItemProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'item'),\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  itemDeps);\n  return React.useMemo(() => ({\n    getReferenceProps,\n    getFloatingProps,\n    getItemProps\n  }), [getReferenceProps, getFloatingProps, getItemProps]);\n}\n\nlet isPreventScrollSupported = false;\nfunction doSwitch(orientation, vertical, horizontal) {\n  switch (orientation) {\n    case 'vertical':\n      return vertical;\n    case 'horizontal':\n      return horizontal;\n    default:\n      return vertical || horizontal;\n  }\n}\nfunction isMainOrientationKey(key, orientation) {\n  const vertical = key === ARROW_UP || key === ARROW_DOWN;\n  const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n  return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n  const vertical = key === ARROW_DOWN;\n  const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n  return doSwitch(orientation, vertical, horizontal) || key === 'Enter' || key === ' ' || key === '';\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n  const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n  const horizontal = key === ARROW_DOWN;\n  return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl) {\n  const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n  const horizontal = key === ARROW_UP;\n  return doSwitch(orientation, vertical, horizontal);\n}\n/**\n * Adds arrow key-based navigation of a list of items, either using real DOM\n * focus or virtual focus.\n * @see https://floating-ui.com/docs/useListNavigation\n */\nfunction useListNavigation(context, props) {\n  const {\n    open,\n    onOpenChange,\n    elements\n  } = context;\n  const {\n    listRef,\n    activeIndex,\n    onNavigate: unstable_onNavigate = () => {},\n    enabled = true,\n    selectedIndex = null,\n    allowEscape = false,\n    loop = false,\n    nested = false,\n    rtl = false,\n    virtual = false,\n    focusItemOnOpen = 'auto',\n    focusItemOnHover = true,\n    openOnArrowKeyDown = true,\n    disabledIndices = undefined,\n    orientation = 'vertical',\n    cols = 1,\n    scrollItemIntoView = true,\n    virtualItemRef,\n    itemSizes,\n    dense = false\n  } = props;\n  if (process.env.NODE_ENV !== \"production\") {\n    if (allowEscape) {\n      if (!loop) {\n        warn('`useListNavigation` looping must be enabled to allow escaping.');\n      }\n      if (!virtual) {\n        warn('`useListNavigation` must be virtual to allow escaping.');\n      }\n    }\n    if (orientation === 'vertical' && cols > 1) {\n      warn('In grid list navigation mode (`cols` > 1), the `orientation` should', 'be either \"horizontal\" or \"both\".');\n    }\n  }\n  const floatingFocusElement = getFloatingFocusElement(elements.floating);\n  const floatingFocusElementRef = useLatestRef(floatingFocusElement);\n  const parentId = useFloatingParentNodeId();\n  const tree = useFloatingTree();\n  const onNavigate = useEffectEvent(unstable_onNavigate);\n  const typeableComboboxReference = isTypeableCombobox(elements.domReference);\n  const focusItemOnOpenRef = React.useRef(focusItemOnOpen);\n  const indexRef = React.useRef(selectedIndex != null ? selectedIndex : -1);\n  const keyRef = React.useRef(null);\n  const isPointerModalityRef = React.useRef(true);\n  const previousOnNavigateRef = React.useRef(onNavigate);\n  const previousMountedRef = React.useRef(!!elements.floating);\n  const previousOpenRef = React.useRef(open);\n  const forceSyncFocus = React.useRef(false);\n  const forceScrollIntoViewRef = React.useRef(false);\n  const disabledIndicesRef = useLatestRef(disabledIndices);\n  const latestOpenRef = useLatestRef(open);\n  const scrollItemIntoViewRef = useLatestRef(scrollItemIntoView);\n  const selectedIndexRef = useLatestRef(selectedIndex);\n  const [activeId, setActiveId] = React.useState();\n  const [virtualId, setVirtualId] = React.useState();\n  const focusItem = useEffectEvent(function (listRef, indexRef, forceScrollIntoView) {\n    if (forceScrollIntoView === void 0) {\n      forceScrollIntoView = false;\n    }\n    function runFocus(item) {\n      if (virtual) {\n        setActiveId(item.id);\n        tree == null || tree.events.emit('virtualfocus', item);\n        if (virtualItemRef) {\n          virtualItemRef.current = item;\n        }\n      } else {\n        enqueueFocus(item, {\n          preventScroll: true,\n          // Mac Safari does not move the virtual cursor unless the focus call\n          // is sync. However, for the very first focus call, we need to wait\n          // for the position to be ready in order to prevent unwanted\n          // scrolling. This means the virtual cursor will not move to the first\n          // item when first opening the floating element, but will on\n          // subsequent calls. `preventScroll` is supported in modern Safari,\n          // so we can use that instead.\n          // iOS Safari must be async or the first item will not be focused.\n          sync: isMac() && isSafari() ? isPreventScrollSupported || forceSyncFocus.current : false\n        });\n      }\n    }\n    const initialItem = listRef.current[indexRef.current];\n    if (initialItem) {\n      runFocus(initialItem);\n    }\n    requestAnimationFrame(() => {\n      const waitedItem = listRef.current[indexRef.current] || initialItem;\n      if (!waitedItem) return;\n      if (!initialItem) {\n        runFocus(waitedItem);\n      }\n      const scrollIntoViewOptions = scrollItemIntoViewRef.current;\n      const shouldScrollIntoView = scrollIntoViewOptions && item && (forceScrollIntoView || !isPointerModalityRef.current);\n      if (shouldScrollIntoView) {\n        // JSDOM doesn't support `.scrollIntoView()` but it's widely supported\n        // by all browsers.\n        waitedItem.scrollIntoView == null || waitedItem.scrollIntoView(typeof scrollIntoViewOptions === 'boolean' ? {\n          block: 'nearest',\n          inline: 'nearest'\n        } : scrollIntoViewOptions);\n      }\n    });\n  });\n  index(() => {\n    document.createElement('div').focus({\n      get preventScroll() {\n        isPreventScrollSupported = true;\n        return false;\n      }\n    });\n  }, []);\n\n  // Sync `selectedIndex` to be the `activeIndex` upon opening the floating\n  // element. Also, reset `activeIndex` upon closing the floating element.\n  index(() => {\n    if (!enabled) return;\n    if (open && elements.floating) {\n      if (focusItemOnOpenRef.current && selectedIndex != null) {\n        // Regardless of the pointer modality, we want to ensure the selected\n        // item comes into view when the floating element is opened.\n        forceScrollIntoViewRef.current = true;\n        indexRef.current = selectedIndex;\n        onNavigate(selectedIndex);\n      }\n    } else if (previousMountedRef.current) {\n      // Since the user can specify `onNavigate` conditionally\n      // (onNavigate: open ? setActiveIndex : setSelectedIndex),\n      // we store and call the previous function.\n      indexRef.current = -1;\n      previousOnNavigateRef.current(null);\n    }\n  }, [enabled, open, elements.floating, selectedIndex, onNavigate]);\n\n  // Sync `activeIndex` to be the focused item while the floating element is\n  // open.\n  index(() => {\n    if (!enabled) return;\n    if (open && elements.floating) {\n      if (activeIndex == null) {\n        forceSyncFocus.current = false;\n        if (selectedIndexRef.current != null) {\n          return;\n        }\n\n        // Reset while the floating element was open (e.g. the list changed).\n        if (previousMountedRef.current) {\n          indexRef.current = -1;\n          focusItem(listRef, indexRef);\n        }\n\n        // Initial sync.\n        if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n          let runs = 0;\n          const waitForListPopulated = () => {\n            if (listRef.current[0] == null) {\n              // Avoid letting the browser paint if possible on the first try,\n              // otherwise use rAF. Don't try more than twice, since something\n              // is wrong otherwise.\n              if (runs < 2) {\n                const scheduler = runs ? requestAnimationFrame : queueMicrotask;\n                scheduler(waitForListPopulated);\n              }\n              runs++;\n            } else {\n              indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinIndex(listRef, disabledIndicesRef.current) : getMaxIndex(listRef, disabledIndicesRef.current);\n              keyRef.current = null;\n              onNavigate(indexRef.current);\n            }\n          };\n          waitForListPopulated();\n        }\n      } else if (!isIndexOutOfBounds(listRef, activeIndex)) {\n        indexRef.current = activeIndex;\n        focusItem(listRef, indexRef, forceScrollIntoViewRef.current);\n        forceScrollIntoViewRef.current = false;\n      }\n    }\n  }, [enabled, open, elements.floating, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, disabledIndicesRef]);\n\n  // Ensure the parent floating element has focus when a nested child closes\n  // to allow arrow key navigation to work after the pointer leaves the child.\n  index(() => {\n    var _nodes$find;\n    if (!enabled || elements.floating || !tree || virtual || !previousMountedRef.current) {\n      return;\n    }\n    const nodes = tree.nodesRef.current;\n    const parent = (_nodes$find = nodes.find(node => node.id === parentId)) == null || (_nodes$find = _nodes$find.context) == null ? void 0 : _nodes$find.elements.floating;\n    const activeEl = activeElement(getDocument(elements.floating));\n    const treeContainsActiveEl = nodes.some(node => node.context && contains(node.context.elements.floating, activeEl));\n    if (parent && !treeContainsActiveEl && isPointerModalityRef.current) {\n      parent.focus({\n        preventScroll: true\n      });\n    }\n  }, [enabled, elements.floating, tree, parentId, virtual]);\n  index(() => {\n    if (!enabled) return;\n    if (!tree) return;\n    if (!virtual) return;\n    if (parentId) return;\n    function handleVirtualFocus(item) {\n      setVirtualId(item.id);\n      if (virtualItemRef) {\n        virtualItemRef.current = item;\n      }\n    }\n    tree.events.on('virtualfocus', handleVirtualFocus);\n    return () => {\n      tree.events.off('virtualfocus', handleVirtualFocus);\n    };\n  }, [enabled, tree, virtual, parentId, virtualItemRef]);\n  index(() => {\n    previousOnNavigateRef.current = onNavigate;\n    previousMountedRef.current = !!elements.floating;\n  });\n  index(() => {\n    if (!open) {\n      keyRef.current = null;\n    }\n  }, [open]);\n  index(() => {\n    previousOpenRef.current = open;\n  }, [open]);\n  const hasActiveIndex = activeIndex != null;\n  const item = React.useMemo(() => {\n    function syncCurrentTarget(currentTarget) {\n      if (!open) return;\n      const index = listRef.current.indexOf(currentTarget);\n      if (index !== -1) {\n        onNavigate(index);\n      }\n    }\n    const props = {\n      onFocus(_ref) {\n        let {\n          currentTarget\n        } = _ref;\n        syncCurrentTarget(currentTarget);\n      },\n      onClick: _ref2 => {\n        let {\n          currentTarget\n        } = _ref2;\n        return currentTarget.focus({\n          preventScroll: true\n        });\n      },\n      // Safari\n      ...(focusItemOnHover && {\n        onMouseMove(_ref3) {\n          let {\n            currentTarget\n          } = _ref3;\n          syncCurrentTarget(currentTarget);\n        },\n        onPointerLeave(_ref4) {\n          let {\n            pointerType\n          } = _ref4;\n          if (!isPointerModalityRef.current || pointerType === 'touch') {\n            return;\n          }\n          indexRef.current = -1;\n          focusItem(listRef, indexRef);\n          onNavigate(null);\n          if (!virtual) {\n            enqueueFocus(floatingFocusElementRef.current, {\n              preventScroll: true\n            });\n          }\n        }\n      })\n    };\n    return props;\n  }, [open, floatingFocusElementRef, focusItem, focusItemOnHover, listRef, onNavigate, virtual]);\n  const commonOnKeyDown = useEffectEvent(event => {\n    isPointerModalityRef.current = false;\n    forceSyncFocus.current = true;\n\n    // When composing a character, Chrome fires ArrowDown twice. Firefox/Safari\n    // don't appear to suffer from this. `event.isComposing` is avoided due to\n    // Safari not supporting it properly (although it's not needed in the first\n    // place for Safari, just avoiding any possible issues).\n    if (event.which === 229) {\n      return;\n    }\n\n    // If the floating element is animating out, ignore navigation. Otherwise,\n    // the `activeIndex` gets set to 0 despite not being open so the next time\n    // the user ArrowDowns, the first item won't be focused.\n    if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) {\n      return;\n    }\n    if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl)) {\n      stopEvent(event);\n      onOpenChange(false, event.nativeEvent, 'list-navigation');\n      if (isHTMLElement(elements.domReference)) {\n        if (virtual) {\n          tree == null || tree.events.emit('virtualfocus', elements.domReference);\n        } else {\n          elements.domReference.focus();\n        }\n      }\n      return;\n    }\n    const currentIndex = indexRef.current;\n    const minIndex = getMinIndex(listRef, disabledIndices);\n    const maxIndex = getMaxIndex(listRef, disabledIndices);\n    if (!typeableComboboxReference) {\n      if (event.key === 'Home') {\n        stopEvent(event);\n        indexRef.current = minIndex;\n        onNavigate(indexRef.current);\n      }\n      if (event.key === 'End') {\n        stopEvent(event);\n        indexRef.current = maxIndex;\n        onNavigate(indexRef.current);\n      }\n    }\n\n    // Grid navigation.\n    if (cols > 1) {\n      const sizes = itemSizes || Array.from({\n        length: listRef.current.length\n      }, () => ({\n        width: 1,\n        height: 1\n      }));\n      // To calculate movements on the grid, we use hypothetical cell indices\n      // as if every item was 1x1, then convert back to real indices.\n      const cellMap = buildCellMap(sizes, cols, dense);\n      const minGridIndex = cellMap.findIndex(index => index != null && !isDisabled(listRef.current, index, disabledIndices));\n      // last enabled index\n      const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isDisabled(listRef.current, index, disabledIndices) ? cellIndex : foundIndex, -1);\n      const index = cellMap[getGridNavigatedIndex({\n        current: cellMap.map(itemIndex => itemIndex != null ? listRef.current[itemIndex] : null)\n      }, {\n        event,\n        orientation,\n        loop,\n        rtl,\n        cols,\n        // treat undefined (empty grid spaces) as disabled indices so we\n        // don't end up in them\n        disabledIndices: getCellIndices([...(disabledIndices || listRef.current.map((_, index) => isDisabled(listRef.current, index) ? index : undefined)), undefined], cellMap),\n        minIndex: minGridIndex,\n        maxIndex: maxGridIndex,\n        prevIndex: getCellIndexOfCorner(indexRef.current > maxIndex ? minIndex : indexRef.current, sizes, cellMap, cols,\n        // use a corner matching the edge closest to the direction\n        // we're moving in so we don't end up in the same item. Prefer\n        // top/left over bottom/right.\n        event.key === ARROW_DOWN ? 'bl' : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? 'tr' : 'tl'),\n        stopEvent: true\n      })];\n      if (index != null) {\n        indexRef.current = index;\n        onNavigate(indexRef.current);\n      }\n      if (orientation === 'both') {\n        return;\n      }\n    }\n    if (isMainOrientationKey(event.key, orientation)) {\n      stopEvent(event);\n\n      // Reset the index if no item is focused.\n      if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n        indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n        onNavigate(indexRef.current);\n        return;\n      }\n      if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n        if (loop) {\n          indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledIndex(listRef, {\n            startingIndex: currentIndex,\n            disabledIndices\n          });\n        } else {\n          indexRef.current = Math.min(maxIndex, findNonDisabledIndex(listRef, {\n            startingIndex: currentIndex,\n            disabledIndices\n          }));\n        }\n      } else {\n        if (loop) {\n          indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledIndex(listRef, {\n            startingIndex: currentIndex,\n            decrement: true,\n            disabledIndices\n          });\n        } else {\n          indexRef.current = Math.max(minIndex, findNonDisabledIndex(listRef, {\n            startingIndex: currentIndex,\n            decrement: true,\n            disabledIndices\n          }));\n        }\n      }\n      if (isIndexOutOfBounds(listRef, indexRef.current)) {\n        onNavigate(null);\n      } else {\n        onNavigate(indexRef.current);\n      }\n    }\n  });\n  const ariaActiveDescendantProp = React.useMemo(() => {\n    return virtual && open && hasActiveIndex && {\n      'aria-activedescendant': virtualId || activeId\n    };\n  }, [virtual, open, hasActiveIndex, virtualId, activeId]);\n  const floating = React.useMemo(() => {\n    return {\n      'aria-orientation': orientation === 'both' ? undefined : orientation,\n      ...(!isTypeableCombobox(elements.domReference) && ariaActiveDescendantProp),\n      onKeyDown: commonOnKeyDown,\n      onPointerMove() {\n        isPointerModalityRef.current = true;\n      }\n    };\n  }, [ariaActiveDescendantProp, commonOnKeyDown, elements.domReference, orientation]);\n  const reference = React.useMemo(() => {\n    function checkVirtualMouse(event) {\n      if (focusItemOnOpen === 'auto' && isVirtualClick(event.nativeEvent)) {\n        focusItemOnOpenRef.current = true;\n      }\n    }\n    function checkVirtualPointer(event) {\n      // `pointerdown` fires first, reset the state then perform the checks.\n      focusItemOnOpenRef.current = focusItemOnOpen;\n      if (focusItemOnOpen === 'auto' && isVirtualPointerEvent(event.nativeEvent)) {\n        focusItemOnOpenRef.current = true;\n      }\n    }\n    return {\n      ...ariaActiveDescendantProp,\n      onKeyDown(event) {\n        isPointerModalityRef.current = false;\n        const isArrowKey = event.key.startsWith('Arrow');\n        const isHomeOrEndKey = ['Home', 'End'].includes(event.key);\n        const isMoveKey = isArrowKey || isHomeOrEndKey;\n        const isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n        const isCrossCloseKey = isCrossOrientationCloseKey(event.key, orientation, rtl);\n        const isMainKey = isMainOrientationKey(event.key, orientation);\n        const isNavigationKey = (nested ? isCrossOpenKey : isMainKey) || event.key === 'Enter' || event.key.trim() === '';\n        if (virtual && open) {\n          const rootNode = tree == null ? void 0 : tree.nodesRef.current.find(node => node.parentId == null);\n          const deepestNode = tree && rootNode ? getDeepestNode(tree.nodesRef.current, rootNode.id) : null;\n          if (isMoveKey && deepestNode && virtualItemRef) {\n            const eventObject = new KeyboardEvent('keydown', {\n              key: event.key,\n              bubbles: true\n            });\n            if (isCrossOpenKey || isCrossCloseKey) {\n              var _deepestNode$context, _deepestNode$context2;\n              const isCurrentTarget = ((_deepestNode$context = deepestNode.context) == null ? void 0 : _deepestNode$context.elements.domReference) === event.currentTarget;\n              const dispatchItem = isCrossCloseKey && !isCurrentTarget ? (_deepestNode$context2 = deepestNode.context) == null ? void 0 : _deepestNode$context2.elements.domReference : isCrossOpenKey ? listRef.current.find(item => (item == null ? void 0 : item.id) === activeId) : null;\n              if (dispatchItem) {\n                stopEvent(event);\n                dispatchItem.dispatchEvent(eventObject);\n                setVirtualId(undefined);\n              }\n            }\n            if ((isMainKey || isHomeOrEndKey) && deepestNode.context) {\n              if (deepestNode.context.open && deepestNode.parentId && event.currentTarget !== deepestNode.context.elements.domReference) {\n                var _deepestNode$context$;\n                stopEvent(event);\n                (_deepestNode$context$ = deepestNode.context.elements.domReference) == null || _deepestNode$context$.dispatchEvent(eventObject);\n                return;\n              }\n            }\n          }\n          return commonOnKeyDown(event);\n        }\n\n        // If a floating element should not open on arrow key down, avoid\n        // setting `activeIndex` while it's closed.\n        if (!open && !openOnArrowKeyDown && isArrowKey) {\n          return;\n        }\n        if (isNavigationKey) {\n          keyRef.current = nested && isMainKey ? null : event.key;\n        }\n        if (nested) {\n          if (isCrossOpenKey) {\n            stopEvent(event);\n            if (open) {\n              indexRef.current = getMinIndex(listRef, disabledIndicesRef.current);\n              onNavigate(indexRef.current);\n            } else {\n              onOpenChange(true, event.nativeEvent, 'list-navigation');\n            }\n          }\n          return;\n        }\n        if (isMainKey) {\n          if (selectedIndex != null) {\n            indexRef.current = selectedIndex;\n          }\n          stopEvent(event);\n          if (!open && openOnArrowKeyDown) {\n            onOpenChange(true, event.nativeEvent, 'list-navigation');\n          } else {\n            commonOnKeyDown(event);\n          }\n          if (open) {\n            onNavigate(indexRef.current);\n          }\n        }\n      },\n      onFocus() {\n        if (open && !virtual) {\n          onNavigate(null);\n        }\n      },\n      onPointerDown: checkVirtualPointer,\n      onMouseDown: checkVirtualMouse,\n      onClick: checkVirtualMouse\n    };\n  }, [activeId, ariaActiveDescendantProp, commonOnKeyDown, disabledIndicesRef, focusItemOnOpen, listRef, nested, onNavigate, onOpenChange, open, openOnArrowKeyDown, orientation, rtl, selectedIndex, tree, virtual, virtualItemRef]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating,\n    item\n  } : {}, [enabled, reference, floating, item]);\n}\n\nconst componentRoleToAriaRoleMap = /*#__PURE__*/new Map([['select', 'listbox'], ['combobox', 'listbox'], ['label', false]]);\n\n/**\n * Adds base screen reader props to the reference and floating elements for a\n * given floating element `role`.\n * @see https://floating-ui.com/docs/useRole\n */\nfunction useRole(context, props) {\n  var _componentRoleToAriaR;\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    floatingId\n  } = context;\n  const {\n    enabled = true,\n    role = 'dialog'\n  } = props;\n  const ariaRole = (_componentRoleToAriaR = componentRoleToAriaRoleMap.get(role)) != null ? _componentRoleToAriaR : role;\n  const referenceId = useId();\n  const parentId = useFloatingParentNodeId();\n  const isNested = parentId != null;\n  const reference = React.useMemo(() => {\n    if (ariaRole === 'tooltip' || role === 'label') {\n      return {\n        [\"aria-\" + (role === 'label' ? 'labelledby' : 'describedby')]: open ? floatingId : undefined\n      };\n    }\n    return {\n      'aria-expanded': open ? 'true' : 'false',\n      'aria-haspopup': ariaRole === 'alertdialog' ? 'dialog' : ariaRole,\n      'aria-controls': open ? floatingId : undefined,\n      ...(ariaRole === 'listbox' && {\n        role: 'combobox'\n      }),\n      ...(ariaRole === 'menu' && {\n        id: referenceId\n      }),\n      ...(ariaRole === 'menu' && isNested && {\n        role: 'menuitem'\n      }),\n      ...(role === 'select' && {\n        'aria-autocomplete': 'none'\n      }),\n      ...(role === 'combobox' && {\n        'aria-autocomplete': 'list'\n      })\n    };\n  }, [ariaRole, floatingId, isNested, open, referenceId, role]);\n  const floating = React.useMemo(() => {\n    const floatingProps = {\n      id: floatingId,\n      ...(ariaRole && {\n        role: ariaRole\n      })\n    };\n    if (ariaRole === 'tooltip' || role === 'label') {\n      return floatingProps;\n    }\n    return {\n      ...floatingProps,\n      ...(ariaRole === 'menu' && {\n        'aria-labelledby': referenceId\n      })\n    };\n  }, [ariaRole, floatingId, referenceId, role]);\n  const item = React.useCallback(_ref => {\n    let {\n      active,\n      selected\n    } = _ref;\n    const commonProps = {\n      role: 'option',\n      ...(active && {\n        id: floatingId + \"-option\"\n      })\n    };\n\n    // For `menu`, we are unable to tell if the item is a `menuitemradio`\n    // or `menuitemcheckbox`. For backwards-compatibility reasons, also\n    // avoid defaulting to `menuitem` as it may overwrite custom role props.\n    switch (role) {\n      case 'select':\n        return {\n          ...commonProps,\n          'aria-selected': active && selected\n        };\n      case 'combobox':\n        {\n          return {\n            ...commonProps,\n            ...(active && {\n              'aria-selected': true\n            })\n          };\n        }\n    }\n    return {};\n  }, [floatingId, role]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating,\n    item\n  } : {}, [enabled, reference, floating, item]);\n}\n\n// Converts a JS style key like `backgroundColor` to a CSS transition-property\n// like `background-color`.\nconst camelCaseToKebabCase = str => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\nfunction execWithArgsOrReturn(valueOrFn, args) {\n  return typeof valueOrFn === 'function' ? valueOrFn(args) : valueOrFn;\n}\nfunction useDelayUnmount(open, durationMs) {\n  const [isMounted, setIsMounted] = React.useState(open);\n  if (open && !isMounted) {\n    setIsMounted(true);\n  }\n  React.useEffect(() => {\n    if (!open && isMounted) {\n      const timeout = setTimeout(() => setIsMounted(false), durationMs);\n      return () => clearTimeout(timeout);\n    }\n  }, [open, isMounted, durationMs]);\n  return isMounted;\n}\n/**\n * Provides a status string to apply CSS transitions to a floating element,\n * correctly handling placement-aware transitions.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstatus\n */\nfunction useTransitionStatus(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    open,\n    elements: {\n      floating\n    }\n  } = context;\n  const {\n    duration = 250\n  } = props;\n  const isNumberDuration = typeof duration === 'number';\n  const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n  const [status, setStatus] = React.useState('unmounted');\n  const isMounted = useDelayUnmount(open, closeDuration);\n  if (!isMounted && status === 'close') {\n    setStatus('unmounted');\n  }\n  index(() => {\n    if (!floating) return;\n    if (open) {\n      setStatus('initial');\n      const frame = requestAnimationFrame(() => {\n        setStatus('open');\n      });\n      return () => {\n        cancelAnimationFrame(frame);\n      };\n    }\n    setStatus('close');\n  }, [open, floating]);\n  return {\n    isMounted,\n    status\n  };\n}\n/**\n * Provides styles to apply CSS transitions to a floating element, correctly\n * handling placement-aware transitions. Wrapper around `useTransitionStatus`.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstyles\n */\nfunction useTransitionStyles(context, props) {\n  if (props === void 0) {\n    props = {};\n  }\n  const {\n    initial: unstable_initial = {\n      opacity: 0\n    },\n    open: unstable_open,\n    close: unstable_close,\n    common: unstable_common,\n    duration = 250\n  } = props;\n  const placement = context.placement;\n  const side = placement.split('-')[0];\n  const fnArgs = React.useMemo(() => ({\n    side,\n    placement\n  }), [side, placement]);\n  const isNumberDuration = typeof duration === 'number';\n  const openDuration = (isNumberDuration ? duration : duration.open) || 0;\n  const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n  const [styles, setStyles] = React.useState(() => ({\n    ...execWithArgsOrReturn(unstable_common, fnArgs),\n    ...execWithArgsOrReturn(unstable_initial, fnArgs)\n  }));\n  const {\n    isMounted,\n    status\n  } = useTransitionStatus(context, {\n    duration\n  });\n  const initialRef = useLatestRef(unstable_initial);\n  const openRef = useLatestRef(unstable_open);\n  const closeRef = useLatestRef(unstable_close);\n  const commonRef = useLatestRef(unstable_common);\n  index(() => {\n    const initialStyles = execWithArgsOrReturn(initialRef.current, fnArgs);\n    const closeStyles = execWithArgsOrReturn(closeRef.current, fnArgs);\n    const commonStyles = execWithArgsOrReturn(commonRef.current, fnArgs);\n    const openStyles = execWithArgsOrReturn(openRef.current, fnArgs) || Object.keys(initialStyles).reduce((acc, key) => {\n      acc[key] = '';\n      return acc;\n    }, {});\n    if (status === 'initial') {\n      setStyles(styles => ({\n        transitionProperty: styles.transitionProperty,\n        ...commonStyles,\n        ...initialStyles\n      }));\n    }\n    if (status === 'open') {\n      setStyles({\n        transitionProperty: Object.keys(openStyles).map(camelCaseToKebabCase).join(','),\n        transitionDuration: openDuration + \"ms\",\n        ...commonStyles,\n        ...openStyles\n      });\n    }\n    if (status === 'close') {\n      const styles = closeStyles || initialStyles;\n      setStyles({\n        transitionProperty: Object.keys(styles).map(camelCaseToKebabCase).join(','),\n        transitionDuration: closeDuration + \"ms\",\n        ...commonStyles,\n        ...styles\n      });\n    }\n  }, [closeDuration, closeRef, initialRef, openRef, commonRef, openDuration, status, fnArgs]);\n  return {\n    isMounted,\n    styles\n  };\n}\n\n/**\n * Provides a matching callback that can be used to focus an item as the user\n * types, often used in tandem with `useListNavigation()`.\n * @see https://floating-ui.com/docs/useTypeahead\n */\nfunction useTypeahead(context, props) {\n  var _ref;\n  const {\n    open,\n    dataRef\n  } = context;\n  const {\n    listRef,\n    activeIndex,\n    onMatch: unstable_onMatch,\n    onTypingChange: unstable_onTypingChange,\n    enabled = true,\n    findMatch = null,\n    resetMs = 750,\n    ignoreKeys = [],\n    selectedIndex = null\n  } = props;\n  const timeoutIdRef = React.useRef();\n  const stringRef = React.useRef('');\n  const prevIndexRef = React.useRef((_ref = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref : -1);\n  const matchIndexRef = React.useRef(null);\n  const onMatch = useEffectEvent(unstable_onMatch);\n  const onTypingChange = useEffectEvent(unstable_onTypingChange);\n  const findMatchRef = useLatestRef(findMatch);\n  const ignoreKeysRef = useLatestRef(ignoreKeys);\n  index(() => {\n    if (open) {\n      clearTimeout(timeoutIdRef.current);\n      matchIndexRef.current = null;\n      stringRef.current = '';\n    }\n  }, [open]);\n  index(() => {\n    // Sync arrow key navigation but not typeahead navigation.\n    if (open && stringRef.current === '') {\n      var _ref2;\n      prevIndexRef.current = (_ref2 = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref2 : -1;\n    }\n  }, [open, selectedIndex, activeIndex]);\n  const setTypingChange = useEffectEvent(value => {\n    if (value) {\n      if (!dataRef.current.typing) {\n        dataRef.current.typing = value;\n        onTypingChange(value);\n      }\n    } else {\n      if (dataRef.current.typing) {\n        dataRef.current.typing = value;\n        onTypingChange(value);\n      }\n    }\n  });\n  const onKeyDown = useEffectEvent(event => {\n    function getMatchingIndex(list, orderedList, string) {\n      const str = findMatchRef.current ? findMatchRef.current(orderedList, string) : orderedList.find(text => (text == null ? void 0 : text.toLocaleLowerCase().indexOf(string.toLocaleLowerCase())) === 0);\n      return str ? list.indexOf(str) : -1;\n    }\n    const listContent = listRef.current;\n    if (stringRef.current.length > 0 && stringRef.current[0] !== ' ') {\n      if (getMatchingIndex(listContent, listContent, stringRef.current) === -1) {\n        setTypingChange(false);\n      } else if (event.key === ' ') {\n        stopEvent(event);\n      }\n    }\n    if (listContent == null || ignoreKeysRef.current.includes(event.key) ||\n    // Character key.\n    event.key.length !== 1 ||\n    // Modifier key.\n    event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n    if (open && event.key !== ' ') {\n      stopEvent(event);\n      setTypingChange(true);\n    }\n\n    // Bail out if the list contains a word like \"llama\" or \"aaron\". TODO:\n    // allow it in this case, too.\n    const allowRapidSuccessionOfFirstLetter = listContent.every(text => {\n      var _text$, _text$2;\n      return text ? ((_text$ = text[0]) == null ? void 0 : _text$.toLocaleLowerCase()) !== ((_text$2 = text[1]) == null ? void 0 : _text$2.toLocaleLowerCase()) : true;\n    });\n\n    // Allows the user to cycle through items that start with the same letter\n    // in rapid succession.\n    if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {\n      stringRef.current = '';\n      prevIndexRef.current = matchIndexRef.current;\n    }\n    stringRef.current += event.key;\n    clearTimeout(timeoutIdRef.current);\n    timeoutIdRef.current = setTimeout(() => {\n      stringRef.current = '';\n      prevIndexRef.current = matchIndexRef.current;\n      setTypingChange(false);\n    }, resetMs);\n    const prevIndex = prevIndexRef.current;\n    const index = getMatchingIndex(listContent, [...listContent.slice((prevIndex || 0) + 1), ...listContent.slice(0, (prevIndex || 0) + 1)], stringRef.current);\n    if (index !== -1) {\n      onMatch(index);\n      matchIndexRef.current = index;\n    } else if (event.key !== ' ') {\n      stringRef.current = '';\n      setTypingChange(false);\n    }\n  });\n  const reference = React.useMemo(() => ({\n    onKeyDown\n  }), [onKeyDown]);\n  const floating = React.useMemo(() => {\n    return {\n      onKeyDown,\n      onKeyUp(event) {\n        if (event.key === ' ') {\n          setTypingChange(false);\n        }\n      }\n    };\n  }, [onKeyDown, setTypingChange]);\n  return React.useMemo(() => enabled ? {\n    reference,\n    floating\n  } : {}, [enabled, reference, floating]);\n}\n\nfunction getArgsWithCustomFloatingHeight(state, height) {\n  return {\n    ...state,\n    rects: {\n      ...state.rects,\n      floating: {\n        ...state.rects.floating,\n        height\n      }\n    }\n  };\n}\n/**\n * Positions the floating element such that an inner element inside of it is\n * anchored to the reference element.\n * @see https://floating-ui.com/docs/inner\n */\nconst inner = props => ({\n  name: 'inner',\n  options: props,\n  async fn(state) {\n    const {\n      listRef,\n      overflowRef,\n      onFallbackChange,\n      offset: innerOffset = 0,\n      index = 0,\n      minItemsVisible = 4,\n      referenceOverflowThreshold = 0,\n      scrollRef,\n      ...detectOverflowOptions\n    } = evaluate(props, state);\n    const {\n      rects,\n      elements: {\n        floating\n      }\n    } = state;\n    const item = listRef.current[index];\n    const scrollEl = (scrollRef == null ? void 0 : scrollRef.current) || floating;\n\n    // Valid combinations:\n    // 1. Floating element is the scrollRef and has a border (default)\n    // 2. Floating element is not the scrollRef, floating element has a border\n    // 3. Floating element is not the scrollRef, scrollRef has a border\n    // Floating > {...getFloatingProps()} wrapper > scrollRef > items is not\n    // allowed as VoiceOver doesn't work.\n    const clientTop = floating.clientTop || scrollEl.clientTop;\n    const floatingIsBordered = floating.clientTop !== 0;\n    const scrollElIsBordered = scrollEl.clientTop !== 0;\n    const floatingIsScrollEl = floating === scrollEl;\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!state.placement.startsWith('bottom')) {\n        warn('`placement` side must be \"bottom\" when using the `inner`', 'middleware.');\n      }\n    }\n    if (!item) {\n      return {};\n    }\n    const nextArgs = {\n      ...state,\n      ...(await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state))\n    };\n    const overflow = await detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n    const refOverflow = await detectOverflow(nextArgs, {\n      ...detectOverflowOptions,\n      elementContext: 'reference'\n    });\n    const diffY = max(0, overflow.top);\n    const nextY = nextArgs.y + diffY;\n    const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n    const rounder = isScrollable ? v => v : round;\n    const maxHeight = rounder(max(0, scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0) - diffY - max(0, overflow.bottom)));\n    scrollEl.style.maxHeight = maxHeight + \"px\";\n    scrollEl.scrollTop = diffY;\n\n    // There is not enough space, fallback to standard anchored positioning\n    if (onFallbackChange) {\n      const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * min(minItemsVisible, listRef.current.length) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n      ReactDOM.flushSync(() => onFallbackChange(shouldFallback));\n    }\n    if (overflowRef) {\n      overflowRef.current = await detectOverflow(getArgsWithCustomFloatingHeight({\n        ...nextArgs,\n        y: nextY\n      }, scrollEl.offsetHeight + clientTop + floating.clientTop), detectOverflowOptions);\n    }\n    return {\n      y: nextY\n    };\n  }\n});\n/**\n * Changes the `inner` middleware's `offset` upon a `wheel` event to\n * expand the floating element's height, revealing more list items.\n * @see https://floating-ui.com/docs/inner\n */\nfunction useInnerOffset(context, props) {\n  const {\n    open,\n    elements\n  } = context;\n  const {\n    enabled = true,\n    overflowRef,\n    scrollRef,\n    onChange: unstable_onChange\n  } = props;\n  const onChange = useEffectEvent(unstable_onChange);\n  const controlledScrollingRef = React.useRef(false);\n  const prevScrollTopRef = React.useRef(null);\n  const initialOverflowRef = React.useRef(null);\n  React.useEffect(() => {\n    if (!enabled) return;\n    function onWheel(e) {\n      if (e.ctrlKey || !el || overflowRef.current == null) {\n        return;\n      }\n      const dY = e.deltaY;\n      const isAtTop = overflowRef.current.top >= -0.5;\n      const isAtBottom = overflowRef.current.bottom >= -0.5;\n      const remainingScroll = el.scrollHeight - el.clientHeight;\n      const sign = dY < 0 ? -1 : 1;\n      const method = dY < 0 ? 'max' : 'min';\n      if (el.scrollHeight <= el.clientHeight) {\n        return;\n      }\n      if (!isAtTop && dY > 0 || !isAtBottom && dY < 0) {\n        e.preventDefault();\n        ReactDOM.flushSync(() => {\n          onChange(d => d + Math[method](dY, remainingScroll * sign));\n        });\n      } else if (/firefox/i.test(getUserAgent())) {\n        // Needed to propagate scrolling during momentum scrolling phase once\n        // it gets limited by the boundary. UX improvement, not critical.\n        el.scrollTop += dY;\n      }\n    }\n    const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n    if (open && el) {\n      el.addEventListener('wheel', onWheel);\n\n      // Wait for the position to be ready.\n      requestAnimationFrame(() => {\n        prevScrollTopRef.current = el.scrollTop;\n        if (overflowRef.current != null) {\n          initialOverflowRef.current = {\n            ...overflowRef.current\n          };\n        }\n      });\n      return () => {\n        prevScrollTopRef.current = null;\n        initialOverflowRef.current = null;\n        el.removeEventListener('wheel', onWheel);\n      };\n    }\n  }, [enabled, open, elements.floating, overflowRef, scrollRef, onChange]);\n  const floating = React.useMemo(() => ({\n    onKeyDown() {\n      controlledScrollingRef.current = true;\n    },\n    onWheel() {\n      controlledScrollingRef.current = false;\n    },\n    onPointerMove() {\n      controlledScrollingRef.current = false;\n    },\n    onScroll() {\n      const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n      if (!overflowRef.current || !el || !controlledScrollingRef.current) {\n        return;\n      }\n      if (prevScrollTopRef.current !== null) {\n        const scrollDiff = el.scrollTop - prevScrollTopRef.current;\n        if (overflowRef.current.bottom < -0.5 && scrollDiff < -1 || overflowRef.current.top < -0.5 && scrollDiff > 1) {\n          ReactDOM.flushSync(() => onChange(d => d + scrollDiff));\n        }\n      }\n\n      // [Firefox] Wait for the height change to have been applied.\n      requestAnimationFrame(() => {\n        prevScrollTopRef.current = el.scrollTop;\n      });\n    }\n  }), [elements.floating, onChange, overflowRef, scrollRef]);\n  return React.useMemo(() => enabled ? {\n    floating\n  } : {}, [enabled, floating]);\n}\n\nfunction isPointInPolygon(point, polygon) {\n  const [x, y] = point;\n  let isInside = false;\n  const length = polygon.length;\n  for (let i = 0, j = length - 1; i < length; j = i++) {\n    const [xi, yi] = polygon[i] || [0, 0];\n    const [xj, yj] = polygon[j] || [0, 0];\n    const intersect = yi >= y !== yj >= y && x <= (xj - xi) * (y - yi) / (yj - yi) + xi;\n    if (intersect) {\n      isInside = !isInside;\n    }\n  }\n  return isInside;\n}\nfunction isInside(point, rect) {\n  return point[0] >= rect.x && point[0] <= rect.x + rect.width && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n}\n/**\n * Generates a safe polygon area that the user can traverse without closing the\n * floating element once leaving the reference element.\n * @see https://floating-ui.com/docs/useHover#safepolygon\n */\nfunction safePolygon(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    buffer = 0.5,\n    blockPointerEvents = false,\n    requireIntent = true\n  } = options;\n  let timeoutId;\n  let hasLanded = false;\n  let lastX = null;\n  let lastY = null;\n  let lastCursorTime = performance.now();\n  function getCursorSpeed(x, y) {\n    const currentTime = performance.now();\n    const elapsedTime = currentTime - lastCursorTime;\n    if (lastX === null || lastY === null || elapsedTime === 0) {\n      lastX = x;\n      lastY = y;\n      lastCursorTime = currentTime;\n      return null;\n    }\n    const deltaX = x - lastX;\n    const deltaY = y - lastY;\n    const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n    const speed = distance / elapsedTime; // px / ms\n\n    lastX = x;\n    lastY = y;\n    lastCursorTime = currentTime;\n    return speed;\n  }\n  const fn = _ref => {\n    let {\n      x,\n      y,\n      placement,\n      elements,\n      onClose,\n      nodeId,\n      tree\n    } = _ref;\n    return function onMouseMove(event) {\n      function close() {\n        clearTimeout(timeoutId);\n        onClose();\n      }\n      clearTimeout(timeoutId);\n      if (!elements.domReference || !elements.floating || placement == null || x == null || y == null) {\n        return;\n      }\n      const {\n        clientX,\n        clientY\n      } = event;\n      const clientPoint = [clientX, clientY];\n      const target = getTarget(event);\n      const isLeave = event.type === 'mouseleave';\n      const isOverFloatingEl = contains(elements.floating, target);\n      const isOverReferenceEl = contains(elements.domReference, target);\n      const refRect = elements.domReference.getBoundingClientRect();\n      const rect = elements.floating.getBoundingClientRect();\n      const side = placement.split('-')[0];\n      const cursorLeaveFromRight = x > rect.right - rect.width / 2;\n      const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;\n      const isOverReferenceRect = isInside(clientPoint, refRect);\n      const isFloatingWider = rect.width > refRect.width;\n      const isFloatingTaller = rect.height > refRect.height;\n      const left = (isFloatingWider ? refRect : rect).left;\n      const right = (isFloatingWider ? refRect : rect).right;\n      const top = (isFloatingTaller ? refRect : rect).top;\n      const bottom = (isFloatingTaller ? refRect : rect).bottom;\n      if (isOverFloatingEl) {\n        hasLanded = true;\n        if (!isLeave) {\n          return;\n        }\n      }\n      if (isOverReferenceEl) {\n        hasLanded = false;\n      }\n      if (isOverReferenceEl && !isLeave) {\n        hasLanded = true;\n        return;\n      }\n\n      // Prevent overlapping floating element from being stuck in an open-close\n      // loop: https://github.com/floating-ui/floating-ui/issues/1910\n      if (isLeave && isElement(event.relatedTarget) && contains(elements.floating, event.relatedTarget)) {\n        return;\n      }\n\n      // If any nested child is open, abort.\n      if (tree && getChildren(tree.nodesRef.current, nodeId).some(_ref2 => {\n        let {\n          context\n        } = _ref2;\n        return context == null ? void 0 : context.open;\n      })) {\n        return;\n      }\n\n      // If the pointer is leaving from the opposite side, the \"buffer\" logic\n      // creates a point where the floating element remains open, but should be\n      // ignored.\n      // A constant of 1 handles floating point rounding errors.\n      if (side === 'top' && y >= refRect.bottom - 1 || side === 'bottom' && y <= refRect.top + 1 || side === 'left' && x >= refRect.right - 1 || side === 'right' && x <= refRect.left + 1) {\n        return close();\n      }\n\n      // Ignore when the cursor is within the rectangular trough between the\n      // two elements. Since the triangle is created from the cursor point,\n      // which can start beyond the ref element's edge, traversing back and\n      // forth from the ref to the floating element can cause it to close. This\n      // ensures it always remains open in that case.\n      let rectPoly = [];\n      switch (side) {\n        case 'top':\n          rectPoly = [[left, refRect.top + 1], [left, rect.bottom - 1], [right, rect.bottom - 1], [right, refRect.top + 1]];\n          break;\n        case 'bottom':\n          rectPoly = [[left, rect.top + 1], [left, refRect.bottom - 1], [right, refRect.bottom - 1], [right, rect.top + 1]];\n          break;\n        case 'left':\n          rectPoly = [[rect.right - 1, bottom], [rect.right - 1, top], [refRect.left + 1, top], [refRect.left + 1, bottom]];\n          break;\n        case 'right':\n          rectPoly = [[refRect.right - 1, bottom], [refRect.right - 1, top], [rect.left + 1, top], [rect.left + 1, bottom]];\n          break;\n      }\n      function getPolygon(_ref3) {\n        let [x, y] = _ref3;\n        switch (side) {\n          case 'top':\n            {\n              const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n              const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n              const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.bottom - buffer : isFloatingWider ? rect.bottom - buffer : rect.top], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.bottom - buffer : rect.top : rect.bottom - buffer]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n          case 'bottom':\n            {\n              const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n              const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n              const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.top + buffer : isFloatingWider ? rect.top + buffer : rect.bottom], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.top + buffer : rect.bottom : rect.top + buffer]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n          case 'left':\n            {\n              const cursorPointOne = [x + buffer + 1, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const cursorPointTwo = [x + buffer + 1, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const commonPoints = [[cursorLeaveFromBottom ? rect.right - buffer : isFloatingTaller ? rect.right - buffer : rect.left, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.right - buffer : rect.left : rect.right - buffer, rect.bottom]];\n              return [...commonPoints, cursorPointOne, cursorPointTwo];\n            }\n          case 'right':\n            {\n              const cursorPointOne = [x - buffer, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const cursorPointTwo = [x - buffer, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n              const commonPoints = [[cursorLeaveFromBottom ? rect.left + buffer : isFloatingTaller ? rect.left + buffer : rect.right, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.left + buffer : rect.right : rect.left + buffer, rect.bottom]];\n              return [cursorPointOne, cursorPointTwo, ...commonPoints];\n            }\n        }\n      }\n      if (isPointInPolygon([clientX, clientY], rectPoly)) {\n        return;\n      }\n      if (hasLanded && !isOverReferenceRect) {\n        return close();\n      }\n      if (!isLeave && requireIntent) {\n        const cursorSpeed = getCursorSpeed(event.clientX, event.clientY);\n        const cursorSpeedThreshold = 0.1;\n        if (cursorSpeed !== null && cursorSpeed < cursorSpeedThreshold) {\n          return close();\n        }\n      }\n      if (!isPointInPolygon([clientX, clientY], getPolygon([x, y]))) {\n        close();\n      } else if (!hasLanded && requireIntent) {\n        timeoutId = window.setTimeout(close, 40);\n      }\n    };\n  };\n  fn.__options = {\n    blockPointerEvents\n  };\n  return fn;\n}\n\nexport { Composite, CompositeItem, FloatingArrow, FloatingDelayGroup, FloatingFocusManager, FloatingList, FloatingNode, FloatingOverlay, FloatingPortal, FloatingTree, inner, safePolygon, useClick, useClientPoint, useDelayGroup, useDelayGroupContext, useDismiss, useFloating, useFloatingNodeId, useFloatingParentNodeId, useFloatingPortalNode, useFloatingRootContext, useFloatingTree, useFocus, useHover, useId, useInnerOffset, useInteractions, useListItem, useListNavigation, useMergeRefs, useRole, useTransitionStatus, useTransitionStyles, useTypeahead };\n","import{autoUpdate as Z,flip as ee,inner as te,offset as ne,shift as re,size as le,useFloating as oe,useInnerOffset as ie,useInteractions as se}from\"@floating-ui/react\";import*as j from\"react\";import{createContext as _,useCallback as ae,useContext as T,useMemo as R,useRef as ue,useState as v}from\"react\";import{useDisposables as fe}from'../hooks/use-disposables.js';import{useEvent as z}from'../hooks/use-event.js';import{useIsoMorphicEffect as C}from'../hooks/use-iso-morphic-effect.js';import*as pe from'../utils/dom.js';let y=_({styles:void 0,setReference:()=>{},setFloating:()=>{},getReferenceProps:()=>({}),getFloatingProps:()=>({}),slot:{}});y.displayName=\"FloatingContext\";let $=_(null);$.displayName=\"PlacementContext\";function ye(e){return R(()=>e?typeof e==\"string\"?{to:e}:e:null,[e])}function Fe(){return T(y).setReference}function be(){return T(y).getReferenceProps}function Te(){let{getFloatingProps:e,slot:t}=T(y);return ae((...n)=>Object.assign({},e(...n),{\"data-anchor\":t.anchor}),[e,t])}function Re(e=null){e===!1&&(e=null),typeof e==\"string\"&&(e={to:e});let t=T($),n=R(()=>e,[JSON.stringify(e,(l,o)=>{var u;return(u=o==null?void 0:o.outerHTML)!=null?u:o})]);C(()=>{t==null||t(n!=null?n:null)},[t,n]);let r=T(y);return R(()=>[r.setFloating,e?r.styles:{}],[r.setFloating,e,r.styles])}let D=4;function Ae({children:e,enabled:t=!0}){let[n,r]=v(null),[l,o]=v(0),u=ue(null),[f,s]=v(null);ce(f);let i=t&&n!==null&&f!==null,{to:F=\"bottom\",gap:E=0,offset:A=0,padding:c=0,inner:h}=ge(n,f),[a,p=\"center\"]=F.split(\" \");C(()=>{i&&o(0)},[i]);let{refs:b,floatingStyles:S,context:g}=oe({open:i,placement:a===\"selection\"?p===\"center\"?\"bottom\":`bottom-${p}`:p===\"center\"?`${a}`:`${a}-${p}`,strategy:\"absolute\",transform:!1,middleware:[ne({mainAxis:a===\"selection\"?0:E,crossAxis:A}),re({padding:c}),a!==\"selection\"&&ee({padding:c}),a===\"selection\"&&h?te({...h,padding:c,overflowRef:u,offset:l,minItemsVisible:D,referenceOverflowThreshold:c,onFallbackChange(P){var L,N;if(!P)return;let d=g.elements.floating;if(!d)return;let M=parseFloat(getComputedStyle(d).scrollPaddingBottom)||0,I=Math.min(D,d.childElementCount),W=0,B=0;for(let m of(N=(L=g.elements.floating)==null?void 0:L.childNodes)!=null?N:[])if(pe.isHTMLElement(m)){let x=m.offsetTop,k=x+m.clientHeight+M,H=d.scrollTop,U=H+d.clientHeight;if(x>=H&&k<=U)I--;else{B=Math.max(0,Math.min(k,U)-Math.max(x,H)),W=m.clientHeight;break}}I>=1&&o(m=>{let x=W*I-B+M;return m>=x?m:x})}}):null,le({padding:c,apply({availableWidth:P,availableHeight:d,elements:M}){Object.assign(M.floating.style,{overflow:\"auto\",maxWidth:`${P}px`,maxHeight:`min(var(--anchor-max-height, 100vh), ${d}px)`})}})].filter(Boolean),whileElementsMounted:Z}),[w=a,V=p]=g.placement.split(\"-\");a===\"selection\"&&(w=\"selection\");let G=R(()=>({anchor:[w,V].filter(Boolean).join(\" \")}),[w,V]),K=ie(g,{overflowRef:u,onChange:o}),{getReferenceProps:Q,getFloatingProps:X}=se([K]),Y=z(P=>{s(P),b.setFloating(P)});return j.createElement($.Provider,{value:r},j.createElement(y.Provider,{value:{setFloating:Y,setReference:b.setReference,styles:S,getReferenceProps:Q,getFloatingProps:X,slot:G}},e))}function ce(e){C(()=>{if(!e)return;let t=new MutationObserver(()=>{let n=window.getComputedStyle(e).maxHeight,r=parseFloat(n);if(isNaN(r))return;let l=parseInt(n);isNaN(l)||r!==l&&(e.style.maxHeight=`${Math.ceil(r)}px`)});return t.observe(e,{attributes:!0,attributeFilter:[\"style\"]}),()=>{t.disconnect()}},[e])}function ge(e,t){var o,u,f;let n=O((o=e==null?void 0:e.gap)!=null?o:\"var(--anchor-gap, 0)\",t),r=O((u=e==null?void 0:e.offset)!=null?u:\"var(--anchor-offset, 0)\",t),l=O((f=e==null?void 0:e.padding)!=null?f:\"var(--anchor-padding, 0)\",t);return{...e,gap:n,offset:r,padding:l}}function O(e,t,n=void 0){let r=fe(),l=z((s,i)=>{if(s==null)return[n,null];if(typeof s==\"number\")return[s,null];if(typeof s==\"string\"){if(!i)return[n,null];let F=J(s,i);return[F,E=>{let A=q(s);{let c=A.map(h=>window.getComputedStyle(i).getPropertyValue(h));r.requestAnimationFrame(function h(){r.nextFrame(h);let a=!1;for(let[b,S]of A.entries()){let g=window.getComputedStyle(i).getPropertyValue(S);if(c[b]!==g){c[b]=g,a=!0;break}}if(!a)return;let p=J(s,i);F!==p&&(E(p),F=p)})}return r.dispose}]}return[n,null]}),o=R(()=>l(e,t)[0],[e,t]),[u=o,f]=v();return C(()=>{let[s,i]=l(e,t);if(f(s),!!i)return i(f)},[e,t]),u}function q(e){let t=/var\\((.*)\\)/.exec(e);if(t){let n=t[1].indexOf(\",\");if(n===-1)return[t[1]];let r=t[1].slice(0,n).trim(),l=t[1].slice(n+1).trim();return l?[r,...q(l)]:[r]}return[]}function J(e,t){let n=document.createElement(\"div\");t.appendChild(n),n.style.setProperty(\"margin-top\",\"0px\",\"important\"),n.style.setProperty(\"margin-top\",e,\"important\");let r=parseFloat(window.getComputedStyle(n).marginTop)||0;return t.removeChild(n),r}export{Ae as FloatingProvider,Re as useFloatingPanel,Te as useFloatingPanelProps,Fe as useFloatingReference,be as useFloatingReferenceProps,ye as useResolvedAnchor};\n","import r,{cloneElement as l,isValidElement as c,useState as a}from\"react\";function f({children:t,freeze:e},o){let n=u(e,t);return c(n)?l(n,{ref:o}):r.createElement(r.Fragment,null,n)}const s=r.forwardRef(f);function u(t,e){let[o,n]=a(e);return!t&&o!==e&&n(e),t?o:e}export{s as Frozen,u as useFrozenData};\n","import r,{createContext as l,useContext as d}from\"react\";let n=l(null);n.displayName=\"OpenClosedContext\";var i=(e=>(e[e.Open=1]=\"Open\",e[e.Closed=2]=\"Closed\",e[e.Closing=4]=\"Closing\",e[e.Opening=8]=\"Opening\",e))(i||{});function u(){return d(n)}function c({value:o,children:t}){return r.createElement(n.Provider,{value:o},t)}function s({children:o}){return r.createElement(n.Provider,{value:null},o)}export{c as OpenClosedProvider,s as ResetOpenClosedProvider,i as State,u as useOpenClosed};\n","function t(n){function e(){document.readyState!==\"loading\"&&(n(),document.removeEventListener(\"DOMContentLoaded\",e))}typeof window!=\"undefined\"&&typeof document!=\"undefined\"&&(document.addEventListener(\"DOMContentLoaded\",e),e())}export{t as onDocumentReady};\n","import{onDocumentReady as d}from'./document-ready.js';import*as u from'./dom.js';import{focusableSelector as i}from'./focus-management.js';let n=[];d(()=>{function e(t){if(!u.isHTMLorSVGElement(t.target)||t.target===document.body||n[0]===t.target)return;let r=t.target;r=r.closest(i),n.unshift(r!=null?r:t.target),n=n.filter(o=>o!=null&&o.isConnected),n.splice(10)}window.addEventListener(\"click\",e,{capture:!0}),window.addEventListener(\"mousedown\",e,{capture:!0}),window.addEventListener(\"focus\",e,{capture:!0}),document.body.addEventListener(\"click\",e,{capture:!0}),document.body.addEventListener(\"mousedown\",e,{capture:!0}),document.body.addEventListener(\"focus\",e,{capture:!0})});export{n as history};\n","function u(l){throw new Error(\"Unexpected object: \"+l)}var c=(i=>(i[i.First=0]=\"First\",i[i.Previous=1]=\"Previous\",i[i.Next=2]=\"Next\",i[i.Last=3]=\"Last\",i[i.Specific=4]=\"Specific\",i[i.Nothing=5]=\"Nothing\",i))(c||{});function f(l,n){let t=n.resolveItems();if(t.length<=0)return null;let r=n.resolveActiveIndex(),s=r!=null?r:-1;switch(l.focus){case 0:{for(let e=0;e<t.length;++e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 1:{s===-1&&(s=t.length);for(let e=s-1;e>=0;--e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 2:{for(let e=s+1;e<t.length;++e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 3:{for(let e=t.length-1;e>=0;--e)if(!n.resolveDisabled(t[e],e,t))return e;return r}case 4:{for(let e=0;e<t.length;++e)if(n.resolveId(t[e],e,t)===l.id)return e;return r}case 5:return null;default:u(l)}}export{c as Focus,f as calculateActiveIndex};\n","import{useEffect as u,useRef as n}from\"react\";import{microTask as o}from'../utils/micro-task.js';import{useEvent as f}from'./use-event.js';function c(t){let r=f(t),e=n(!1);u(()=>(e.current=!1,()=>{e.current=!0,o(()=>{e.current&&r()})}),[r])}export{c as useOnUnmount};\n","import t,{createContext as r,useContext as c}from\"react\";let e=r(!1);function a(){return c(e)}function l(o){return t.createElement(e.Provider,{value:o.force},o.children)}export{l as ForcePortalRoot,a as usePortalRoot};\n","\"use client\";import i,{Fragment as R,createContext as E,useContext as P,useEffect as A,useMemo as G,useRef as x,useState as M}from\"react\";import{createPortal as b}from\"react-dom\";import{useDisposables as O}from'../../hooks/use-disposables.js';import{useEvent as L}from'../../hooks/use-event.js';import{useOnUnmount as F}from'../../hooks/use-on-unmount.js';import{useOwnerDocument as H}from'../../hooks/use-owner.js';import{optionalRef as h,useSyncRefs as T}from'../../hooks/use-sync-refs.js';import{usePortalRoot as U}from'../../internal/portal-force-root.js';import{env as N}from'../../utils/env.js';import{forwardRefWithAs as f,useRender as d}from'../../utils/render.js';function W(e){let o=U(),l=P(c),[r,p]=M(()=>{var s;if(!o&&l!==null)return(s=l.current)!=null?s:null;if(N.isServer)return null;let t=e==null?void 0:e.getElementById(\"headlessui-portal-root\");if(t)return t;if(e===null)return null;let n=e.createElement(\"div\");return n.setAttribute(\"id\",\"headlessui-portal-root\"),e.body.appendChild(n)});return A(()=>{r!==null&&(e!=null&&e.body.contains(r)||e==null||e.body.appendChild(r))},[r,e]),A(()=>{o||l!==null&&p(l.current)},[l,p,o]),r}let _=R,j=f(function(o,l){let{ownerDocument:r=null,...p}=o,t=x(null),n=T(h(a=>{t.current=a}),l),s=H(t.current),C=r!=null?r:s,u=W(C),y=P(m),g=O(),v=d();return F(()=>{var a;u&&u.childNodes.length<=0&&((a=u.parentElement)==null||a.removeChild(u))}),u?b(i.createElement(\"div\",{\"data-headlessui-portal\":\"\",ref:a=>{g.dispose(),y&&a&&g.add(y.register(a))}},v({ourProps:{ref:n},theirProps:p,slot:{},defaultTag:_,name:\"Portal\"})),u):null});function S(e,o){let l=T(o),{enabled:r=!0,ownerDocument:p,...t}=e,n=d();return r?i.createElement(j,{...t,ownerDocument:p,ref:l}):n({ourProps:{ref:l},theirProps:t,slot:{},defaultTag:_,name:\"Portal\"})}let I=R,c=E(null);function D(e,o){let{target:l,...r}=e,t={ref:T(o)},n=d();return i.createElement(c.Provider,{value:l},n({ourProps:t,theirProps:r,defaultTag:I,name:\"Popover.Group\"}))}let m=E(null);function ee(){let e=P(m),o=x([]),l=L(t=>(o.current.push(t),e&&e.register(t),()=>r(t))),r=L(t=>{let n=o.current.indexOf(t);n!==-1&&o.current.splice(n,1),e&&e.unregister(t)}),p=G(()=>({register:l,unregister:r,portals:o}),[l,r,o]);return[o,G(()=>function({children:n}){return i.createElement(m.Provider,{value:p},n)},[p])]}let J=f(S),X=f(D),te=Object.assign(J,{Group:X});export{te as Portal,X as PortalGroup,ee as useNestedPortals};\n","import{disposables as r}from'./disposables.js';const c={Idle:{kind:\"Idle\"},Tracked:e=>({kind:\"Tracked\",position:e}),Moved:{kind:\"Moved\"}};function a(e){let t=e.getBoundingClientRect();return`${t.x},${t.y}`}function p(e,t,i){let n=r();if(t.kind===\"Tracked\"){let o=function(){d!==a(e)&&(n.dispose(),i())};var f=o;let{position:d}=t,s=new ResizeObserver(o);s.observe(e),n.add(()=>s.disconnect()),n.addEventListener(window,\"scroll\",o,{passive:!0}),n.addEventListener(window,\"resize\",o)}return()=>n.dispose()}export{c as ElementPositionState,a as computeVisualPosition,p as detectMovement};\n","import{Keys as u}from'../components/keyboard.js';import{useEventListener as i}from'./use-event-listener.js';import{useIsTopLayer as f}from'./use-is-top-layer.js';function a(o,r=typeof document!=\"undefined\"?document.defaultView:null,t){let n=f(o,\"escape\");i(r,\"keydown\",e=>{n&&(e.defaultPrevented||e.key===u.Escape&&t(e))})}export{a as useEscape};\n","import{useState as i}from\"react\";import{useIsoMorphicEffect as s}from'./use-iso-morphic-effect.js';function f(){var t;let[e]=i(()=>typeof window!=\"undefined\"&&typeof window.matchMedia==\"function\"?window.matchMedia(\"(pointer: coarse)\"):null),[o,c]=i((t=e==null?void 0:e.matches)!=null?t:!1);return s(()=>{if(!e)return;function n(r){c(r.matches)}return e.addEventListener(\"change\",n),()=>e.removeEventListener(\"change\",n)},[e]),o}export{f as useIsTouchDevice};\n","import s,{createContext as h,useContext as b,useState as p}from\"react\";import{Hidden as M,HiddenFeatures as v}from'../internal/hidden.js';import*as f from'../utils/dom.js';import{getOwnerDocument as a}from'../utils/owner.js';import{useEvent as m}from'./use-event.js';function S({defaultContainers:l=[],portals:n,mainTreeNode:o}={}){let c=m(()=>{var r,u;let i=a(o),t=[];for(let e of l)e!==null&&(f.isElement(e)?t.push(e):\"current\"in e&&f.isElement(e.current)&&t.push(e.current));if(n!=null&&n.current)for(let e of n.current)t.push(e);for(let e of(r=i==null?void 0:i.querySelectorAll(\"html > *, body > *\"))!=null?r:[])e!==document.body&&e!==document.head&&f.isElement(e)&&e.id!==\"headlessui-portal-root\"&&(o&&(e.contains(o)||e.contains((u=o==null?void 0:o.getRootNode())==null?void 0:u.host))||t.some(E=>e.contains(E))||t.push(e));return t});return{resolveContainers:c,contains:m(i=>c().some(t=>t.contains(i)))}}let d=h(null);function j({children:l,node:n}){let[o,c]=p(null),i=x(n!=null?n:o);return s.createElement(d.Provider,{value:i},l,i===null&&s.createElement(M,{features:v.Hidden,ref:t=>{var r,u;if(t){for(let e of(u=(r=a(t))==null?void 0:r.querySelectorAll(\"html > *, body > *\"))!=null?u:[])if(e!==document.body&&e!==document.head&&f.isElement(e)&&e!=null&&e.contains(t)){c(e);break}}}}))}function x(l=null){var n;return(n=b(d))!=null?n:l}export{j as MainTreeProvider,x as useMainTreeNode,S as useRootContainers};\n","import*as t from\"react\";import{env as f}from'../utils/env.js';function s(){let r=typeof document==\"undefined\";return\"useSyncExternalStore\"in t?(o=>o.useSyncExternalStore)(t)(()=>()=>{},()=>!1,()=>!r):!1}function l(){let r=s(),[e,n]=t.useState(f.isHandoffComplete);return e&&f.isHandoffComplete===!1&&n(!1),t.useEffect(()=>{e!==!0&&n(!0)},[e]),t.useEffect(()=>f.handoff(),[]),r?!1:e}export{l as useServerHandoffComplete};\n","import{useRef as r}from\"react\";import{useIsoMorphicEffect as t}from'./use-iso-morphic-effect.js';function f(){let e=r(!1);return t(()=>(e.current=!0,()=>{e.current=!1}),[]),e}export{f as useIsMounted};\n","import{useRef as o}from\"react\";import{useWindowEvent as t}from'./use-window-event.js';var a=(r=>(r[r.Forwards=0]=\"Forwards\",r[r.Backwards=1]=\"Backwards\",r))(a||{});function u(){let e=o(0);return t(!0,\"keydown\",r=>{r.key===\"Tab\"&&(e.current=r.shiftKey?1:0)},!0),e}export{a as Direction,u as useTabDirection};\n","\"use client\";import F,{useRef as M}from\"react\";import{useDisposables as W}from'../../hooks/use-disposables.js';import{useEvent as O}from'../../hooks/use-event.js';import{useEventListener as K}from'../../hooks/use-event-listener.js';import{useIsMounted as P}from'../../hooks/use-is-mounted.js';import{useIsTopLayer as C}from'../../hooks/use-is-top-layer.js';import{useOnUnmount as q}from'../../hooks/use-on-unmount.js';import{useOwnerDocument as J}from'../../hooks/use-owner.js';import{useServerHandoffComplete as X}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as z}from'../../hooks/use-sync-refs.js';import{Direction as y,useTabDirection as D}from'../../hooks/use-tab-direction.js';import{useWatch as R}from'../../hooks/use-watch.js';import{Hidden as _,HiddenFeatures as S}from'../../internal/hidden.js';import{history as H}from'../../utils/active-element-history.js';import*as i from'../../utils/dom.js';import{Focus as m,FocusResult as h,focusElement as p,focusIn as d}from'../../utils/focus-management.js';import{match as j}from'../../utils/match.js';import{microTask as U}from'../../utils/micro-task.js';import{isActiveElement as Q}from'../../utils/owner.js';import{forwardRefWithAs as Y,useRender as Z}from'../../utils/render.js';function x(o){if(!o)return new Set;if(typeof o==\"function\")return new Set(o());let t=new Set;for(let e of o.current)i.isElement(e.current)&&t.add(e.current);return t}let $=\"div\";var G=(n=>(n[n.None=0]=\"None\",n[n.InitialFocus=1]=\"InitialFocus\",n[n.TabLock=2]=\"TabLock\",n[n.FocusLock=4]=\"FocusLock\",n[n.RestoreFocus=8]=\"RestoreFocus\",n[n.AutoFocus=16]=\"AutoFocus\",n))(G||{});function w(o,t){let e=M(null),r=z(e,t),{initialFocus:u,initialFocusFallback:a,containers:n,features:s=15,...f}=o;X()||(s=0);let l=J(e.current);re(s,{ownerDocument:l});let T=ne(s,{ownerDocument:l,container:e,initialFocus:u,initialFocusFallback:a});oe(s,{ownerDocument:l,container:e,containers:n,previousActiveElement:T});let g=D(),A=O(c=>{if(!i.isHTMLElement(e.current))return;let E=e.current;(V=>V())(()=>{j(g.current,{[y.Forwards]:()=>{d(E,m.First,{skipElements:[c.relatedTarget,a]})},[y.Backwards]:()=>{d(E,m.Last,{skipElements:[c.relatedTarget,a]})}})})}),v=C(!!(s&2),\"focus-trap#tab-lock\"),N=W(),b=M(!1),k={ref:r,onKeyDown(c){c.key==\"Tab\"&&(b.current=!0,N.requestAnimationFrame(()=>{b.current=!1}))},onBlur(c){if(!(s&4))return;let E=x(n);i.isHTMLElement(e.current)&&E.add(e.current);let L=c.relatedTarget;i.isHTMLorSVGElement(L)&&L.dataset.headlessuiFocusGuard!==\"true\"&&(I(E,L)||(b.current?d(e.current,j(g.current,{[y.Forwards]:()=>m.Next,[y.Backwards]:()=>m.Previous})|m.WrapAround,{relativeTo:c.target}):i.isHTMLorSVGElement(c.target)&&p(c.target)))}},B=Z();return F.createElement(F.Fragment,null,v&&F.createElement(_,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:A,features:S.Focusable}),B({ourProps:k,theirProps:f,defaultTag:$,name:\"FocusTrap\"}),v&&F.createElement(_,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:A,features:S.Focusable}))}let ee=Y(w),ge=Object.assign(ee,{features:G});function te(o=!0){let t=M(H.slice());return R(([e],[r])=>{r===!0&&e===!1&&U(()=>{t.current.splice(0)}),r===!1&&e===!0&&(t.current=H.slice())},[o,H,t]),O(()=>{var e;return(e=t.current.find(r=>r!=null&&r.isConnected))!=null?e:null})}function re(o,{ownerDocument:t}){let e=!!(o&8),r=te(e);R(()=>{e||Q(t==null?void 0:t.body)&&p(r())},[e]),q(()=>{e&&p(r())})}function ne(o,{ownerDocument:t,container:e,initialFocus:r,initialFocusFallback:u}){let a=M(null),n=C(!!(o&1),\"focus-trap#initial-focus\"),s=P();return R(()=>{if(o===0)return;if(!n){u!=null&&u.current&&p(u.current);return}let f=e.current;f&&U(()=>{if(!s.current)return;let l=t==null?void 0:t.activeElement;if(r!=null&&r.current){if((r==null?void 0:r.current)===l){a.current=l;return}}else if(f.contains(l)){a.current=l;return}if(r!=null&&r.current)p(r.current);else{if(o&16){if(d(f,m.First|m.AutoFocus)!==h.Error)return}else if(d(f,m.First)!==h.Error)return;if(u!=null&&u.current&&(p(u.current),(t==null?void 0:t.activeElement)===u.current))return;console.warn(\"There are no focusable elements inside the <FocusTrap />\")}a.current=t==null?void 0:t.activeElement})},[u,n,o]),a}function oe(o,{ownerDocument:t,container:e,containers:r,previousActiveElement:u}){let a=P(),n=!!(o&4);K(t==null?void 0:t.defaultView,\"focus\",s=>{if(!n||!a.current)return;let f=x(r);i.isHTMLElement(e.current)&&f.add(e.current);let l=u.current;if(!l)return;let T=s.target;i.isHTMLElement(T)?I(f,T)?(u.current=T,p(T)):(s.preventDefault(),s.stopPropagation(),p(l)):p(u.current)},!0)}function I(o,t){for(let e of o)if(e.contains(t))return!0;return!1}export{ge as FocusTrap,G as FocusTrapFeatures};\n","\"use client\";import c,{Fragment as k,createContext as ne,useContext as q,useEffect as ge,useMemo as ie,useRef as b,useState as O}from\"react\";import{useDisposables as ve}from'../../hooks/use-disposables.js';import{useEvent as E}from'../../hooks/use-event.js';import{useIsMounted as be}from'../../hooks/use-is-mounted.js';import{useIsoMorphicEffect as D}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as Ee}from'../../hooks/use-latest-value.js';import{useServerHandoffComplete as re}from'../../hooks/use-server-handoff-complete.js';import{useSyncRefs as oe}from'../../hooks/use-sync-refs.js';import{transitionDataAttributes as Se,useTransition as Re}from'../../hooks/use-transition.js';import{OpenClosedProvider as ye,State as x,useOpenClosed as se}from'../../internal/open-closed.js';import{classNames as Pe}from'../../utils/class-names.js';import{match as le}from'../../utils/match.js';import{RenderFeatures as xe,RenderStrategy as P,compact as Ne,forwardRefWithAs as J,isFragment as _e,useRender as ae}from'../../utils/render.js';function ue(e){var t;return!!(e.enter||e.enterFrom||e.enterTo||e.leave||e.leaveFrom||e.leaveTo)||!_e((t=e.as)!=null?t:de)||c.Children.count(e.children)===1}let V=ne(null);V.displayName=\"TransitionContext\";var De=(n=>(n.Visible=\"visible\",n.Hidden=\"hidden\",n))(De||{});function He(){let e=q(V);if(e===null)throw new Error(\"A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.\");return e}function Ae(){let e=q(w);if(e===null)throw new Error(\"A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.\");return e}let w=ne(null);w.displayName=\"NestingContext\";function M(e){return\"children\"in e?M(e.children):e.current.filter(({el:t})=>t.current!==null).filter(({state:t})=>t===\"visible\").length>0}function Te(e,t){let n=Ee(e),l=b([]),S=be(),R=ve(),d=E((o,i=P.Hidden)=>{let a=l.current.findIndex(({el:s})=>s===o);a!==-1&&(le(i,{[P.Unmount](){l.current.splice(a,1)},[P.Hidden](){l.current[a].state=\"hidden\"}}),R.microTask(()=>{var s;!M(l)&&S.current&&((s=n.current)==null||s.call(n))}))}),y=E(o=>{let i=l.current.find(({el:a})=>a===o);return i?i.state!==\"visible\"&&(i.state=\"visible\"):l.current.push({el:o,state:\"visible\"}),()=>d(o,P.Unmount)}),C=b([]),p=b(Promise.resolve()),h=b({enter:[],leave:[]}),g=E((o,i,a)=>{C.current.splice(0),t&&(t.chains.current[i]=t.chains.current[i].filter(([s])=>s!==o)),t==null||t.chains.current[i].push([o,new Promise(s=>{C.current.push(s)})]),t==null||t.chains.current[i].push([o,new Promise(s=>{Promise.all(h.current[i].map(([r,f])=>f)).then(()=>s())})]),i===\"enter\"?p.current=p.current.then(()=>t==null?void 0:t.wait.current).then(()=>a(i)):a(i)}),v=E((o,i,a)=>{Promise.all(h.current[i].splice(0).map(([s,r])=>r)).then(()=>{var s;(s=C.current.shift())==null||s()}).then(()=>a(i))});return ie(()=>({children:l,register:y,unregister:d,onStart:g,onStop:v,wait:p,chains:h}),[y,d,l,g,v,h,p])}let de=k,fe=xe.RenderStrategy;function Fe(e,t){var ee,te;let{transition:n=!0,beforeEnter:l,afterEnter:S,beforeLeave:R,afterLeave:d,enter:y,enterFrom:C,enterTo:p,entered:h,leave:g,leaveFrom:v,leaveTo:o,...i}=e,[a,s]=O(null),r=b(null),f=ue(e),U=oe(...f?[r,t,s]:t===null?[]:[t]),H=(ee=i.unmount)==null||ee?P.Unmount:P.Hidden,{show:u,appear:z,initial:K}=He(),[m,j]=O(u?\"visible\":\"hidden\"),Q=Ae(),{register:A,unregister:F}=Q;D(()=>A(r),[A,r]),D(()=>{if(H===P.Hidden&&r.current){if(u&&m!==\"visible\"){j(\"visible\");return}return le(m,{[\"hidden\"]:()=>F(r),[\"visible\"]:()=>A(r)})}},[m,r,A,F,u,H]);let G=re();D(()=>{if(f&&G&&m===\"visible\"&&r.current===null)throw new Error(\"Did you forget to passthrough the `ref` to the actual DOM node?\")},[r,m,G,f]);let ce=K&&!z,Y=z&&u&&K,B=b(!1),I=Te(()=>{B.current||(j(\"hidden\"),F(r))},Q),Z=E(W=>{B.current=!0;let L=W?\"enter\":\"leave\";I.onStart(r,L,_=>{_===\"enter\"?l==null||l():_===\"leave\"&&(R==null||R())})}),$=E(W=>{let L=W?\"enter\":\"leave\";B.current=!1,I.onStop(r,L,_=>{_===\"enter\"?S==null||S():_===\"leave\"&&(d==null||d())}),L===\"leave\"&&!M(I)&&(j(\"hidden\"),F(r))});ge(()=>{f&&n||(Z(u),$(u))},[u,f,n]);let pe=(()=>!(!n||!f||!G||ce))(),[,T]=Re(pe,a,u,{start:Z,end:$}),Ce=Ne({ref:U,className:((te=Pe(i.className,Y&&y,Y&&C,T.enter&&y,T.enter&&T.closed&&C,T.enter&&!T.closed&&p,T.leave&&g,T.leave&&!T.closed&&v,T.leave&&T.closed&&o,!T.transition&&u&&h))==null?void 0:te.trim())||void 0,...Se(T)}),N=0;m===\"visible\"&&(N|=x.Open),m===\"hidden\"&&(N|=x.Closed),u&&m===\"hidden\"&&(N|=x.Opening),!u&&m===\"visible\"&&(N|=x.Closing);let he=ae();return c.createElement(w.Provider,{value:I},c.createElement(ye,{value:N},he({ourProps:Ce,theirProps:i,defaultTag:de,features:fe,visible:m===\"visible\",name:\"Transition.Child\"})))}function Ie(e,t){let{show:n,appear:l=!1,unmount:S=!0,...R}=e,d=b(null),y=ue(e),C=oe(...y?[d,t]:t===null?[]:[t]);re();let p=se();if(n===void 0&&p!==null&&(n=(p&x.Open)===x.Open),n===void 0)throw new Error(\"A <Transition /> is used but it is missing a `show={true | false}` prop.\");let[h,g]=O(n?\"visible\":\"hidden\"),v=Te(()=>{n||g(\"hidden\")}),[o,i]=O(!0),a=b([n]);D(()=>{o!==!1&&a.current[a.current.length-1]!==n&&(a.current.push(n),i(!1))},[a,n]);let s=ie(()=>({show:n,appear:l,initial:o}),[n,l,o]);D(()=>{n?g(\"visible\"):!M(v)&&d.current!==null&&g(\"hidden\")},[n,v]);let r={unmount:S},f=E(()=>{var u;o&&i(!1),(u=e.beforeEnter)==null||u.call(e)}),U=E(()=>{var u;o&&i(!1),(u=e.beforeLeave)==null||u.call(e)}),H=ae();return c.createElement(w.Provider,{value:v},c.createElement(V.Provider,{value:s},H({ourProps:{...r,as:k,children:c.createElement(me,{ref:C,...r,...R,beforeEnter:f,beforeLeave:U})},theirProps:{},defaultTag:k,features:fe,visible:h===\"visible\",name:\"Transition\"})))}function Le(e,t){let n=q(V)!==null,l=se()!==null;return c.createElement(c.Fragment,null,!n&&l?c.createElement(X,{ref:t,...e}):c.createElement(me,{ref:t,...e}))}let X=J(Ie),me=J(Fe),Oe=J(Le),Ke=Object.assign(X,{Child:Oe,Root:X});export{Ke as Transition,Oe as TransitionChild};\n","\"use client\";import l,{Fragment as $,createContext as pe,createRef as se,useCallback as de,useContext as ue,useEffect as Te,useMemo as fe,useReducer as ge,useRef as j}from\"react\";import{useEscape as ce}from'../../hooks/use-escape.js';import{useEvent as A}from'../../hooks/use-event.js';import{useId as k}from'../../hooks/use-id.js';import{useInertOthers as me}from'../../hooks/use-inert-others.js';import{useIsTouchDevice as De}from'../../hooks/use-is-touch-device.js';import{useIsoMorphicEffect as Pe}from'../../hooks/use-iso-morphic-effect.js';import{useOnDisappear as ye}from'../../hooks/use-on-disappear.js';import{useOutsideClick as Ee}from'../../hooks/use-outside-click.js';import{useOwnerDocument as Ae}from'../../hooks/use-owner.js';import{MainTreeProvider as Y,useMainTreeNode as _e,useRootContainers as Ce}from'../../hooks/use-root-containers.js';import{useScrollLock as Re}from'../../hooks/use-scroll-lock.js';import{useServerHandoffComplete as Fe}from'../../hooks/use-server-handoff-complete.js';import{useSlot as L}from'../../hooks/use-slot.js';import{useSyncRefs as G}from'../../hooks/use-sync-refs.js';import{CloseProvider as be}from'../../internal/close-provider.js';import{ResetOpenClosedProvider as ve,State as x,useOpenClosed as J}from'../../internal/open-closed.js';import{ForcePortalRoot as K}from'../../internal/portal-force-root.js';import{stackMachines as Le}from'../../machines/stack-machine.js';import{useSlice as xe}from'../../react-glue.js';import{match as he}from'../../utils/match.js';import{RenderFeatures as X,forwardRefWithAs as _,useRender as h}from'../../utils/render.js';import{Description as V,useDescriptions as Oe}from'../description/description.js';import{FocusTrap as Se,FocusTrapFeatures as C}from'../focus-trap/focus-trap.js';import{Portal as Ie,PortalGroup as Me,useNestedPortals as ke}from'../portal/portal.js';import{Transition as Ge,TransitionChild as q}from'../transition/transition.js';var we=(o=>(o[o.Open=0]=\"Open\",o[o.Closed=1]=\"Closed\",o))(we||{}),Be=(t=>(t[t.SetTitleId=0]=\"SetTitleId\",t))(Be||{});let Ue={[0](e,t){return e.titleId===t.id?e:{...e,titleId:t.id}}},w=pe(null);w.displayName=\"DialogContext\";function O(e){let t=ue(w);if(t===null){let o=new Error(`<${e} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,O),o}return t}function He(e,t){return he(t.type,Ue,e,t)}let z=_(function(t,o){let a=k(),{id:n=`headlessui-dialog-${a}`,open:i,onClose:p,initialFocus:d,role:s=\"dialog\",autoFocus:f=!0,__demoMode:u=!1,unmount:y=!1,...S}=t,R=j(!1);s=function(){return s===\"dialog\"||s===\"alertdialog\"?s:(R.current||(R.current=!0,console.warn(`Invalid role [${s}] passed to <Dialog />. Only \\`dialog\\` and and \\`alertdialog\\` are supported. Using \\`dialog\\` instead.`)),\"dialog\")}();let g=J();i===void 0&&g!==null&&(i=(g&x.Open)===x.Open);let T=j(null),I=G(T,o),F=Ae(T.current),c=i?0:1,[b,Q]=ge(He,{titleId:null,descriptionId:null,panelRef:se()}),m=A(()=>p(!1)),B=A(r=>Q({type:0,id:r})),D=Fe()?c===0:!1,[Z,ee]=ke(),te={get current(){var r;return(r=b.panelRef.current)!=null?r:T.current}},v=_e(),{resolveContainers:M}=Ce({mainTreeNode:v,portals:Z,defaultContainers:[te]}),U=g!==null?(g&x.Closing)===x.Closing:!1;me(u||U?!1:D,{allowed:A(()=>{var r,W;return[(W=(r=T.current)==null?void 0:r.closest(\"[data-headlessui-portal]\"))!=null?W:null]}),disallowed:A(()=>{var r;return[(r=v==null?void 0:v.closest(\"body > *:not(#headlessui-portal-root)\"))!=null?r:null]})});let P=Le.get(null);Pe(()=>{if(D)return P.actions.push(n),()=>P.actions.pop(n)},[P,n,D]);let H=xe(P,de(r=>P.selectors.isTop(r,n),[P,n]));Ee(H,M,r=>{r.preventDefault(),m()}),ce(H,F==null?void 0:F.defaultView,r=>{r.preventDefault(),r.stopPropagation(),document.activeElement&&\"blur\"in document.activeElement&&typeof document.activeElement.blur==\"function\"&&document.activeElement.blur(),m()}),Re(u||U?!1:D,F,M),ye(D,T,m);let[oe,ne]=Oe(),re=fe(()=>[{dialogState:c,close:m,setTitleId:B,unmount:y},b],[c,m,B,y,b]),N=L({open:c===0}),le={ref:I,id:n,role:s,tabIndex:-1,\"aria-modal\":u?void 0:c===0?!0:void 0,\"aria-labelledby\":b.titleId,\"aria-describedby\":oe,unmount:y},ae=!De(),E=C.None;D&&!u&&(E|=C.RestoreFocus,E|=C.TabLock,f&&(E|=C.AutoFocus),ae&&(E|=C.InitialFocus));let ie=h();return l.createElement(ve,null,l.createElement(K,{force:!0},l.createElement(Ie,null,l.createElement(w.Provider,{value:re},l.createElement(Me,{target:T},l.createElement(K,{force:!1},l.createElement(ne,{slot:N},l.createElement(ee,null,l.createElement(Se,{initialFocus:d,initialFocusFallback:T,containers:M,features:E},l.createElement(be,{value:m},ie({ourProps:le,theirProps:S,slot:N,defaultTag:Ne,features:We,visible:c===0,name:\"Dialog\"})))))))))))}),Ne=\"div\",We=X.RenderStrategy|X.Static;function $e(e,t){let{transition:o=!1,open:a,...n}=e,i=J(),p=e.hasOwnProperty(\"open\")||i!==null,d=e.hasOwnProperty(\"onClose\");if(!p&&!d)throw new Error(\"You have to provide an `open` and an `onClose` prop to the `Dialog` component.\");if(!p)throw new Error(\"You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.\");if(!d)throw new Error(\"You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.\");if(!i&&typeof e.open!=\"boolean\")throw new Error(`You provided an \\`open\\` prop to the \\`Dialog\\`, but the value is not a boolean. Received: ${e.open}`);if(typeof e.onClose!=\"function\")throw new Error(`You provided an \\`onClose\\` prop to the \\`Dialog\\`, but the value is not a function. Received: ${e.onClose}`);return(a!==void 0||o)&&!n.static?l.createElement(Y,null,l.createElement(Ge,{show:a,transition:o,unmount:n.unmount},l.createElement(z,{ref:t,...n}))):l.createElement(Y,null,l.createElement(z,{ref:t,open:a,...n}))}let je=\"div\";function Ye(e,t){let o=k(),{id:a=`headlessui-dialog-panel-${o}`,transition:n=!1,...i}=e,[{dialogState:p,unmount:d},s]=O(\"Dialog.Panel\"),f=G(t,s.panelRef),u=L({open:p===0}),y=A(I=>{I.stopPropagation()}),S={ref:f,id:a,onClick:y},R=n?q:$,g=n?{unmount:d}:{},T=h();return l.createElement(R,{...g},T({ourProps:S,theirProps:i,slot:u,defaultTag:je,name:\"Dialog.Panel\"}))}let Je=\"div\";function Ke(e,t){let{transition:o=!1,...a}=e,[{dialogState:n,unmount:i}]=O(\"Dialog.Backdrop\"),p=L({open:n===0}),d={ref:t,\"aria-hidden\":!0},s=o?q:$,f=o?{unmount:i}:{},u=h();return l.createElement(s,{...f},u({ourProps:d,theirProps:a,slot:p,defaultTag:Je,name:\"Dialog.Backdrop\"}))}let Xe=\"h2\";function Ve(e,t){let o=k(),{id:a=`headlessui-dialog-title-${o}`,...n}=e,[{dialogState:i,setTitleId:p}]=O(\"Dialog.Title\"),d=G(t);Te(()=>(p(a),()=>p(null)),[a,p]);let s=L({open:i===0}),f={ref:d,id:a};return h()({ourProps:f,theirProps:n,slot:s,defaultTag:Xe,name:\"Dialog.Title\"})}let qe=_($e),ze=_(Ye),Lt=_(Ke),Qe=_(Ve),xt=V,ht=Object.assign(qe,{Panel:ze,Title:Qe,Description:V});export{ht as Dialog,Lt as DialogBackdrop,xt as DialogDescription,ze as DialogPanel,Qe as DialogTitle};\n","import*as g from'./dom.js';let a=/([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g;function o(e){var l,n;let i=(l=e.innerText)!=null?l:\"\",t=e.cloneNode(!0);if(!g.isHTMLElement(t))return i;let u=!1;for(let f of t.querySelectorAll('[hidden],[aria-hidden],[role=\"img\"]'))f.remove(),u=!0;let r=u?(n=t.innerText)!=null?n:\"\":i;return a.test(r)&&(r=r.replace(a,\"\")),r}function F(e){let i=e.getAttribute(\"aria-label\");if(typeof i==\"string\")return i.trim();let t=e.getAttribute(\"aria-labelledby\");if(t){let u=t.split(\" \").map(r=>{let l=document.getElementById(r);if(l){let n=l.getAttribute(\"aria-label\");return typeof n==\"string\"?n.trim():o(l).trim()}return null}).filter(Boolean);if(u.length>0)return u.join(\", \")}return o(e).trim()}export{F as getTextValue};\n","import{useRef as l}from\"react\";import{getTextValue as i}from'../utils/get-text-value.js';import{useEvent as o}from'./use-event.js';function s(c){let t=l(\"\"),r=l(\"\");return o(()=>{let e=c.current;if(!e)return\"\";let u=e.innerText;if(t.current===u)return r.current;let n=i(e).trim().toLowerCase();return t.current=u,r.current=n,n})}export{s as useTextValue};\n","var T=Object.defineProperty;var y=(e,o,t)=>o in e?T(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t;var b=(e,o,t)=>(y(e,typeof o!=\"symbol\"?o+\"\":o,t),t);import{Machine as I,batch as v}from'../../machine.js';import{ActionTypes as R,stackMachines as A}from'../../machines/stack-machine.js';import{Focus as a,calculateActiveIndex as x}from'../../utils/calculate-active-index.js';import{ElementPositionState as S,computeVisualPosition as E,detectMovement as L}from'../../utils/element-movement.js';import{sortByDomNode as M}from'../../utils/focus-management.js';import{match as m}from'../../utils/match.js';var F=(t=>(t[t.Open=0]=\"Open\",t[t.Closed=1]=\"Closed\",t))(F||{}),P=(t=>(t[t.Single=0]=\"Single\",t[t.Multi=1]=\"Multi\",t))(P||{}),C=(t=>(t[t.Pointer=0]=\"Pointer\",t[t.Other=1]=\"Other\",t))(C||{}),k=(r=>(r[r.OpenListbox=0]=\"OpenListbox\",r[r.CloseListbox=1]=\"CloseListbox\",r[r.GoToOption=2]=\"GoToOption\",r[r.Search=3]=\"Search\",r[r.ClearSearch=4]=\"ClearSearch\",r[r.SelectOption=5]=\"SelectOption\",r[r.RegisterOptions=6]=\"RegisterOptions\",r[r.UnregisterOptions=7]=\"UnregisterOptions\",r[r.SetButtonElement=8]=\"SetButtonElement\",r[r.SetOptionsElement=9]=\"SetOptionsElement\",r[r.SortOptions=10]=\"SortOptions\",r[r.MarkButtonAsMoved=11]=\"MarkButtonAsMoved\",r))(k||{});function g(e,o=t=>t){let t=e.activeOptionIndex!==null?e.options[e.activeOptionIndex]:null,n=M(o(e.options.slice()),s=>s.dataRef.current.domRef.current),i=t?n.indexOf(t):null;return i===-1&&(i=null),{options:n,activeOptionIndex:i}}let D={[1](e){if(e.dataRef.current.disabled||e.listboxState===1)return e;let o=e.buttonElement?S.Tracked(E(e.buttonElement)):e.buttonPositionState;return{...e,activeOptionIndex:null,pendingFocus:{focus:a.Nothing},listboxState:1,__demoMode:!1,buttonPositionState:o}},[0](e,o){if(e.dataRef.current.disabled||e.listboxState===0)return e;let t=e.activeOptionIndex,{isSelected:n}=e.dataRef.current,i=e.options.findIndex(s=>n(s.dataRef.current.value));return i!==-1&&(t=i),{...e,frozenValue:!1,pendingFocus:o.focus,listboxState:0,activeOptionIndex:t,__demoMode:!1,buttonPositionState:S.Idle}},[2](e,o){var s,l,c,p,f;if(e.dataRef.current.disabled||e.listboxState===1)return e;let t={...e,searchQuery:\"\",activationTrigger:(s=o.trigger)!=null?s:1,__demoMode:!1};if(o.focus===a.Nothing)return{...t,activeOptionIndex:null};if(o.focus===a.Specific)return{...t,activeOptionIndex:e.options.findIndex(d=>d.id===o.id)};if(o.focus===a.Previous){let d=e.activeOptionIndex;if(d!==null){let O=e.options[d].dataRef.current.domRef,r=x(o,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:u=>u.id,resolveDisabled:u=>u.dataRef.current.disabled});if(r!==null){let u=e.options[r].dataRef.current.domRef;if(((l=O.current)==null?void 0:l.previousElementSibling)===u.current||((c=u.current)==null?void 0:c.previousElementSibling)===null)return{...t,activeOptionIndex:r}}}}else if(o.focus===a.Next){let d=e.activeOptionIndex;if(d!==null){let O=e.options[d].dataRef.current.domRef,r=x(o,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:u=>u.id,resolveDisabled:u=>u.dataRef.current.disabled});if(r!==null){let u=e.options[r].dataRef.current.domRef;if(((p=O.current)==null?void 0:p.nextElementSibling)===u.current||((f=u.current)==null?void 0:f.nextElementSibling)===null)return{...t,activeOptionIndex:r}}}}let n=g(e),i=x(o,{resolveItems:()=>n.options,resolveActiveIndex:()=>n.activeOptionIndex,resolveId:d=>d.id,resolveDisabled:d=>d.dataRef.current.disabled});return{...t,...n,activeOptionIndex:i}},[3]:(e,o)=>{if(e.dataRef.current.disabled||e.listboxState===1)return e;let n=e.searchQuery!==\"\"?0:1,i=e.searchQuery+o.value.toLowerCase(),l=(e.activeOptionIndex!==null?e.options.slice(e.activeOptionIndex+n).concat(e.options.slice(0,e.activeOptionIndex+n)):e.options).find(p=>{var f;return!p.dataRef.current.disabled&&((f=p.dataRef.current.textValue)==null?void 0:f.startsWith(i))}),c=l?e.options.indexOf(l):-1;return c===-1||c===e.activeOptionIndex?{...e,searchQuery:i}:{...e,searchQuery:i,activeOptionIndex:c,activationTrigger:1}},[4](e){return e.dataRef.current.disabled||e.listboxState===1||e.searchQuery===\"\"?e:{...e,searchQuery:\"\"}},[5](e){return e.dataRef.current.mode===0?{...e,frozenValue:!0}:{...e}},[6]:(e,o)=>{let t=e.options.concat(o.options),n=e.activeOptionIndex;if(e.pendingFocus.focus!==a.Nothing&&(n=x(e.pendingFocus,{resolveItems:()=>t,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:i=>i.id,resolveDisabled:i=>i.dataRef.current.disabled})),e.activeOptionIndex===null){let{isSelected:i}=e.dataRef.current;if(i){let s=t.findIndex(l=>i==null?void 0:i(l.dataRef.current.value));s!==-1&&(n=s)}}return{...e,options:t,activeOptionIndex:n,pendingFocus:{focus:a.Nothing},pendingShouldSort:!0}},[7]:(e,o)=>{let t=e.options,n=[],i=new Set(o.options);for(let[s,l]of t.entries())if(i.has(l.id)&&(n.push(s),i.delete(l.id),i.size===0))break;if(n.length>0){t=t.slice();for(let s of n.reverse())t.splice(s,1)}return{...e,options:t,activationTrigger:1}},[8]:(e,o)=>e.buttonElement===o.element?e:{...e,buttonElement:o.element},[9]:(e,o)=>e.optionsElement===o.element?e:{...e,optionsElement:o.element},[10]:e=>e.pendingShouldSort?{...e,...g(e),pendingShouldSort:!1}:e,[11](e){return e.buttonPositionState.kind!==\"Tracked\"?e:{...e,buttonPositionState:S.Moved}}};class h extends I{constructor(t){super(t);b(this,\"actions\",{onChange:t=>{let{onChange:n,compare:i,mode:s,value:l}=this.state.dataRef.current;return m(s,{[0]:()=>n==null?void 0:n(t),[1]:()=>{let c=l.slice(),p=c.findIndex(f=>i(f,t));return p===-1?c.push(t):c.splice(p,1),n==null?void 0:n(c)}})},registerOption:v(()=>{let t=[],n=new Set;return[(i,s)=>{n.has(s)||(n.add(s),t.push({id:i,dataRef:s}))},()=>(n.clear(),this.send({type:6,options:t.splice(0)}))]}),unregisterOption:v(()=>{let t=[];return[n=>t.push(n),()=>{this.send({type:7,options:t.splice(0)})}]}),goToOption:v(()=>{let t=null;return[(n,i)=>{t={type:2,...n,trigger:i}},()=>t&&this.send(t)]}),closeListbox:()=>{this.send({type:1})},openListbox:t=>{this.send({type:0,focus:t})},selectActiveOption:()=>{var t;if(this.state.activeOptionIndex!==null){let{dataRef:n}=this.state.options[this.state.activeOptionIndex];this.actions.selectOption(n.current.value)}else this.state.dataRef.current.mode===0&&(this.actions.closeListbox(),(t=this.state.buttonElement)==null||t.focus({preventScroll:!0}))},selectOption:t=>{this.send({type:5,value:t})},search:t=>{this.send({type:3,value:t})},clearSearch:()=>{this.send({type:4})},setButtonElement:t=>{this.send({type:8,element:t})},setOptionsElement:t=>{this.send({type:9,element:t})}});b(this,\"selectors\",{activeDescendantId(t){var s;let n=t.activeOptionIndex,i=t.options;return n===null||(s=i[n])==null?void 0:s.id},isActive(t,n){var l;let i=t.activeOptionIndex,s=t.options;return i!==null?((l=s[i])==null?void 0:l.id)===n:!1},hasFrozenValue(t){return t.frozenValue},shouldScrollIntoView(t,n){return t.__demoMode||t.listboxState!==0||t.activationTrigger===0?!1:this.isActive(t,n)},didButtonMove(t){return t.buttonPositionState.kind===\"Moved\"}});this.on(6,()=>{requestAnimationFrame(()=>{this.send({type:10})})});{let n=this.state.id,i=A.get(null);this.disposables.add(i.on(R.Push,s=>{!i.selectors.isTop(s,n)&&this.state.listboxState===0&&this.actions.closeListbox()})),this.on(0,()=>i.actions.push(n)),this.on(1,()=>i.actions.pop(n))}this.disposables.group(n=>{this.on(1,i=>{i.buttonElement&&(n.dispose(),n.add(L(i.buttonElement,i.buttonPositionState,()=>{this.send({type:11})})))})}),this.on(5,(n,i)=>{var s;this.actions.onChange(i.value),this.state.dataRef.current.mode===0&&(this.actions.closeListbox(),(s=this.state.buttonElement)==null||s.focus({preventScroll:!0}))})}static new({id:t,__demoMode:n=!1}){return new h({id:t,dataRef:{current:{}},listboxState:n?0:1,options:[],searchQuery:\"\",activeOptionIndex:null,activationTrigger:1,buttonElement:null,optionsElement:null,pendingShouldSort:!1,pendingFocus:{focus:a.Nothing},frozenValue:!1,__demoMode:n,buttonPositionState:S.Idle})}reduce(t,n){return m(n.type,D,t,n)}}export{k as ActionTypes,C as ActivationTrigger,h as ListboxMachine,F as ListboxStates,P as ValueMode};\n","import{createContext as n,useContext as r,useMemo as i}from\"react\";import{useOnUnmount as s}from'../../hooks/use-on-unmount.js';import{ListboxMachine as a}from'./listbox-machine.js';const c=n(null);function p(o){let e=r(c);if(e===null){let t=new Error(`<${o} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}return e}function u({id:o,__demoMode:e=!1}){let t=i(()=>a.new({id:o,__demoMode:e}),[]);return s(()=>t.dispose()),t}export{c as ListboxContext,u as useListboxMachine,p as useListboxMachineContext};\n","\"use client\";import{useFocusRing as Ee}from\"@react-aria/focus\";import{useHover as he}from\"@react-aria/interactions\";import D,{Fragment as ce,createContext as fe,useCallback as K,useContext as Te,useEffect as Ae,useMemo as _e,useRef as ae,useState as Se}from\"react\";import{flushSync as ie}from\"react-dom\";import{useActivePress as De}from'../../hooks/use-active-press.js';import{useByComparator as Re}from'../../hooks/use-by-comparator.js';import{useControllable as Fe}from'../../hooks/use-controllable.js';import{useDefaultValue as Ce}from'../../hooks/use-default-value.js';import{useDisposables as Me}from'../../hooks/use-disposables.js';import{useElementSize as we}from'../../hooks/use-element-size.js';import{useEvent as B}from'../../hooks/use-event.js';import{useHandleToggle as Be}from'../../hooks/use-handle-toggle.js';import{useId as Y}from'../../hooks/use-id.js';import{useInertOthers as Ie}from'../../hooks/use-inert-others.js';import{useIsoMorphicEffect as se}from'../../hooks/use-iso-morphic-effect.js';import{useLatestValue as ke}from'../../hooks/use-latest-value.js';import{useOnDisappear as Ue}from'../../hooks/use-on-disappear.js';import{useOutsideClick as Ne}from'../../hooks/use-outside-click.js';import{useOwnerDocument as be}from'../../hooks/use-owner.js';import{Action as Z,useQuickRelease as He}from'../../hooks/use-quick-release.js';import{useResolveButtonType as Ge}from'../../hooks/use-resolve-button-type.js';import{useScrollLock as Ve}from'../../hooks/use-scroll-lock.js';import{useSlot as z}from'../../hooks/use-slot.js';import{useSyncRefs as X}from'../../hooks/use-sync-refs.js';import{useTextValue as Ke}from'../../hooks/use-text-value.js';import{useTrackedPointer as ze}from'../../hooks/use-tracked-pointer.js';import{transitionDataAttributes as We,useTransition as Xe}from'../../hooks/use-transition.js';import{useDisabled as je}from'../../internal/disabled.js';import{FloatingProvider as Je,useFloatingPanel as Qe,useFloatingPanelProps as $e,useFloatingReference as qe,useFloatingReferenceProps as Ye,useResolvedAnchor as Ze}from'../../internal/floating.js';import{FormFields as et}from'../../internal/form-fields.js';import{useFrozenData as tt}from'../../internal/frozen.js';import{useProvidedId as ot}from'../../internal/id.js';import{OpenClosedProvider as nt,State as ee,useOpenClosed as rt}from'../../internal/open-closed.js';import{stackMachines as lt}from'../../machines/stack-machine.js';import{useSlice as g}from'../../react-glue.js';import{Focus as v}from'../../utils/calculate-active-index.js';import{disposables as at}from'../../utils/disposables.js';import*as it from'../../utils/dom.js';import{Focus as me,FocusableMode as st,focusFrom as pt,isFocusableElement as ut}from'../../utils/focus-management.js';import{attemptSubmit as dt}from'../../utils/form.js';import{match as te}from'../../utils/match.js';import{isActiveElement as ct}from'../../utils/owner.js';import{RenderFeatures as ye,forwardRefWithAs as j,mergeProps as xe,useRender as J}from'../../utils/render.js';import{useDescribedBy as ft}from'../description/description.js';import{Keys as d}from'../keyboard.js';import{Label as Tt,useLabelledBy as bt,useLabels as mt}from'../label/label.js';import{Portal as yt}from'../portal/portal.js';import{ActionTypes as xt,ActivationTrigger as pe,ListboxStates as T,ValueMode as G}from'./listbox-machine.js';import{ListboxContext as Ot,useListboxMachine as Lt,useListboxMachineContext as ue}from'./listbox-machine-glue.js';let oe=fe(null);oe.displayName=\"ListboxDataContext\";function Q(b){let E=Te(oe);if(E===null){let m=new Error(`<${b} /> is missing a parent <Listbox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(m,Q),m}return E}let Pt=ce;function gt(b,E){let m=Y(),u=je(),{value:s,defaultValue:a,form:_,name:i,onChange:y,by:o,invalid:x=!1,disabled:O=u||!1,horizontal:l=!1,multiple:t=!1,__demoMode:p=!1,...S}=b;const h=l?\"horizontal\":\"vertical\";let I=X(E),R=Ce(a),[c=t?[]:void 0,L]=Fe(s,y,R),f=Lt({id:m,__demoMode:p}),k=ae({static:!1,hold:!1}),N=ae(new Map),C=Re(o),V=K(P=>te(n.mode,{[G.Multi]:()=>c.some(W=>C(W,P)),[G.Single]:()=>C(c,P)}),[c]),n=z({value:c,disabled:O,invalid:x,mode:t?G.Multi:G.Single,orientation:h,onChange:L,compare:C,isSelected:V,optionsPropsRef:k,listRef:N});se(()=>{f.state.dataRef.current=n},[n]);let F=g(f,P=>P.listboxState),U=lt.get(null),H=g(U,K(P=>U.selectors.isTop(P,m),[U,m])),[A,$]=g(f,P=>[P.buttonElement,P.optionsElement]);Ne(H,[A,$],(P,W)=>{f.send({type:xt.CloseListbox}),ut(W,st.Loose)||(P.preventDefault(),A==null||A.focus())});let r=z({open:F===T.Open,disabled:O,invalid:x,value:c}),[M,ne]=mt({inherit:!0}),re={ref:I},q=K(()=>{if(R!==void 0)return L==null?void 0:L(R)},[L,R]),le=J();return D.createElement(ne,{value:M,props:{htmlFor:A==null?void 0:A.id},slot:{open:F===T.Open,disabled:O}},D.createElement(Je,null,D.createElement(Ot.Provider,{value:f},D.createElement(oe.Provider,{value:n},D.createElement(nt,{value:te(F,{[T.Open]:ee.Open,[T.Closed]:ee.Closed})},i!=null&&c!=null&&D.createElement(et,{disabled:O,data:{[i]:c},form:_,onReset:q}),le({ourProps:re,theirProps:S,slot:r,defaultTag:Pt,name:\"Listbox\"}))))))}let vt=\"button\";function Et(b,E){let m=Y(),u=ot(),s=Q(\"Listbox.Button\"),a=ue(\"Listbox.Button\"),{id:_=u||`headlessui-listbox-button-${m}`,disabled:i=s.disabled||!1,autoFocus:y=!1,...o}=b,x=X(E,qe(),a.actions.setButtonElement),O=Ye(),[l,t,p]=g(a,r=>[r.listboxState,r.buttonElement,r.optionsElement]),S=l===T.Open;He(S,{trigger:t,action:K(r=>{if(t!=null&&t.contains(r.target))return Z.Ignore;let M=r.target.closest('[role=\"option\"]:not([data-disabled])');return it.isHTMLElement(M)?Z.Select(M):p!=null&&p.contains(r.target)?Z.Ignore:Z.Close},[t,p]),close:a.actions.closeListbox,select:a.actions.selectActiveOption});let h=B(r=>{switch(r.key){case d.Enter:dt(r.currentTarget);break;case d.Space:case d.ArrowDown:r.preventDefault(),a.actions.openListbox({focus:s.value?v.Nothing:v.First});break;case d.ArrowUp:r.preventDefault(),a.actions.openListbox({focus:s.value?v.Nothing:v.Last});break}}),I=B(r=>{switch(r.key){case d.Space:r.preventDefault();break}}),R=Be(r=>{var M;a.state.listboxState===T.Open?(ie(()=>a.actions.closeListbox()),(M=a.state.buttonElement)==null||M.focus({preventScroll:!0})):(r.preventDefault(),a.actions.openListbox({focus:v.Nothing}))}),c=B(r=>r.preventDefault()),L=bt([_]),f=ft(),{isFocusVisible:k,focusProps:N}=Ee({autoFocus:y}),{isHovered:C,hoverProps:V}=he({isDisabled:i}),{pressed:n,pressProps:F}=De({disabled:i}),U=z({open:l===T.Open,active:n||l===T.Open,disabled:i,invalid:s.invalid,value:s.value,hover:C,focus:k,autofocus:y}),H=g(a,r=>r.listboxState===T.Open),A=xe(O(),{ref:x,id:_,type:Ge(b,t),\"aria-haspopup\":\"listbox\",\"aria-controls\":p==null?void 0:p.id,\"aria-expanded\":H,\"aria-labelledby\":L,\"aria-describedby\":f,disabled:i||void 0,autoFocus:y,onKeyDown:h,onKeyUp:I,onKeyPress:c},R,N,V,F);return J()({ourProps:A,theirProps:o,slot:U,defaultTag:vt,name:\"Listbox.Button\"})}let Oe=fe(!1),ht=\"div\",At=ye.RenderStrategy|ye.Static;function _t(b,E){let m=Y(),{id:u=`headlessui-listbox-options-${m}`,anchor:s,portal:a=!1,modal:_=!0,transition:i=!1,...y}=b,o=Ze(s),[x,O]=Se(null);o&&(a=!0);let l=Q(\"Listbox.Options\"),t=ue(\"Listbox.Options\"),[p,S,h,I]=g(t,e=>[e.listboxState,e.buttonElement,e.optionsElement,e.__demoMode]),R=be(S),c=be(h),L=rt(),[f,k]=Xe(i,x,L!==null?(L&ee.Open)===ee.Open:p===T.Open);Ue(f,S,t.actions.closeListbox);let N=I?!1:_&&p===T.Open;Ve(N,c);let C=I?!1:_&&p===T.Open;Ie(C,{allowed:K(()=>[S,h],[S,h])});let n=g(t,t.selectors.didButtonMove)?!1:f,F=g(t,t.selectors.hasFrozenValue)&&!b.static,U=tt(F,l.value),H=K(e=>l.compare(U,e),[l.compare,U]),A=g(t,e=>{var de;if(o==null||!((de=o==null?void 0:o.to)!=null&&de.includes(\"selection\")))return null;let w=e.options.findIndex(ve=>H(ve.dataRef.current.value));return w===-1&&(w=0),w}),$=(()=>{if(o==null)return;if(A===null)return{...o,inner:void 0};let e=Array.from(l.listRef.current.values());return{...o,inner:{listRef:{current:e},index:A}}})(),[r,M]=Qe($),ne=$e(),re=X(E,o?r:null,t.actions.setOptionsElement,O),q=Me();Ae(()=>{let e=h;e&&p===T.Open&&(ct(e)||e==null||e.focus({preventScroll:!0}))},[p,h]);let le=B(e=>{var w;switch(q.dispose(),e.key){case d.Space:if(t.state.searchQuery!==\"\")return e.preventDefault(),e.stopPropagation(),t.actions.search(e.key);case d.Enter:e.preventDefault(),e.stopPropagation(),t.actions.selectActiveOption();break;case te(l.orientation,{vertical:d.ArrowDown,horizontal:d.ArrowRight}):return e.preventDefault(),e.stopPropagation(),t.actions.goToOption({focus:v.Next});case te(l.orientation,{vertical:d.ArrowUp,horizontal:d.ArrowLeft}):return e.preventDefault(),e.stopPropagation(),t.actions.goToOption({focus:v.Previous});case d.Home:case d.PageUp:return e.preventDefault(),e.stopPropagation(),t.actions.goToOption({focus:v.First});case d.End:case d.PageDown:return e.preventDefault(),e.stopPropagation(),t.actions.goToOption({focus:v.Last});case d.Escape:e.preventDefault(),e.stopPropagation(),ie(()=>t.actions.closeListbox()),(w=t.state.buttonElement)==null||w.focus({preventScroll:!0});return;case d.Tab:e.preventDefault(),e.stopPropagation(),ie(()=>t.actions.closeListbox()),pt(t.state.buttonElement,e.shiftKey?me.Previous:me.Next);break;default:e.key.length===1&&(t.actions.search(e.key),q.setTimeout(()=>t.actions.clearSearch(),350));break}}),P=g(t,e=>{var w;return(w=e.buttonElement)==null?void 0:w.id}),W=z({open:p===T.Open}),Le=xe(o?ne():{},{id:u,ref:re,\"aria-activedescendant\":g(t,t.selectors.activeDescendantId),\"aria-multiselectable\":l.mode===G.Multi?!0:void 0,\"aria-labelledby\":P,\"aria-orientation\":l.orientation,onKeyDown:le,role:\"listbox\",tabIndex:p===T.Open?0:void 0,style:{...y.style,...M,\"--button-width\":we(f,S,!0).width},...We(k)}),Pe=J(),ge=_e(()=>l.mode===G.Multi?l:{...l,isSelected:H},[l,H]);return D.createElement(yt,{enabled:a?b.static||f:!1,ownerDocument:R},D.createElement(oe.Provider,{value:ge},Pe({ourProps:Le,theirProps:y,slot:W,defaultTag:ht,features:At,visible:n,name:\"Listbox.Options\"})))}let St=\"div\";function Dt(b,E){let m=Y(),{id:u=`headlessui-listbox-option-${m}`,disabled:s=!1,value:a,..._}=b,i=Te(Oe)===!0,y=Q(\"Listbox.Option\"),o=ue(\"Listbox.Option\"),x=g(o,n=>o.selectors.isActive(n,u)),O=y.isSelected(a),l=ae(null),t=Ke(l),p=ke({disabled:s,value:a,domRef:l,get textValue(){return t()}}),S=X(E,l,n=>{n?y.listRef.current.set(u,n):y.listRef.current.delete(u)}),h=g(o,n=>o.selectors.shouldScrollIntoView(n,u));se(()=>{if(h)return at().requestAnimationFrame(()=>{var n,F;(F=(n=l.current)==null?void 0:n.scrollIntoView)==null||F.call(n,{block:\"nearest\"})})},[h,l]),se(()=>{if(!i)return o.actions.registerOption(u,p),()=>o.actions.unregisterOption(u)},[p,u,i]);let I=B(n=>{if(s)return n.preventDefault();o.actions.selectOption(a)}),R=B(()=>{if(s)return o.actions.goToOption({focus:v.Nothing});o.actions.goToOption({focus:v.Specific,id:u})}),c=ze(),L=B(n=>c.update(n)),f=B(n=>{c.wasMoved(n)&&(s||x&&o.state.activationTrigger===pe.Pointer||o.actions.goToOption({focus:v.Specific,id:u},pe.Pointer))}),k=B(n=>{c.wasMoved(n)&&(s||x&&o.state.activationTrigger===pe.Pointer&&o.actions.goToOption({focus:v.Nothing}))}),N=z({active:x,focus:x,selected:O,disabled:s,selectedOption:O&&i}),C=i?{}:{id:u,ref:S,role:\"option\",tabIndex:s===!0?void 0:-1,\"aria-disabled\":s===!0?!0:void 0,\"aria-selected\":O,disabled:void 0,onClick:I,onFocus:R,onPointerEnter:L,onMouseEnter:L,onPointerMove:f,onMouseMove:f,onPointerLeave:k,onMouseLeave:k},V=J();return!O&&i?null:V({ourProps:C,theirProps:_,slot:N,defaultTag:St,name:\"Listbox.Option\"})}let Rt=ce;function Ft(b,E){let{options:m,placeholder:u,...s}=b,_={ref:X(E)},i=Q(\"ListboxSelectedOption\"),y=z({}),o=i.value===void 0||i.value===null||i.mode===G.Multi&&Array.isArray(i.value)&&i.value.length===0,x=J();return D.createElement(Oe.Provider,{value:!0},x({ourProps:_,theirProps:{...s,children:D.createElement(D.Fragment,null,u&&o?u:m)},slot:y,defaultTag:Rt,name:\"ListboxSelectedOption\"}))}let Ct=j(gt),Mt=j(Et),wt=Tt,Bt=j(_t),It=j(Dt),kt=j(Ft),Mo=Object.assign(Ct,{Button:Mt,Label:wt,Options:Bt,Option:It,SelectedOption:kt});export{Mo as Listbox,Mt as ListboxButton,wt as ListboxLabel,It as ListboxOption,Bt as ListboxOptions,kt as ListboxSelectedOption};\n","import styled from '@emotion/styled';\n\nimport type { FieldLabelProps, FontSizeValue } from './FieldLabel.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Map theme font size token to actual value\n */\nconst getFontSizeValue = (fontSize: FontSizeValue | undefined, theme: Theme): string => {\n  if (!fontSize) {\n    return theme.typography.fontSize.sm;\n  }\n  \n  // Check if it's a theme token key\n  const themeTokens = ['xs', 'sm', 'base', 'md', 'lg', 'xl'] as const;\n  if (themeTokens.includes(fontSize as typeof themeTokens[number])) {\n    return theme.typography.fontSize[fontSize as keyof typeof theme.typography.fontSize] || theme.typography.fontSize.sm;\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n/**\n * Container for the field label\n */\nconst Container = styled.div`\n  padding-bottom: 4px;\n`;\n\n/**\n * The label element with proper typography\n */\nconst Label = styled.label<{ $fontSize?: FontSizeValue }>`\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $fontSize }) => getFontSizeValue($fontSize, theme)};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.semibold};\n  line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n  color: ${({ theme }) => theme.colors.grey[900]};\n  display: flex;\n  align-items: center;\n`;\n\n/**\n * Required indicator asterisk\n */\nconst RequiredIndicator = styled.span`\n  color: ${({ theme }) => theme.colors.highlight};\n  margin-left: 2px;\n`;\n\n/**\n * FieldLabel Component\n *\n * A label component for form fields with optional required indicator.\n * Follows accessibility best practices by properly associating with form elements.\n *\n * @example\n * ```tsx\n * <FieldLabel label=\"Email\" htmlFor=\"email-input\" required />\n * <FieldLabel label=\"Large Label\" fontSize=\"lg\" />\n * <FieldLabel label=\"Custom Size\" fontSize=\"18px\" />\n * ```\n */\nexport function FieldLabel({\n  label,\n  required = false,\n  htmlFor,\n  id,\n  className,\n  fontSize,\n  'data-testid': testId,\n  dataTestId,\n  dataId,\n}: FieldLabelProps) {\n  if (!label || label.trim() === '') {\n    return null;\n  }\n\n  return (\n    <Container className={className} data-testid={dataTestId || testId} data-id={dataId}>\n      <Label htmlFor={htmlFor} id={id} $fontSize={fontSize}>\n        {label}\n        {required && <RequiredIndicator aria-hidden=\"true\">*</RequiredIndicator>}\n      </Label>\n    </Container>\n  );\n}\n\nexport default FieldLabel;\n","import { forwardRef } from 'react';\nimport type { CSSProperties } from 'react';\nimport styled from '@emotion/styled';\nimport { keyframes } from '@emotion/react';\n\nimport type { IconProps } from './Icon.types';\n\n// Spin animation\nconst spin = keyframes`\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n`;\n\n// Base icon styles\nconst baseIconStyles = `\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  user-select: none;\n  vertical-align: middle;\n  line-height: 1;\n\n  /* Size variants */\n  &[data-size='xs'] {\n    width: 12px;\n    height: 12px;\n    font-size: 12px;\n  }\n\n  &[data-size='sm'] {\n    width: 16px;\n    height: 16px;\n    font-size: 16px;\n  }\n\n  &[data-size='md'] {\n    width: 20px;\n    height: 20px;\n    font-size: 20px;\n  }\n\n  &[data-size='lg'] {\n    width: 24px;\n    height: 24px;\n    font-size: 24px;\n  }\n\n  &[data-size='xl'] {\n    width: 32px;\n    height: 32px;\n    font-size: 32px;\n  }\n\n  /* Color variants - using semantic colors from theme */\n  &[data-color='inherit'] {\n    color: inherit;\n  }\n\n  &[data-color='primary'] {\n    color: #211c1c;\n  }\n\n  &[data-color='secondary'] {\n    color: #737373;\n  }\n\n  &[data-color='info'] {\n    color: #0053CD;\n  }\n\n  &[data-color='success'] {\n    color: #2B8048;\n  }\n\n  &[data-color='warning'] {\n    color: #F86C05;\n  }\n\n  &[data-color='error'] {\n    color: #CA212B;\n  }\n\n  &[data-color='muted'] {\n    color: #adadb0;\n  }\n`;\n\n// Material Symbols styled component\nconst MaterialIcon = styled.span<{ $spin?: boolean; $hasRotate?: boolean }>`\n  ${baseIconStyles}\n\n  /* Material Symbols font styling */\n  font-family: 'Material Symbols Outlined';\n  font-weight: normal;\n  font-style: normal;\n  line-height: 1;\n  letter-spacing: normal;\n  text-transform: none;\n  white-space: nowrap;\n  word-wrap: normal;\n  direction: ltr;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  text-rendering: optimizeLegibility;\n  font-feature-settings: 'liga';\n\n  /* Spin animation */\n  animation: ${({ $spin }) => ($spin ? `${spin} 1s linear infinite` : 'none')};\n\n  /* Rotation transform */\n  transform: ${({ $hasRotate }) => ($hasRotate ? 'rotate(var(--icon-rotate, 0deg))' : 'none')};\n`;\n\n// SVG Icon styled component\nconst SvgIcon = styled.span<{ $spin?: boolean; $hasRotate?: boolean }>`\n  ${baseIconStyles}\n\n  /* SVG icon styling */\n  width: 100%;\n  height: 100%;\n\n  svg {\n    display: block;\n    width: 100%;\n    height: 100%;\n    fill: currentColor;\n  }\n\n  /* Spin animation */\n  animation: ${({ $spin }) => ($spin ? `${spin} 1s linear infinite` : 'none')};\n\n  /* Rotation transform */\n  transform: ${({ $hasRotate }) => ($hasRotate ? 'rotate(var(--icon-rotate, 0deg))' : 'none')};\n`;\n\n/**\n * Icon component - Flexible icon component supporting Material Symbols and custom SVG\n *\n * @example\n * ```tsx\n * // Using Material Symbols\n * <Icon name=\"folder\" size=\"md\" color=\"primary\" />\n * <Icon name=\"download\" size=\"lg\" />\n * <Icon name=\"search\" />\n *\n * // Using custom SVG\n * <Icon size=\"md\" color=\"error\">\n *   <svg viewBox=\"0 0 24 24\">\n *     <path d=\"M...\" />\n *   </svg>\n * </Icon>\n *\n * // With spin animation\n * <Icon name=\"refresh\" spin />\n *\n * // With rotation\n * <Icon name=\"arrow_forward\" rotate={90} />\n * ```\n */\nexport const Icon = forwardRef<HTMLSpanElement, IconProps>(\n  (\n    {\n      name,\n      children,\n      size = 'md',\n      color = 'inherit',\n      spin: spinProp = false,\n      rotate,\n      'aria-label': ariaLabel,\n      'aria-hidden': ariaHidden = false,\n      className,\n      style,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    // Determine if using Material Symbols or custom SVG\n    const isMaterialIcon = !!name && !children;\n    const isCustomSvg = !!children;\n\n    // Calculate size\n    const sizeValue = typeof size === 'number' ? `${size}px` : undefined;\n\n    // Build inline styles\n    const inlineStyles: CSSProperties = {\n      ...style,\n      ...(sizeValue && {\n        width: sizeValue,\n        height: sizeValue,\n        fontSize: sizeValue,\n      }),\n      ...(rotate !== undefined &&\n        ({\n          '--icon-rotate': `${rotate}deg`,\n        } as CSSProperties)),\n    };\n\n    // Determine if icon should have role=\"img\"\n    const shouldHaveRole = isCustomSvg && ariaLabel && !ariaHidden;\n\n    if (isMaterialIcon) {\n      return (\n        <MaterialIcon\n          ref={ref}\n          className={className}\n          style={inlineStyles}\n          data-icon-type=\"material\"\n          data-size={typeof size === 'string' ? size : 'custom'}\n          data-color={color}\n          data-spin={spinProp.toString()}\n          data-rotate={rotate !== undefined ? 'true' : undefined}\n          $spin={spinProp}\n          $hasRotate={rotate !== undefined}\n          aria-label={ariaLabel}\n          aria-hidden={ariaHidden || (!ariaLabel && !shouldHaveRole) ? true : undefined}\n          role={shouldHaveRole ? 'img' : undefined}\n          data-testid={dataTestId || testId}\n          data-id={dataId}\n        >\n          {name}\n        </MaterialIcon>\n      );\n    }\n\n    return (\n      <SvgIcon\n        ref={ref}\n        className={className}\n        style={inlineStyles}\n        data-icon-type=\"svg\"\n        data-size={typeof size === 'string' ? size : 'custom'}\n        data-color={color}\n        data-spin={spinProp.toString()}\n        data-rotate={rotate !== undefined ? 'true' : undefined}\n        $spin={spinProp}\n        $hasRotate={rotate !== undefined}\n        aria-label={ariaLabel}\n        aria-hidden={ariaHidden || (!ariaLabel && !shouldHaveRole) ? true : undefined}\n        role={shouldHaveRole ? 'img' : undefined}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {children}\n      </SvgIcon>\n    );\n  }\n);\n\nIcon.displayName = 'Icon';\n\nexport default Icon;","import { keyframes } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { useEffect, useRef, useCallback, forwardRef, useState } from 'react';\n\nimport { Icon } from '../Icon';\n\nimport type {\n  MessageProps,\n  MessageVariant,\n  MessageSize,\n  MessageDisplayMode,\n  MessageTextColor,\n  InternalSnackbarProps,\n} from './Message.types';\nimport type { Theme } from '../../theme';\nimport type { IconColor } from '../Icon';\n\n/**\n * Configuration for each message variant\n */\nconst variantConfig: Record<\n  MessageVariant,\n  {\n    iconName: string;\n    iconColor: IconColor;\n    getContextColor: (theme: Theme) => string;\n    getBannerBackground: (theme: Theme) => string;\n    getBannerBorderColor: (theme: Theme) => string;\n    role: 'alert' | 'status' | undefined;\n  }\n> = {\n  info: {\n    iconName: 'info',\n    iconColor: 'info',\n    getContextColor: (theme: Theme) => theme.colors.semantic.blue.base,\n    getBannerBackground: (theme: Theme) => theme.colors.semantic.blue.lighter,\n    getBannerBorderColor: (theme: Theme) => theme.colors.semantic.blue.base,\n    role: 'status',\n  },\n  error: {\n    iconName: 'error',\n    iconColor: 'error',\n    getContextColor: (theme: Theme) => theme.colors.semantic.red.base,\n    getBannerBackground: (theme: Theme) => theme.colors.semantic.red.lighter,\n    getBannerBorderColor: (theme: Theme) => theme.colors.semantic.red.base,\n    role: 'alert',\n  },\n  warning: {\n    iconName: 'warning',\n    iconColor: 'warning',\n    getContextColor: (theme: Theme) => theme.colors.semantic.orange.base,\n    getBannerBackground: (theme: Theme) => theme.colors.semantic.orange.lighter,\n    getBannerBorderColor: (theme: Theme) => theme.colors.semantic.orange.base,\n    role: 'status',\n  },\n  success: {\n    iconName: 'check_circle',\n    iconColor: 'success',\n    getContextColor: (theme: Theme) => theme.colors.semantic.green.base,\n    getBannerBackground: (theme: Theme) => theme.colors.semantic.green.lighter,\n    getBannerBorderColor: (theme: Theme) => theme.colors.semantic.green.base,\n    role: 'status',\n  },\n  assistive: {\n    iconName: 'help',\n    iconColor: 'muted',\n    getContextColor: (theme: Theme) => theme.colors.text.secondary,\n    getBannerBackground: (theme: Theme) => theme.colors.grey[100],\n    getBannerBorderColor: (theme: Theme) => theme.colors.grey[400],\n    role: undefined,\n  },\n};\n\n// Animation keyframes for snackbar\nconst slideIn = keyframes`\n  from {\n    transform: translateX(100%);\n    opacity: 0;\n  }\n  to {\n    transform: translateX(0);\n    opacity: 1;\n  }\n`;\n\nconst slideOut = keyframes`\n  from {\n    transform: translateX(0);\n    opacity: 1;\n  }\n  to {\n    transform: translateX(100%);\n    opacity: 0;\n  }\n`;\n\n/**\n * Base container for inline messages\n */\nconst InlineContainer = styled.div`\n  margin-top: 4px;\n  display: inline-flex;\n  align-items: center;\n`;\n\n/**\n * Banner container with background and border\n */\nconst BannerContainer = styled.div<{\n  theme?: Theme;\n  $variant: MessageVariant;\n  $maxWidth?: string | number;\n}>`\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 12px 16px;\n  border-radius: 8px;\n  border-left: 4px solid;\n  margin-bottom: 16px;\n  background-color: ${({ theme, $variant }) =>\n    variantConfig[$variant].getBannerBackground(theme)};\n  border-left-color: ${({ theme, $variant }) =>\n    variantConfig[$variant].getBannerBorderColor(theme)};\n  ${({ $maxWidth }) =>\n    $maxWidth\n      ? `max-width: ${typeof $maxWidth === 'number' ? `${$maxWidth}px` : $maxWidth};`\n      : ''}\n`;\n\n/**\n * Snackbar container with animation\n */\nconst SnackbarContainer = styled.div<{\n  theme?: Theme;\n  $variant: MessageVariant;\n  $isExiting?: boolean;\n  $maxWidth?: string | number;\n}>`\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 12px 16px;\n  border-radius: 8px;\n  border-left: 4px solid;\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n  min-width: 300px;\n  max-width: ${({ $maxWidth }) =>\n    $maxWidth\n      ? typeof $maxWidth === 'number'\n        ? `${$maxWidth}px`\n        : $maxWidth\n      : '500px'};\n  background-color: ${({ theme, $variant }) =>\n    variantConfig[$variant].getBannerBackground(theme)};\n  border-left-color: ${({ theme, $variant }) =>\n    variantConfig[$variant].getBannerBorderColor(theme)};\n  animation: ${(props) => (props.$isExiting ? slideOut : slideIn)} 0.3s ease-out;\n  animation-fill-mode: forwards;\n`;\n\n/**\n * Wrapper for the icon\n */\nconst IconWrapper = styled.span`\n  display: inline-flex;\n  align-items: center;\n  flex-shrink: 0;\n`;\n\n/**\n * Inline icon wrapper (smaller margin)\n */\nconst InlineIconWrapper = styled(IconWrapper)`\n  margin-right: 4px;\n`;\n\n/**\n * Content wrapper for banner/snackbar\n */\nconst ContentWrapper = styled.div`\n  flex: 1;\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n`;\n\n/**\n * Wrapper for toggle button to position it bottom-right\n */\nconst ToggleWrapper = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  margin-top: 4px;\n`;\n\n/**\n * Message text with variant-based coloring\n */\nconst MessageText = styled.span<{\n  theme?: Theme;\n  $variant: MessageVariant;\n  $size: MessageSize;\n  $textColor: MessageTextColor;\n  $customColor?: string;\n  $mode: MessageDisplayMode;\n  $truncateLines?: number;\n  $isExpanded?: boolean;\n}>`\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $size }) => {\n    switch ($size) {\n      case 'tn':\n        return theme.typography.fontSize.tn;\n      case 'xs':\n        return theme.typography.fontSize.xs;\n      case 'md':\n        return theme.typography.fontSize.md;\n      case 'sm':\n      default:\n        return theme.typography.fontSize.sm;\n    }\n  }};\n  line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n  color: ${({ theme, $variant, $textColor, $customColor }) => {\n    if ($textColor === 'custom' && $customColor) {\n      return $customColor;\n    }\n    if ($textColor === 'default') {\n      return theme.colors.text.primary;\n    }\n    // context color\n    return variantConfig[$variant].getContextColor(theme);\n  }};\n  word-break: break-word;\n  \n  /* Line clamping for truncation */\n  ${({ $truncateLines, $isExpanded }) =>\n    $truncateLines && $truncateLines > 0 && !$isExpanded\n      ? `\n    display: -webkit-box;\n    -webkit-line-clamp: ${$truncateLines};\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  `\n      : ''}\n`;\n\n/**\n * Toggle button for Show More / Show Less\n */\nconst ToggleButton = styled.button<{\n  theme?: Theme;\n  $variant: MessageVariant;\n  $size: MessageSize;\n}>`\n  background: none;\n  border: none;\n  padding: 0;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $size }) => {\n    switch ($size) {\n      case 'tn':\n        return theme.typography.fontSize.tn;\n      case 'xs':\n        return theme.typography.fontSize.xs;\n      case 'md':\n        return theme.typography.fontSize.md;\n      case 'sm':\n      default:\n        return theme.typography.fontSize.sm;\n    }\n  }};\n  font-weight: 600;\n  text-decoration: underline;\n  cursor: pointer;\n  color: ${({ theme, $variant }) => variantConfig[$variant].getContextColor(theme)};\n\n  &:hover {\n    opacity: 0.8;\n  }\n\n  &:focus-visible {\n    outline: 2px solid currentColor;\n    outline-offset: 2px;\n  }\n`;\n\n/**\n * Action button for snackbar\n */\nconst ActionButton = styled.button<{ theme?: Theme; $variant: MessageVariant }>`\n  background: none;\n  border: none;\n  padding: 4px 8px;\n  margin: 4px 0 0 -8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border-radius: 4px;\n  transition: background-color 0.2s;\n  color: ${({ theme, $variant }) => variantConfig[$variant].getContextColor(theme)};\n  align-self: flex-start;\n  width: fit-content;\n\n  &:hover {\n    background-color: rgba(0, 0, 0, 0.05);\n  }\n\n  &:focus-visible {\n    outline: 2px solid currentColor;\n    outline-offset: 2px;\n  }\n`;\n\n/**\n * Close button for snackbar\n */\nconst CloseButton = styled.button<{ theme?: Theme; $variant: MessageVariant }>`\n  background: none;\n  border: none;\n  padding: 4px;\n  cursor: pointer;\n  border-radius: 4px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: ${({ theme, $variant }) => variantConfig[$variant].getContextColor(theme)};\n  opacity: 0.7;\n  transition: opacity 0.2s, background-color 0.2s;\n  flex-shrink: 0;\n\n  &:hover {\n    opacity: 1;\n    background-color: rgba(0, 0, 0, 0.05);\n  }\n\n  &:focus-visible {\n    outline: 2px solid currentColor;\n    outline-offset: 2px;\n  }\n`;\n\n/**\n * Message - Unified message component for displaying various types of feedback\n *\n * Supports multiple variants: info, error, warning, and success.\n * Supports multiple display modes: inline, banner, and snackbar.\n * Each variant has its own default icon, color, and accessibility role.\n *\n * @example\n * ```tsx\n * // Inline error message (default)\n * <Message variant=\"error\">This field is required</Message>\n *\n * // Banner message with background\n * <Message variant=\"warning\" mode=\"banner\">This action cannot be undone</Message>\n *\n * // Snackbar message with timeout\n * <Message\n *   variant=\"success\"\n *   mode=\"snackbar\"\n *   onClose={() => setOpen(false)}\n *   action={{ label: 'Undo', onClick: handleUndo }}\n * >\n *   Your changes have been saved\n * </Message>\n *\n * // Message with default (black) text color\n * <Message variant=\"info\" textColor=\"default\">Information</Message>\n *\n * // Message without icon\n * <Message variant=\"error\" showIcon={false}>Error text only</Message>\n * ```\n */\nexport const Message = forwardRef<HTMLDivElement, MessageProps | InternalSnackbarProps>(\n  (\n    {\n      variant,\n      children,\n      mode = 'inline',\n      size = 'sm',\n      textColor = 'context',\n      customTextColor,\n      icon,\n      showIcon = true,\n      open = true,\n      autoHideDuration = 5000,\n      onClose,\n      action,\n      showCloseButton = true,\n      maxWidth,\n      truncateLines,\n      showMoreText = 'Show More',\n      showLessText = 'Show Less',\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      ...rest\n    },\n    ref\n  ) => {\n    const isExiting = (rest as InternalSnackbarProps).isExiting;\n    const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n    const textRef = useRef<HTMLSpanElement>(null);\n    const [isExpanded, setIsExpanded] = useState(false);\n    const [needsTruncation, setNeedsTruncation] = useState(false);\n\n    const handleClose = useCallback(() => {\n      if (onClose) {\n        onClose();\n      }\n    }, [onClose]);\n\n    // Auto-hide timer for snackbar mode\n    useEffect(() => {\n      if (mode === 'snackbar' && open && autoHideDuration !== null && autoHideDuration > 0) {\n        timerRef.current = setTimeout(() => {\n          handleClose();\n        }, autoHideDuration);\n      }\n\n      return () => {\n        if (timerRef.current !== null) {\n          clearTimeout(timerRef.current);\n        }\n      };\n    }, [mode, open, autoHideDuration, handleClose]);\n\n    // Check if text needs truncation (only check once when not expanded)\n    useEffect(() => {\n      if (truncateLines && truncateLines > 0 && textRef.current && !isExpanded) {\n        const element = textRef.current;\n        const wouldBeTruncated = element.scrollHeight > element.clientHeight;\n        if (wouldBeTruncated) {\n          setNeedsTruncation(true);\n        }\n      }\n    }, [truncateLines, children, isExpanded]);\n\n    const handleMouseEnter = useCallback(() => {\n      if (mode === 'snackbar' && timerRef.current !== null) {\n        clearTimeout(timerRef.current);\n      }\n    }, [mode]);\n\n    const handleMouseLeave = useCallback(() => {\n      if (mode === 'snackbar' && open && autoHideDuration !== null && autoHideDuration > 0) {\n        timerRef.current = setTimeout(() => {\n          handleClose();\n        }, autoHideDuration);\n      }\n    }, [mode, open, autoHideDuration, handleClose]);\n\n    const handleToggleExpand = useCallback(() => {\n      setIsExpanded((prev) => !prev);\n    }, []);\n\n    // Handle empty or whitespace-only string children\n    if (!children || (typeof children === 'string' && children.trim() === '')) {\n      return null;\n    }\n\n    // For snackbar mode, don't render if not open\n    if (mode === 'snackbar' && !open && !isExiting) {\n      return null;\n    }\n\n    const config = variantConfig[variant];\n\n    const renderIcon = () => {\n      if (!showIcon) return null;\n\n      if (icon) {\n        return mode === 'inline' ? (\n          <InlineIconWrapper aria-hidden=\"true\">{icon}</InlineIconWrapper>\n        ) : (\n          <IconWrapper aria-hidden=\"true\">{icon}</IconWrapper>\n        );\n      }\n\n      const iconElement = <Icon name={config.iconName} size=\"sm\" color={config.iconColor} />;\n\n      return mode === 'inline' ? (\n        <InlineIconWrapper aria-hidden=\"true\">{iconElement}</InlineIconWrapper>\n      ) : (\n        <IconWrapper aria-hidden=\"true\">{iconElement}</IconWrapper>\n      );\n    };\n\n    const renderMessage = () => (\n      <MessageText\n        ref={textRef}\n        $variant={variant}\n        $size={size}\n        $textColor={textColor}\n        $customColor={customTextColor}\n        $mode={mode}\n        $truncateLines={truncateLines}\n        $isExpanded={isExpanded}\n        role={mode === 'inline' ? config.role : undefined}\n      >\n        {children}\n      </MessageText>\n    );\n\n    const renderToggleButton = () => {\n      // Show toggle button if truncation is enabled AND text needs truncation OR is currently expanded\n      if (!truncateLines || truncateLines <= 0 || (!needsTruncation && !isExpanded)) {\n        return null;\n      }\n      return (\n        <ToggleWrapper>\n          <ToggleButton\n            $variant={variant}\n            $size={size}\n            onClick={handleToggleExpand}\n            type=\"button\"\n            aria-expanded={isExpanded}\n          >\n            {isExpanded ? showLessText : showMoreText}\n          </ToggleButton>\n        </ToggleWrapper>\n      );\n    };\n\n    // Inline mode\n    if (mode === 'inline') {\n      return (\n        <InlineContainer\n          ref={ref}\n          className={className}\n          data-testid={dataTestId || testId}\n          data-id={dataId}\n        >\n          {renderIcon()}\n          {renderMessage()}\n        </InlineContainer>\n      );\n    }\n\n    // Banner mode\n    if (mode === 'banner') {\n      return (\n        <BannerContainer\n          ref={ref}\n          $variant={variant}\n          $maxWidth={maxWidth}\n          className={className}\n          role={config.role === 'alert' ? 'alert' : 'status'}\n          data-testid={dataTestId || testId}\n          data-id={dataId}\n        >\n          {renderIcon()}\n          <ContentWrapper>\n            {renderMessage()}\n            {renderToggleButton()}\n          </ContentWrapper>\n        </BannerContainer>\n      );\n    }\n\n    // Snackbar mode\n    return (\n      <SnackbarContainer\n        ref={ref}\n        $variant={variant}\n        $isExiting={isExiting}\n        $maxWidth={maxWidth}\n        className={className}\n        role=\"alert\"\n        aria-live=\"polite\"\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n        onMouseEnter={handleMouseEnter}\n        onMouseLeave={handleMouseLeave}\n      >\n        {renderIcon()}\n        <ContentWrapper>\n          {renderMessage()}\n          {renderToggleButton()}\n          {action && (\n            <ActionButton $variant={variant} onClick={action.onClick} type=\"button\">\n              {action.label}\n            </ActionButton>\n          )}\n        </ContentWrapper>\n        {showCloseButton && (\n          <CloseButton\n            $variant={variant}\n            onClick={handleClose}\n            type=\"button\"\n            aria-label=\"Close notification\"\n          >\n            <Icon name=\"close\" size=\"sm\" color=\"inherit\" />\n          </CloseButton>\n        )}\n      </SnackbarContainer>\n    );\n  }\n);\n\nMessage.displayName = 'Message';\n\nexport default Message;\n","import styled from '@emotion/styled';\nimport {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Message } from './Message';\n\nimport type { SnackbarStackProps, SnackbarStackRef, SnackbarAlert } from './SnackbarStack.types';\n\n/**\n * Container for stacking snackbars\n * Uses pointer-events: none to allow clicks to pass through to elements beneath\n */\nconst Container = styled.div<{\n  $position: SnackbarStackProps['position'];\n}>`\n  position: fixed;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  z-index: 1400;\n  pointer-events: none;\n\n  /* Position-based styles */\n  ${({ $position }) => {\n    switch ($position) {\n      case 'top-left':\n        return `\n          top: 16px;\n          left: 16px;\n          align-items: flex-start;\n        `;\n      case 'top-center':\n        return `\n          top: 16px;\n          left: 50%;\n          transform: translateX(-50%);\n          align-items: center;\n        `;\n      case 'top-right':\n        return `\n          top: 16px;\n          right: 16px;\n          align-items: flex-end;\n        `;\n      case 'bottom-left':\n        return `\n          bottom: 16px;\n          left: 16px;\n          align-items: flex-start;\n        `;\n      case 'bottom-right':\n        return `\n          bottom: 16px;\n          right: 16px;\n          align-items: flex-end;\n        `;\n      case 'bottom-center':\n      default:\n        return `\n          bottom: 16px;\n          left: 50%;\n          transform: translateX(-50%);\n          align-items: center;\n        `;\n    }\n  }}\n`;\n\n/**\n * Wrapper for individual snackbar to enable pointer events\n */\nconst SnackbarWrapper = styled.div`\n  pointer-events: auto;\n`;\n\n/**\n * SnackbarStack - A component that manages and displays multiple stacking snackbars\n *\n * This component renders snackbars in a fixed position on the screen and handles\n * their lifecycle including auto-dismiss timers and animations.\n *\n * @example\n * ```tsx\n * const [alerts, setAlerts] = useState<Map<string, SnackbarAlert>>(new Map());\n *\n * const addAlert = (alert: SnackbarAlert) => {\n *   setAlerts(prev => new Map(prev).set(alert.id, alert));\n * };\n *\n * const removeAlert = (id: string) => {\n *   setAlerts(prev => {\n *     const next = new Map(prev);\n *     next.delete(id);\n *     return next;\n *   });\n * };\n *\n * <SnackbarStack\n *   alerts={alerts}\n *   onClose={removeAlert}\n *   position=\"bottom-center\"\n * />\n * ```\n */\nexport const SnackbarStack = forwardRef<SnackbarStackRef, SnackbarStackProps>(\n  (\n    {\n      alerts,\n      onAction,\n      onClose,\n      className,\n      position = 'bottom-center',\n      maxWidth,\n      dataTestId,\n    },\n    ref\n  ) => {\n    // Track alerts that are being rendered (includes those being removed)\n    const [renderedAlerts, setRenderedAlerts] = useState<Map<string, SnackbarAlert>>(new Map());\n    // Track alerts that are in the process of being removed (for exit animation)\n    const [exitingAlerts, setExitingAlerts] = useState<Set<string>>(new Set());\n    // Track timers for auto-dismiss\n    const timersRef = useRef<Record<string, ReturnType<typeof setTimeout>>>({});\n\n    // Clear a specific timer\n    const clearTimer = useCallback((id: string) => {\n      if (timersRef.current[id]) {\n        clearTimeout(timersRef.current[id]);\n        delete timersRef.current[id];\n      }\n    }, []);\n\n    // Handle closing an alert\n    const handleClose = useCallback(\n      (id: string) => {\n        clearTimer(id);\n\n        // Start exit animation\n        setExitingAlerts((prev) => new Set(prev).add(id));\n\n        // Remove after animation completes\n        setTimeout(() => {\n          setRenderedAlerts((prev) => {\n            const next = new Map(prev);\n            next.delete(id);\n            return next;\n          });\n          setExitingAlerts((prev) => {\n            const next = new Set(prev);\n            next.delete(id);\n            return next;\n          });\n        }, 300); // Match animation duration\n\n        if (onClose) {\n          onClose(id);\n        }\n      },\n      [clearTimer, onClose]\n    );\n\n    // Expose closeAlert method via ref\n    useImperativeHandle(\n      ref,\n      () => ({\n        closeAlert: handleClose,\n      }),\n      [handleClose]\n    );\n\n    // Handle new alerts and set up timers\n    useEffect(() => {\n      // Find new alerts that aren't already rendered\n      alerts.forEach((alert, id) => {\n        if (!renderedAlerts.has(id)) {\n          // Add to rendered alerts\n          setRenderedAlerts((prev) => new Map(prev).set(id, alert));\n\n          // Set up auto-dismiss timer if duration is not explicitly disabled\n          // autoHideDuration of null or 0 disables auto-dismiss\n          if (alert.autoHideDuration !== null && alert.autoHideDuration !== 0) {\n            const duration = alert.autoHideDuration ?? 5000;\n            clearTimer(id);\n            timersRef.current[id] = setTimeout(() => {\n              handleClose(id);\n            }, duration);\n          }\n        }\n      });\n\n      // Find alerts that were removed from props but are still rendered\n      renderedAlerts.forEach((_, id) => {\n        if (!alerts.has(id) && !exitingAlerts.has(id)) {\n          // Start exit animation for removed alerts\n          clearTimer(id);\n          setExitingAlerts((prev) => new Set(prev).add(id));\n          \n          // Remove after animation completes\n          setTimeout(() => {\n            setRenderedAlerts((prev) => {\n              const next = new Map(prev);\n              next.delete(id);\n              return next;\n            });\n            setExitingAlerts((prev) => {\n              const next = new Set(prev);\n              next.delete(id);\n              return next;\n            });\n          }, 300);\n        }\n      });\n    }, [alerts, renderedAlerts, exitingAlerts, clearTimer, handleClose]);\n\n    // Clean up all timers on unmount\n    useEffect(() => {\n      return () => {\n        Object.values(timersRef.current).forEach((timer) => clearTimeout(timer));\n        timersRef.current = {};\n      };\n    }, []);\n\n    // Handle action button click\n    const handleAction = useCallback(\n      (id: string, alertAction?: SnackbarAlert['action']) => {\n        if (alertAction?.onClick) {\n          alertAction.onClick();\n        }\n        if (onAction) {\n          onAction(id);\n        }\n      },\n      [onAction]\n    );\n\n    // Handle mouse enter - pause timer\n    const handleMouseEnter = useCallback(\n      (id: string) => {\n        clearTimer(id);\n      },\n      [clearTimer]\n    );\n\n    // Handle mouse leave - restart timer\n    const handleMouseLeave = useCallback(\n      (id: string, alert: SnackbarAlert) => {\n        // Don't restart timer if auto-dismiss is disabled\n        if (alert.autoHideDuration === null || alert.autoHideDuration === 0) {\n          return;\n        }\n        const duration = alert.autoHideDuration ?? 5000;\n        if (!exitingAlerts.has(id)) {\n          timersRef.current[id] = setTimeout(() => {\n            handleClose(id);\n          }, duration);\n        }\n      },\n      [exitingAlerts, handleClose]\n    );\n\n    // Don't render if no alerts\n    if (renderedAlerts.size === 0) {\n      return null;\n    }\n\n    const content = (\n      <Container $position={position} className={className} data-testid={dataTestId}>\n        {Array.from(renderedAlerts.entries()).map(([id, alert]) => {\n          const isExiting = exitingAlerts.has(id);\n\n          return (\n            <SnackbarWrapper\n              key={id}\n              onMouseEnter={() => handleMouseEnter(id)}\n              onMouseLeave={() => handleMouseLeave(id, alert)}\n            >\n              <Message\n                variant={alert.variant}\n                mode=\"snackbar\"\n                open={!isExiting}\n                isExiting={isExiting}\n                showCloseButton={alert.showCloseButton ?? true}\n                onClose={() => handleClose(id)}\n                action={\n                  alert.action\n                    ? {\n                        label: alert.action.label,\n                        onClick: () => handleAction(id, alert.action),\n                      }\n                    : undefined\n                }\n                maxWidth={maxWidth}\n                autoHideDuration={null} // We handle timers in SnackbarStack\n                dataTestId={`snackbar-${id}`}\n              >\n                {alert.message}\n              </Message>\n            </SnackbarWrapper>\n          );\n        })}\n      </Container>\n    );\n\n    // Use portal to render at document body level\n    if (typeof document !== 'undefined') {\n      return createPortal(content, document.body);\n    }\n\n    return content;\n  }\n);\n\nSnackbarStack.displayName = 'SnackbarStack';\n\nexport default SnackbarStack;\n","import { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport { SnackbarStack } from './SnackbarStack';\nimport type { SnackbarAlert } from './SnackbarStack.types';\nimport type {\n  ShowSnackbarOptions,\n  SnackbarContextValue,\n  SnackbarProviderProps,\n} from './SnackbarProvider.types';\n\n/**\n * Counter for generating unique IDs\n */\nlet idCounter = 0;\n\n/**\n * Generate a unique ID for a snackbar\n */\nconst generateId = (): string => {\n  idCounter += 1;\n  return `snackbar-${idCounter}`;\n};\n\n/**\n * Context for snackbar functionality\n */\nconst SnackbarContext = createContext<SnackbarContextValue | null>(null);\n\n/**\n * Hook to access snackbar functionality\n * Must be used within a SnackbarProvider\n *\n * @example\n * ```tsx\n * const { showSnackbar, success, error } = useSnackbar();\n *\n * // Show a custom snackbar\n * showSnackbar({ message: 'Hello!', variant: 'info' });\n *\n * // Convenience methods\n * success('Operation completed!');\n * error('Something went wrong');\n * ```\n */\nexport const useSnackbar = (): SnackbarContextValue => {\n  const context = useContext(SnackbarContext);\n  if (!context) {\n    throw new Error('useSnackbar must be used within a SnackbarProvider');\n  }\n  return context;\n};\n\n/**\n * SnackbarProvider - Provides snackbar functionality to the entire application\n *\n * Wrap your app with this provider to enable snackbar notifications anywhere\n * using the useSnackbar hook.\n *\n * @example\n * ```tsx\n * // In your app root\n * <SnackbarProvider position=\"bottom-center\">\n *   <App />\n * </SnackbarProvider>\n *\n * // In any component\n * const MyComponent = () => {\n *   const { success, error } = useSnackbar();\n *\n *   const handleSave = async () => {\n *     try {\n *       await saveData();\n *       success('Saved successfully!');\n *     } catch (e) {\n *       error('Failed to save');\n *     }\n *   };\n *\n *   return <button onClick={handleSave}>Save</button>;\n * };\n * ```\n */\nexport const SnackbarProvider = ({\n  children,\n  position = 'bottom-center',\n  maxSnackbars = 5,\n  maxWidth,\n  dataTestId,\n}: SnackbarProviderProps): ReactElement => {\n  const [alerts, setAlerts] = useState<Map<string, SnackbarAlert>>(new Map());\n  const alertOrderRef = useRef<string[]>([]);\n\n  /**\n   * Show a new snackbar notification\n   */\n  const showSnackbar = useCallback(\n    (options: ShowSnackbarOptions): string => {\n      const id = options.id ?? generateId();\n      const alert: SnackbarAlert = {\n        id,\n        message: options.message,\n        variant: options.variant ?? 'info',\n        action: options.action,\n        showCloseButton: options.showCloseButton ?? true,\n        autoHideDuration: options.autoHideDuration,\n      };\n\n      setAlerts((prev) => {\n        const next = new Map(prev);\n        next.set(id, alert);\n\n        // Track order for maxSnackbars enforcement\n        if (!alertOrderRef.current.includes(id)) {\n          alertOrderRef.current.push(id);\n        }\n\n        // Remove oldest if we exceed maxSnackbars\n        while (next.size > maxSnackbars && alertOrderRef.current.length > 0) {\n          const oldestId = alertOrderRef.current.shift();\n          if (oldestId) {\n            next.delete(oldestId);\n          }\n        }\n\n        return next;\n      });\n\n      return id;\n    },\n    [maxSnackbars]\n  );\n\n  /**\n   * Hide a specific snackbar by ID\n   */\n  const hideSnackbar = useCallback((id: string) => {\n    setAlerts((prev) => {\n      const next = new Map(prev);\n      next.delete(id);\n      return next;\n    });\n    alertOrderRef.current = alertOrderRef.current.filter((alertId) => alertId !== id);\n  }, []);\n\n  /**\n   * Clear all snackbars\n   */\n  const clearAll = useCallback(() => {\n    setAlerts(new Map());\n    alertOrderRef.current = [];\n  }, []);\n\n  /**\n   * Convenience method to show a success snackbar\n   */\n  const success = useCallback(\n    (message: ReactNode, options?: Omit<ShowSnackbarOptions, 'message' | 'variant'>): string => {\n      return showSnackbar({ ...options, message, variant: 'success' });\n    },\n    [showSnackbar]\n  );\n\n  /**\n   * Convenience method to show an error snackbar\n   */\n  const error = useCallback(\n    (message: ReactNode, options?: Omit<ShowSnackbarOptions, 'message' | 'variant'>): string => {\n      return showSnackbar({ ...options, message, variant: 'error' });\n    },\n    [showSnackbar]\n  );\n\n  /**\n   * Convenience method to show a warning snackbar\n   */\n  const warning = useCallback(\n    (message: ReactNode, options?: Omit<ShowSnackbarOptions, 'message' | 'variant'>): string => {\n      return showSnackbar({ ...options, message, variant: 'warning' });\n    },\n    [showSnackbar]\n  );\n\n  /**\n   * Convenience method to show an info snackbar\n   */\n  const info = useCallback(\n    (message: ReactNode, options?: Omit<ShowSnackbarOptions, 'message' | 'variant'>): string => {\n      return showSnackbar({ ...options, message, variant: 'info' });\n    },\n    [showSnackbar]\n  );\n\n  /**\n   * Handle snackbar close (called by SnackbarStack)\n   */\n  const handleClose = useCallback(\n    (id: string) => {\n      hideSnackbar(id);\n    },\n    [hideSnackbar]\n  );\n\n  const contextValue = useMemo<SnackbarContextValue>(\n    () => ({\n      showSnackbar,\n      hideSnackbar,\n      clearAll,\n      success,\n      error,\n      warning,\n      info,\n    }),\n    [showSnackbar, hideSnackbar, clearAll, success, error, warning, info]\n  );\n\n  return (\n    <SnackbarContext.Provider value={contextValue}>\n      {children}\n      <SnackbarStack\n        alerts={alerts}\n        onClose={handleClose}\n        position={position}\n        maxWidth={maxWidth}\n        dataTestId={dataTestId}\n      />\n    </SnackbarContext.Provider>\n  );\n};\n\nSnackbarProvider.displayName = 'SnackbarProvider';\n\nexport default SnackbarProvider;\n","import { Fragment, useState, useMemo, useEffect, forwardRef } from 'react';\nimport { Listbox, Transition } from '@headlessui/react';\nimport styled from '@emotion/styled';\nimport { keyframes, useTheme } from '@emotion/react';\n\nimport { FieldLabel } from '../FieldLabel';\nimport { Message } from '../Message';\n\nimport type { SelectProps, SelectOption, FontSizeValue } from './Select.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Map theme font size token to actual value\n */\nconst getFontSizeValue = (fontSize: FontSizeValue | undefined, theme: Theme): string | undefined => {\n  if (!fontSize) {\n    return undefined;\n  }\n  \n  // Check if it's a theme token key\n  const themeTokens = ['xs', 'sm', 'base', 'md', 'lg', 'xl'] as const;\n  if (themeTokens.includes(fontSize as typeof themeTokens[number])) {\n    return theme.typography.fontSize[fontSize as keyof typeof theme.typography.fontSize];\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n/**\n * Styled Components - Production styles from css/style.css lines 969-1143\n */\n\nconst Container = styled.div<{ $fullWidth?: boolean }>`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  position: relative;\n  width: ${props => props.$fullWidth ? '100%' : 'auto'};\n  min-width: ${props => props.$fullWidth ? 'auto' : '180px'};\n`;\n\nconst SelectWrapper = styled.div`\n  position: relative;\n  width: 100%;\n  max-width: 100%;\n  min-width: 0;\n  overflow: visible;\n`;\n\nconst Button = styled.button<{\n  $size: 'sm' | 'md';\n  $variant: 'default' | 'filled' | 'outlined';\n  $error: boolean;\n  $isOpen: boolean;\n  $hasValue: boolean;\n  $focusColor?: string;\n}>`\n  position: relative;\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 4px;\n  border-radius: ${props => props.theme.borders.radius.sm};\n  font-family: ${props => props.theme.typography.fontFamily};\n  font-weight: ${props => props.theme.typography.fontWeight.regular};\n  cursor: pointer;\n  text-align: left;\n  box-sizing: border-box;\n  color: ${props => props.$hasValue ? props.theme.colors.text.primary : props.theme.colors.text.muted};\n  background-color: ${props => props.theme.colors.white};\n  border: 1px solid ${props => props.theme.colors.border.input};\n  \n  /* Size variants (sm: 32px, md: 36px) */\n  ${props => props.$size === 'sm' && `\n    height: 32px;\n    padding: 4px 8px;\n    font-size: ${props.theme.typography.fontSize.xs};\n  `}\n  \n  ${props => props.$size === 'md' && `\n    height: 36px;\n    padding: 5px 6px 5px 12px;\n    font-size: ${props.theme.typography.fontSize.sm};\n  `}\n  \n  /* Hover state */\n  &:hover:not(:disabled) {\n    border-color: ${props => props.$focusColor || props.theme.colors.text.primary};\n    color: ${props => props.theme.colors.text.primary};\n  }\n  \n  /* Active/Open state */\n  ${props => props.$isOpen && `\n    border-color: ${props.$focusColor || props.theme.colors.text.primary};\n    color: ${props.theme.colors.text.primary};\n    ${props.$focusColor ? `box-shadow: 0 0 0 2px ${props.$focusColor}20;` : ''}\n  `}\n  \n  /* Error state */\n  ${props => props.$error && `\n    border-color: ${props.theme.colors.status.error};\n  `}\n  \n  /* Disabled state */\n  &:disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n    pointer-events: none;\n  }\n  \n  /* Focus state */\n  &:focus {\n    outline: none;\n    ${props => props.$focusColor && !props.$error ? `\n      border-color: ${props.$focusColor};\n      box-shadow: 0 0 0 2px ${props.$focusColor}20;\n    ` : ''}\n  }\n  \n  &:focus-visible {\n    outline: 2px solid ${props => props.$focusColor || `var(--colour-highlight, var(--color-highlight, ${props.theme.colors.highlight}))`};\n    outline-offset: 2px;\n  }\n`;\n\nconst ButtonContent = styled.span`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex: 1;\n  min-width: 0;\n`;\n\nconst ButtonText = styled.span<{ $fontSize?: string }>`\n  flex: 1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  display: block;\n  ${props => props.$fontSize && `font-size: ${props.$fontSize};`}\n`;\n\nconst ButtonActions = styled.span`\n  display: flex;\n  align-items: center;\n  gap: 2px;\n  flex-shrink: 0;\n`;\n\nconst ClearButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 2px;\n  border: none;\n  background: transparent;\n  cursor: pointer;\n  color: ${props => props.theme.colors.text.muted};\n  border-radius: ${props => props.theme.borders.radius.sm};\n  transition: color 0.15s ease-out, background-color 0.15s ease-out;\n  \n  &:hover {\n    color: ${props => props.theme.colors.text.primary};\n    background-color: ${props => props.theme.colors.background.hover};\n  }\n  \n  &:focus {\n    outline: none;\n  }\n  \n  &:focus-visible {\n    outline: 2px solid var(--colour-highlight, var(--color-highlight, ${props => props.theme.colors.highlight}));\n    outline-offset: 1px;\n  }\n`;\n\nconst spin = keyframes`\n  from { transform: rotate(0deg); }\n  to { transform: rotate(360deg); }\n`;\n\nconst LoadingSpinner = styled.span`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  animation: ${spin} 0.8s linear infinite;\n  color: ${props => props.theme.colors.text.muted};\n`;\n\nconst Chevron = styled.span<{ $isOpen: boolean }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: ${props => props.theme.colors.text.muted};\n  transition: transform 0.2s ease-out;\n  margin-left: 4px;\n  \n  ${props => props.$isOpen && `\n    transform: rotate(180deg);\n  `}\n`;\n\nconst Icon = styled.span`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: ${props => props.theme.colors.text.secondary};\n`;\n\nconst Options = styled.ul<{ $menuPlacement: 'auto' | 'bottom' | 'top' }>`\n  position: absolute;\n  z-index: ${props => props.theme.zIndex.dropdown};\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  width: 100%;\n  max-height: 300px;\n  overflow: auto;\n  border-radius: ${props => props.theme.borders.radius.sm};\n  background-color: ${props => props.theme.colors.white};\n  box-shadow: ${props => props.theme.shadows.dropdown};\n  outline: none;\n  color: ${props => props.theme.colors.text.primary};\n  \n  /* Menu placement */\n  ${props => props.$menuPlacement === 'top' ? `\n    bottom: 100%;\n    margin-bottom: 4px;\n  ` : `\n    top: 100%;\n    margin-top: 4px;\n  `}\n  \n  /* Transition classes for Headless UI */\n  &.leave {\n    transition: opacity 200ms ease-out;\n  }\n  \n  &.leave-from {\n    opacity: 1;\n  }\n  \n  &.leave-to {\n    opacity: 0;\n  }\n`;\n\nconst SearchWrapper = styled.div`\n  padding: 8px;\n  border-bottom: 1px solid ${props => props.theme.colors.border.light};\n`;\n\nconst SearchInput = styled.input<{ $fontSize?: string }>`\n  width: 100%;\n  padding: 8px;\n  border: 1px solid ${props => props.theme.colors.border.medium};\n  border-radius: ${props => props.theme.borders.radius.sm};\n  font-family: ${props => props.theme.typography.fontFamily};\n  font-size: ${props => props.$fontSize || props.theme.typography.fontSize.sm};\n  color: ${props => props.theme.colors.text.primary};\n  background-color: ${props => props.theme.colors.white};\n  outline: none;\n  box-sizing: border-box;\n  \n  &:focus {\n    border-color: ${props => props.theme.colors.text.primary};\n  }\n  \n  &::placeholder {\n    color: ${props => props.theme.colors.text.muted};\n  }\n`;\n\nconst OptionsList = styled.div`\n  padding: 0;\n`;\n\nconst OptionItem = styled.li<{ $active: boolean; $selected: boolean; $fontSize?: string }>`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 8px;\n  padding: 5px 12px;\n  height: 36px;\n  font-family: ${props => props.theme.typography.fontFamily};\n  font-size: ${props => props.$fontSize || props.theme.typography.fontSize.sm};\n  color: ${props => props.theme.colors.text.primary};\n  cursor: pointer;\n  user-select: none;\n  overflow: hidden;\n  white-space: nowrap;\n  \n  /* First child border radius */\n  &:first-of-type {\n    border-top-left-radius: ${props => props.theme.borders.radius.sm};\n    border-top-right-radius: ${props => props.theme.borders.radius.sm};\n  }\n  \n  /* Last child border radius */\n  &:last-of-type {\n    border-bottom-left-radius: ${props => props.theme.borders.radius.sm};\n    border-bottom-right-radius: ${props => props.theme.borders.radius.sm};\n  }\n  \n  /* Hover/Active state - uses highlight color */\n  ${props => props.$active && `\n    background-color: var(--colour-highlight, var(--color-highlight, ${props.theme.colors.highlight}));\n    color: var(--colour-highlight-text, var(--color-highlight-text, ${props.theme.colors.white}));\n  `}\n  \n  /* Selected state - uses highlight color directly (no opacity) */\n  ${props => props.$selected && !props.$active && `\n    background-color: var(--colour-highlight, var(--color-highlight, ${props.theme.colors.highlight}));\n    color: var(--colour-highlight-text, var(--color-highlight-text, ${props.theme.colors.white}));\n    opacity: 0.85;\n  `}\n  \n  /* Disabled state */\n  &[aria-disabled=\"true\"] {\n    opacity: 0.5;\n    cursor: not-allowed;\n    pointer-events: none;\n  }\n`;\n\nconst OptionContent = styled.span`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex: 1;\n  min-width: 0;\n`;\n\nconst OptionLabel = styled.span`\n  flex: 1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  display: inline-block;\n  padding: 0;\n  height: auto;\n`;\n\nconst Checkmark = styled.span`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: var(--colour-highlight-text, var(--color-highlight-text, ${props => props.theme.colors.white}));\n`;\n\nconst NoResults = styled.div<{ $fontSize?: string }>`\n  padding: 12px;\n  text-align: center;\n  font-family: ${props => props.theme.typography.fontFamily};\n  font-size: ${props => props.$fontSize || props.theme.typography.fontSize.sm};\n  color: ${props => props.theme.colors.text.muted};\n`;\n\n// Hidden input for form submission\nconst HiddenInput = styled.input`\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n`;\n\n/**\n * Select component - Accessible dropdown select using Headless UI\n *\n * @example\n * ```tsx\n * const options = [\n *   { value: '1', label: 'Option 1' },\n *   { value: '2', label: 'Option 2' },\n *   { value: '3', label: 'Option 3', disabled: true }\n * ];\n *\n * <Select\n *   value={selectedValue}\n *   onChange={setSelectedValue}\n *   options={options}\n *   placeholder=\"Select an option\"\n *   isClearable\n * />\n * ```\n */\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(function Select(\n  {\n    value,\n    onChange,\n    options,\n    label,\n    placeholder = 'Select...',\n    size = 'md',\n    variant = 'default',\n    error = false,\n    errorMessage,\n    disabled = false,\n    required = false,\n    fullWidth = false,\n    searchable = false,\n    className,\n    'aria-label': ariaLabel,\n    'aria-describedby': ariaDescribedby,\n    'aria-labelledby': ariaLabelledby,\n    'data-testid': testId,\n    dataTestId,\n    dataId,\n    isSearchable,\n    clearable,\n    isClearable = true, // Default to true - show clear button for optional fields\n    isLoading = false,\n    assistiveText,\n    onMenuOpen,\n    onMenuClose,\n    onInputChange,\n    selectRef,\n    name,\n    menuPlacement = 'bottom',\n    noResultsMessage = 'No options found',\n    searchPlaceholder = 'Search...',\n    // Font size customization props\n    labelFontSize,\n    selectedFontSize,\n    optionFontSize,\n    focusColor,\n  },\n  ref\n) {\n  const [query, setQuery] = useState('');\n  const [wasOpen, setWasOpen] = useState(false);\n  const theme = useTheme() as Theme;\n\n  // Support both searchable and isSearchable props\n  const isSearchEnabled = searchable || isSearchable;\n\n  // Support both clearable and isClearable props\n  // Clear button should not show when field is required\n  const isClearEnabled = (clearable || isClearable) && !required;\n\n  // Compute size-based default font size (sm: xs/12px, md: sm/14px)\n  const defaultFontSize = size === 'sm' ? theme.typography.fontSize.xs : theme.typography.fontSize.sm;\n  \n  // Compute resolved font sizes with size-based defaults\n  const resolvedLabelFontSize = getFontSizeValue(labelFontSize, theme) || defaultFontSize;\n  const resolvedSelectedFontSize = getFontSizeValue(selectedFontSize, theme) || defaultFontSize;\n  const resolvedOptionFontSize = getFontSizeValue(optionFontSize, theme) || defaultFontSize;\n\n  const selectedOption = useMemo(\n    () => options.find((opt) => opt.value === value) || null,\n    [options, value]\n  );\n\n  const filteredOptions = useMemo(() => {\n    if (!isSearchEnabled || !query) {\n      return options;\n    }\n    const lowerQuery = query.toLowerCase();\n    return options.filter((option) =>\n      option.label.toLowerCase().includes(lowerQuery)\n    );\n  }, [options, query, isSearchEnabled]);\n\n  const handleChange = (newValue: string) => {\n    onChange(newValue);\n    setQuery('');\n  };\n\n  const handleClear = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    e.preventDefault();\n    onChange(null);\n    setQuery('');\n  };\n\n  const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const newQuery = e.target.value;\n    setQuery(newQuery);\n    onInputChange?.(newQuery);\n  };\n\n  // Handle menu open/close callbacks\n  const handleOpenChange = (open: boolean) => {\n    if (open && !wasOpen) {\n      onMenuOpen?.();\n    } else if (!open && wasOpen) {\n      onMenuClose?.();\n    }\n    setWasOpen(open);\n  };\n\n  // Merge refs\n  useEffect(() => {\n    if (selectRef && typeof selectRef === 'object') {\n      // This is handled by the container ref\n    }\n  }, [selectRef]);\n\n  return (\n    <Container\n      $fullWidth={fullWidth}\n      className={className}\n      data-testid={dataTestId || testId}\n      data-id={dataId}\n      ref={(node) => {\n        // Forward ref\n        if (typeof ref === 'function') {\n          ref(node);\n        } else if (ref) {\n          ref.current = node;\n        }\n        // Also set selectRef if provided\n        if (selectRef && typeof selectRef === 'object') {\n          (selectRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n        }\n      }}\n    >\n      {label && (\n        <FieldLabel\n          label={label}\n          htmlFor={`${testId}-trigger`}\n          required={required}\n          id={testId ? `${testId}-label` : undefined}\n          fontSize={resolvedLabelFontSize}\n        />\n      )}\n      <Listbox value={value || ''} onChange={handleChange} disabled={disabled}>\n        {({ open }) => {\n          // Track open state changes\n          if (open !== wasOpen) {\n            handleOpenChange(open);\n          }\n\n          return (\n            <>\n              {/* Hidden input for form submission */}\n              {name && (\n                <HiddenInput\n                  type=\"hidden\"\n                  name={name}\n                  value={value || ''}\n                  required={required}\n                />\n              )}\n              <SelectWrapper>\n                <Listbox.Button\n                  as={Button}\n                  $size={size}\n                  $variant={variant}\n                  $error={error}\n                  $isOpen={open}\n                  $hasValue={!!selectedOption}\n                  $focusColor={focusColor}\n                  data-size={size}\n                  data-variant={variant}\n                  data-error={error}\n                  data-disabled={disabled}\n                  data-open={open}\n                  aria-label={ariaLabel || label}\n                  aria-labelledby={ariaLabelledby}\n                  aria-describedby={ariaDescribedby}\n                  aria-required={required}\n                >\n                  <ButtonContent>\n                    {selectedOption?.icon && (\n                      <Icon aria-hidden=\"true\">\n                        {selectedOption.icon}\n                      </Icon>\n                    )}\n                    <ButtonText $fontSize={selectedOption ? resolvedSelectedFontSize : resolvedOptionFontSize}>\n                      {selectedOption?.label || placeholder}\n                    </ButtonText>\n                  </ButtonContent>\n                  <ButtonActions>\n                    {isLoading && (\n                      <LoadingSpinner aria-hidden=\"true\">\n                        <svg\n                          width=\"16\"\n                          height=\"16\"\n                          viewBox=\"0 0 16 16\"\n                          fill=\"none\"\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                        >\n                          <path\n                            d=\"M8 1.5V4\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                          />\n                          <path\n                            d=\"M8 12V14.5\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            opacity=\"0.5\"\n                          />\n                          <path\n                            d=\"M3.28769 3.28769L5.05025 5.05025\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            opacity=\"0.875\"\n                          />\n                          <path\n                            d=\"M10.9497 10.9497L12.7123 12.7123\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            opacity=\"0.375\"\n                          />\n                          <path\n                            d=\"M1.5 8H4\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            opacity=\"0.75\"\n                          />\n                          <path\n                            d=\"M12 8H14.5\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            opacity=\"0.25\"\n                          />\n                          <path\n                            d=\"M3.28769 12.7123L5.05025 10.9497\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            opacity=\"0.625\"\n                          />\n                          <path\n                            d=\"M10.9497 5.05025L12.7123 3.28769\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            opacity=\"0.125\"\n                          />\n                        </svg>\n                      </LoadingSpinner>\n                    )}\n                    {isClearEnabled && selectedOption && !disabled && !isLoading && (\n                      <ClearButton\n                        type=\"button\"\n                        onClick={handleClear}\n                        aria-label=\"Clear selection\"\n                        tabIndex={-1}\n                      >\n                        <svg\n                          width=\"16\"\n                          height=\"16\"\n                          viewBox=\"0 0 16 16\"\n                          fill=\"none\"\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                        >\n                          <path\n                            d=\"M12 4L4 12M4 4L12 12\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            strokeLinejoin=\"round\"\n                          />\n                        </svg>\n                      </ClearButton>\n                    )}\n                    <Chevron $isOpen={open} aria-hidden=\"true\">\n                      <svg\n                        width=\"20\"\n                        height=\"20\"\n                        viewBox=\"0 0 20 20\"\n                        fill=\"none\"\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                      >\n                        <path\n                          d=\"M5 7.5L10 12.5L15 7.5\"\n                          stroke=\"currentColor\"\n                          strokeWidth=\"1.5\"\n                          strokeLinecap=\"round\"\n                          strokeLinejoin=\"round\"\n                        />\n                      </svg>\n                    </Chevron>\n                  </ButtonActions>\n                </Listbox.Button>\n\n                <Transition\n                  as={Fragment}\n                  leave=\"leave\"\n                  leaveFrom=\"leave-from\"\n                  leaveTo=\"leave-to\"\n                >\n                  <Listbox.Options as={Options} $menuPlacement={menuPlacement}>\n                    {isSearchEnabled && (\n                      <SearchWrapper>\n                        <SearchInput\n                          type=\"text\"\n                          placeholder={searchPlaceholder}\n                          value={query}\n                          onChange={handleQueryChange}\n                          onClick={(e) => e.stopPropagation()}\n                          $fontSize={defaultFontSize}\n                        />\n                      </SearchWrapper>\n                    )}\n                    <OptionsList>\n                      {filteredOptions.length === 0 ? (\n                        <NoResults $fontSize={defaultFontSize}>{noResultsMessage}</NoResults>\n                      ) : (\n                        filteredOptions.map((option: SelectOption) => (\n                          <Listbox.Option\n                            key={option.value}\n                            value={option.value}\n                            disabled={option.disabled}\n                            as={Fragment}\n                          >\n                            {({ active, selected }) => (\n                              <OptionItem $active={active} $selected={selected} $fontSize={resolvedOptionFontSize}>\n                                <OptionContent>\n                                  {option.icon && (\n                                    <Icon aria-hidden=\"true\">\n                                      {option.icon}\n                                    </Icon>\n                                  )}\n                                  <OptionLabel>\n                                    {option.label}\n                                  </OptionLabel>\n                                </OptionContent>\n                                {selected && (\n                                  <Checkmark aria-hidden=\"true\">\n                                    <svg\n                                      width=\"20\"\n                                      height=\"20\"\n                                      viewBox=\"0 0 20 20\"\n                                      fill=\"none\"\n                                      xmlns=\"http://www.w3.org/2000/svg\"\n                                    >\n                                      <path\n                                        d=\"M16.25 5.625L7.5 14.375L3.75 10.625\"\n                                        stroke=\"currentColor\"\n                                        strokeWidth=\"2\"\n                                        strokeLinecap=\"round\"\n                                        strokeLinejoin=\"round\"\n                                      />\n                                    </svg>\n                                  </Checkmark>\n                                )}\n                              </OptionItem>\n                            )}\n                          </Listbox.Option>\n                        ))\n                      )}\n                    </OptionsList>\n                  </Listbox.Options>\n                </Transition>\n              </SelectWrapper>\n            </>\n          );\n        }}\n      </Listbox>\n      {error && errorMessage ? (\n        <Message variant=\"error\" size=\"sm\" dataTestId={testId ? `${testId}-error` : undefined}>\n          {errorMessage}\n        </Message>\n      ) : assistiveText ? (\n        <Message variant=\"assistive\" size=\"sm\" dataTestId={testId ? `${testId}-helper` : undefined}>\n          {assistiveText}\n        </Message>\n      ) : null}\n    </Container>\n  );\n});\n\nSelect.displayName = 'Select';\n\nexport default Select;\n","import { forwardRef, useId, useState, useEffect, useRef, useCallback } from 'react';\nimport styled from '@emotion/styled';\n\nimport { Message } from '../Message';\n\nimport type { InputProps, FontSizeValue } from './Input.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Font size token to CSS value mapping\n */\nconst FONT_SIZE_TOKENS: Record<string, string> = {\n  xs: 'var(--font-size-xs, 12px)',\n  sm: 'var(--font-size-sm, 14px)',\n  base: 'var(--font-size-base, 14px)',\n  md: 'var(--font-size-md, 14.5px)',\n  lg: 'var(--font-size-lg, 15px)',\n  xl: 'var(--font-size-xl, 18px)',\n};\n\n/**\n * Resolve font size value to CSS string\n */\nconst resolveFontSize = (fontSize: FontSizeValue | undefined): string | undefined => {\n  if (!fontSize) return undefined;\n  \n  // Check if it's a theme token key\n  if (typeof fontSize === 'string' && fontSize in FONT_SIZE_TOKENS) {\n    return FONT_SIZE_TOKENS[fontSize];\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n/**\n * Input component - A versatile input field for user data entry\n * Aligned with ib-ui TextField component for compatibility\n *\n * @example\n * ```tsx\n * <Input\n *   label=\"Email\"\n *   type=\"email\"\n *   placeholder=\"user@example.com\"\n *   required\n * />\n *\n * <Input\n *   label=\"Password\"\n *   type=\"password\"\n *   error\n *   errorMessage=\"Password is required\"\n * />\n *\n * <Input\n *   label=\"Search\"\n *   type=\"search\"\n *   leftElement={<SearchIcon />}\n *   rightElement={<ClearButton />}\n *   debounceTimeout={300}\n *   onChangeDebounced={(value) => search(value)}\n * />\n *\n * <Input\n *   label=\"Phone\"\n *   mask={(v) => v.replace(/\\D/g, '').slice(0, 10)}\n *   placeholder=\"(555) 555-5555\"\n * />\n * ```\n */\n\nconst Wrapper = styled.div<{ $fullWidth?: boolean }>`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  ${({ $fullWidth }) => $fullWidth && 'width: 100%;'}\n`;\n\nconst Label = styled.label<{ theme?: Theme }>`\n  font-style: normal;\n  font-weight: 600;\n  display: block;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme }) => theme.typography.fontSize.sm};\n  color: ${({ theme }) => theme.colors.text.primary};\n  line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n  margin-bottom: 4px;\n`;\n\nconst Required = styled.span<{ theme?: Theme }>`\n  color: var(--color-highlight, var(--colour-highlight, ${({ theme }) => theme?.colors?.highlight || '#F4770B'}));\n  margin-left: 2px;\n`;\n\nconst InputContainer = styled.div<{\n  theme?: Theme;\n  $inputSize: 'sm' | 'md' | 'lg';\n  $variant: 'default' | 'filled' | 'outlined' | 'display';\n  $error: boolean;\n  $disabled: boolean;\n  $hasLeft: boolean;\n  $hasRight: boolean;\n  $borderRadius?: string;\n  $focusColor?: string;\n}>`\n  position: relative;\n  display: flex;\n  align-items: center;\n  background-color: ${({ theme }) => theme.colors.background.default};\n  border-radius: ${({ theme, $borderRadius }) => $borderRadius || theme.borders.radius.sm};\n  transition: border-color 0.2s, box-shadow 0.2s;\n  \n  /* Size variants (sm: 32px, md: 36px) - aligned with Select, Multiselect, and Button */\n  ${({ $inputSize }) => {\n    switch ($inputSize) {\n      case 'sm':\n        return 'height: 32px;';\n      default:\n        return 'height: 36px;';\n    }\n  }}\n  \n  /* Visual variants - Default */\n  ${({ $variant, theme, $error, $focusColor }) => {\n    if ($variant === 'default') {\n      return `\n        border: ${theme.borders.width.thin} solid ${$error ? theme.colors.status.error : theme.colors.border.medium};\n        \n        &:hover:not(:has(input:disabled)) {\n          border-color: ${$error ? theme.colors.status.error : ($focusColor || theme.colors.text.primary)};\n        }\n        \n        &:focus-within {\n          border-color: ${$error ? theme.colors.status.error : ($focusColor || theme.colors.text.primary)};\n          ${$focusColor && !$error ? `box-shadow: 0 0 0 2px ${$focusColor}20;` : ''}\n        }\n      `;\n    }\n    \n    if ($variant === 'filled') {\n      return `\n        background-color: ${theme.colors.background.disabled};\n        border: ${theme.borders.width.thin} solid transparent;\n        \n        &:hover:not(:has(input:disabled)) {\n          background-color: ${theme.colors.background.hover};\n        }\n        \n        &:focus-within {\n          background-color: ${theme.colors.background.default};\n          border-color: ${$error ? theme.colors.status.error : ($focusColor || theme.colors.highlight)};\n          ${$focusColor && !$error ? `box-shadow: 0 0 0 2px ${$focusColor}20;` : ''}\n        }\n      `;\n    }\n    \n    if ($variant === 'outlined') {\n      return `\n        border: ${theme.borders.width.medium} solid ${$error ? theme.colors.status.error : theme.colors.border.medium};\n        \n        &:hover:not(:has(input:disabled)) {\n          border-color: ${$error ? theme.colors.status.error : ($focusColor || theme.colors.text.primary)};\n        }\n        \n        &:focus-within {\n          border-color: ${$error ? theme.colors.status.error : ($focusColor || theme.colors.highlight)};\n          ${$focusColor && !$error ? `box-shadow: 0 0 0 2px ${$focusColor}20;` : ''}\n        }\n      `;\n    }\n\n    if ($variant === 'display') {\n      return `\n        background-color: ${theme.colors.grey[150]};\n        border: ${theme.borders.width.thin} solid ${theme.colors.grey[150]};\n        cursor: default;\n        \n        &:hover {\n          border-color: ${theme.colors.grey[150]};\n        }\n        \n        &:focus-within {\n          border-color: ${theme.colors.grey[150]};\n        }\n      `;\n    }\n  }}\n  \n  /* Disabled state - but not for display variant which has its own styling */\n  ${({ $disabled, $variant, theme }) => $disabled && $variant !== 'display' && `\n    opacity: 0.5;\n    cursor: not-allowed;\n    background-color: ${theme.colors.background.disabled};\n  `}\n  \n  /* Active state (for ib-ui compatibility) */\n  &.active {\n    border-color: ${({ theme, $error }) => $error ? theme.colors.status.error : theme.colors.text.primary};\n  }\n`;\n\nconst StyledInput = styled.input<{\n  theme?: Theme;\n  $hasLeft: boolean;\n  $hasRight: boolean;\n  $inputFontSize?: string;\n  $inputSize: 'sm' | 'md';\n}>`\n  flex: 1;\n  width: 100%;\n  border: none;\n  background: transparent;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.regular};\n  color: ${({ theme }) => theme.colors.text.primary};\n  line-height: ${({ theme }) => theme.typography.lineHeight.relaxed};\n  outline: none;\n  /* Default font size based on size prop (sm: xs/12px, md: sm/14px), matching Select/Multiselect */\n  font-size: ${({ $inputFontSize, $inputSize, theme }) =>\n    $inputFontSize || ($inputSize === 'sm' ? theme.typography.fontSize.xs : theme.typography.fontSize.sm)};\n  \n  /* Production styles from css/style.css lines 79-94 */\n  padding: 7px 12px 7px 12px;\n  box-sizing: border-box;\n  \n  &::placeholder {\n    color: ${({ theme }) => theme.colors.text.muted};\n    font-size: inherit;\n  }\n  \n  &:disabled {\n    cursor: not-allowed;\n  }\n  \n  /* Adjust padding when elements are present */\n  ${({ $hasLeft }) => $hasLeft && 'padding-left: 0;'}\n  ${({ $hasRight }) => $hasRight && 'padding-right: 0;'}\n  \n  /* Remove number input spinners */\n  &[type=\"number\"]::-webkit-inner-spin-button,\n  &[type=\"number\"]::-webkit-outer-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n  }\n  \n  &[type=\"number\"] {\n    -moz-appearance: textfield;\n  }\n  \n  /* Search input clear button styling */\n  &[type=\"search\"]::-webkit-search-cancel-button {\n    -webkit-appearance: none;\n  }\n`;\n\nconst LeftElement = styled.div<{ theme?: Theme; $inputSize: 'sm' | 'md' | 'lg'; $variant?: 'default' | 'filled' | 'outlined' | 'display' }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: ${({ theme, $variant }) => $variant === 'display' ? theme.colors.text.primary : theme.colors.text.muted};\n  padding-left: 12px;\n  \n  ${({ $inputSize }) => $inputSize === 'sm' && 'padding-left: 8px;'}\n  ${({ $inputSize }) => $inputSize === 'lg' && 'padding-left: 16px;'}\n  \n  /* Add right padding for display variant to space icon from text */\n  ${({ $variant }) => $variant === 'display' && 'padding-right: 12px;'}\n  ${({ $variant, $inputSize }) => $variant === 'display' && $inputSize === 'sm' && 'padding-right: 8px;'}\n  ${({ $variant, $inputSize }) => $variant === 'display' && $inputSize === 'lg' && 'padding-right: 16px;'}\n`;\n\nconst RightElement = styled.div<{ theme?: Theme; $inputSize: 'sm' | 'md' | 'lg'; $variant?: 'default' | 'filled' | 'outlined' | 'display' }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: ${({ theme, $variant }) => $variant === 'display' ? theme.colors.text.primary : theme.colors.text.muted};\n  padding-right: 12px;\n  \n  ${({ $inputSize }) => $inputSize === 'sm' && 'padding-right: 8px;'}\n  ${({ $inputSize }) => $inputSize === 'lg' && 'padding-right: 16px;'}\n`;\n\n\n/**\n * Custom hook for debouncing values\n */\nfunction useDebounce(\n  value: string,\n  timeout: number,\n  callback: (value: string) => void\n) {\n  const callbackRef = useRef(callback);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  // Keep callback ref up to date\n  useEffect(() => {\n    callbackRef.current = callback;\n  }, [callback]);\n\n  useEffect(() => {\n    if (timeout <= 0) return;\n\n    timeoutRef.current = setTimeout(() => {\n      callbackRef.current(value);\n    }, timeout);\n\n    return () => {\n      if (timeoutRef.current) {\n        clearTimeout(timeoutRef.current);\n      }\n    };\n  }, [value, timeout]);\n}\n\n/**\n * Process number input - only keeps digits, dots, negative, comma, and dollar\n */\nfunction processNumber(value: string): string {\n  return value.replace(/[^\\d.\\-,$]/g, '');\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n  (\n    {\n      type = 'text',\n      size = 'md',\n      variant = 'default',\n      label,\n      helperText,\n      error = false,\n      errorMessage,\n      leftElement,\n      rightElement,\n      fullWidth = false,\n      wrapperClassName,\n      className,\n      disabled = false,\n      required = false,\n      id: providedId,\n      'aria-describedby': ariaDescribedBy,\n      'data-testid': testId,\n      value,\n      onChange,\n      InputProps,\n      debounceTimeout = 0,\n      onChangeDebounced,\n      mask,\n      dataId,\n      showErrorMessage = true,\n      inputType,\n      containerClassName,\n      borderRadius,\n      min,\n      max,\n      onBlur,\n      onFocus,\n      inputFontSize,\n      focusColor,\n      ...rest\n    },\n    ref\n  ) => {\n    const generatedId = useId();\n    const inputId = providedId || generatedId;\n    const helperId = `${inputId}-helper`;\n    const errorId = `${inputId}-error`;\n    const containerRef = useRef<HTMLDivElement>(null);\n\n    // Internal state for controlled input with debounce\n    const [internalValue, setInternalValue] = useState<string>(\n      value !== null && value !== undefined ? String(value) : ''\n    );\n    const [debounceValue, setDebounceValue] = useState<string>('');\n\n    // Sync internal value with external value prop\n    useEffect(() => {\n      if (value !== null && value !== undefined) {\n        const stringValue = String(value);\n        setInternalValue(stringValue);\n        if (debounceTimeout > 0 && onChangeDebounced) {\n          setDebounceValue(stringValue);\n        }\n      }\n    }, [value, debounceTimeout, onChangeDebounced]);\n\n    // Debounce hook\n    useDebounce(debounceValue, debounceTimeout, useCallback((newValue: string) => {\n      if (onChangeDebounced && newValue !== String(value)) {\n        onChangeDebounced(newValue);\n      }\n    }, [onChangeDebounced, value]));\n\n    // Handle change with mask and debounce support\n    const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n      let eventValue = event.target.value;\n\n      // Apply number processing if inputType is number\n      if (inputType === 'number') {\n        eventValue = processNumber(eventValue);\n      }\n\n      // Apply mask if provided\n      if (mask && typeof mask === 'function') {\n        eventValue = mask(eventValue);\n      }\n\n      setInternalValue(eventValue);\n\n      // Update debounce value for debounced callback\n      if (debounceTimeout > 0 && onChangeDebounced) {\n        setDebounceValue(eventValue);\n      }\n\n      // Call original onChange with modified event\n      if (onChange) {\n        // Create modified event with masked value\n        const modifiedEvent = {\n          ...event,\n          target: {\n            ...event.target,\n            value: eventValue,\n          },\n        };\n        onChange(modifiedEvent as React.ChangeEvent<HTMLInputElement>);\n      }\n    };\n\n    // Handle focus with container active state (ib-ui pattern)\n    const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n      if (containerRef.current) {\n        containerRef.current.classList.add('active');\n      }\n      onFocus?.(event);\n    };\n\n    // Handle blur with container active state removal\n    const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n      if (containerRef.current) {\n        containerRef.current.classList.remove('active');\n      }\n      onBlur?.(event);\n    };\n\n    // Determine start/end adornments\n    // Support both leftElement/rightElement (original) and InputProps.startAdornment/endAdornment (ib-ui)\n    const startAdornment = leftElement || InputProps?.startAdornment;\n    const endAdornment = rightElement || InputProps?.endAdornment;\n\n    const hasLeft = !!startAdornment;\n    const hasRight = !!endAdornment;\n\n    const displayHelperText = error && errorMessage ? errorMessage : helperText;\n    const shouldShowError = error && errorMessage && showErrorMessage;\n    const describedBy = [\n      ariaDescribedBy,\n      displayHelperText ? (error ? errorId : helperId) : undefined,\n    ]\n      .filter(Boolean)\n      .join(' ');\n\n    // Determine the actual value to use\n    const inputValue = debounceTimeout > 0 || mask ? internalValue : value;\n\n    // Display variant is always read-only\n    const isDisplayVariant = variant === 'display';\n\n    return (\n      <Wrapper\n        $fullWidth={fullWidth}\n        className={wrapperClassName}\n        data-testid={testId && `${testId}-wrapper`}\n      >\n        {label && (\n          <Label htmlFor={inputId}>\n            {label}\n            {required && <Required aria-label=\"required\">*</Required>}\n          </Label>\n        )}\n        <InputContainer\n          ref={containerRef}\n          $inputSize={size}\n          $variant={variant}\n          $error={error}\n          $disabled={disabled}\n          $hasLeft={hasLeft}\n          $hasRight={hasRight}\n          $borderRadius={borderRadius}\n          $focusColor={focusColor}\n          className={containerClassName}\n        >\n          {startAdornment && (\n            <LeftElement $inputSize={size} $variant={variant} aria-hidden=\"true\">\n              {startAdornment}\n            </LeftElement>\n          )}\n          <StyledInput\n            ref={ref}\n            id={inputId}\n            type={type}\n            className={className}\n            disabled={disabled}\n            required={required}\n            readOnly={isDisplayVariant || rest.readOnly}\n            aria-invalid={error}\n            aria-describedby={describedBy || undefined}\n            data-testid={testId}\n            data-id={dataId}\n            $hasLeft={hasLeft}\n            $hasRight={hasRight}\n            $inputFontSize={resolveFontSize(inputFontSize)}\n            $inputSize={size}\n            value={inputValue}\n            onChange={isDisplayVariant ? undefined : handleChange}\n            onFocus={handleFocus}\n            onBlur={handleBlur}\n            min={min}\n            max={max}\n            {...rest}\n          />\n          {endAdornment && (\n            <RightElement $inputSize={size} $variant={variant} aria-hidden=\"true\">\n              {endAdornment}\n            </RightElement>\n          )}\n        </InputContainer>\n        {shouldShowError ? (\n          <Message\n            variant=\"error\"\n            size=\"sm\"\n            dataTestId={testId ? `${testId}-error` : undefined}\n          >\n            {errorMessage}\n          </Message>\n        ) : displayHelperText ? (\n          <Message\n            variant=\"assistive\"\n            size=\"sm\"\n            dataTestId={testId ? `${testId}-helper` : undefined}\n          >\n            {displayHelperText}\n          </Message>\n        ) : null}\n      </Wrapper>\n    );\n  }\n);\n\nInput.displayName = 'Input';\n\nexport default Input;\n","import { Fragment, useEffect, useRef } from 'react';\nimport { Dialog, Transition } from '@headlessui/react';\nimport styled from '@emotion/styled';\nimport { css, Global, useTheme } from '@emotion/react';\nimport type {\n  ModalProps,\n  ModalHeaderProps,\n  ModalBodyProps,\n  ModalFooterProps,\n  FontSizeValue,\n} from './Modal.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Map theme font size token to actual value\n */\nconst getFontSizeValue = (fontSize: FontSizeValue | undefined, theme: Theme): string | undefined => {\n  if (!fontSize) {\n    return undefined;\n  }\n  \n  // Check if it's a theme token key\n  const themeTokens = ['xs', 'sm', 'base', 'md', 'lg', 'xl'] as const;\n  if (themeTokens.includes(fontSize as typeof themeTokens[number])) {\n    return theme.typography.fontSize[fontSize as keyof typeof theme.typography.fontSize];\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n// Transition class names for Headless UI\nconst transitionClasses = {\n  backdropEnter: 'modal-backdrop-enter',\n  backdropEnterFrom: 'modal-backdrop-enter-from',\n  backdropEnterTo: 'modal-backdrop-enter-to',\n  backdropLeave: 'modal-backdrop-leave',\n  backdropLeaveFrom: 'modal-backdrop-leave-from',\n  backdropLeaveTo: 'modal-backdrop-leave-to',\n  modalEnter: 'modal-panel-enter',\n  modalEnterFrom: 'modal-panel-enter-from',\n  modalEnterTo: 'modal-panel-enter-to',\n  modalLeave: 'modal-panel-leave',\n  modalLeaveFrom: 'modal-panel-leave-from',\n  modalLeaveTo: 'modal-panel-leave-to',\n};\n\n// Global styles for transitions (Headless UI uses class names)\nconst modalTransitionStyles = css`\n  /* Backdrop transitions */\n  .modal-backdrop-enter {\n    transition: opacity 200ms ease-out;\n  }\n  .modal-backdrop-enter-from {\n    opacity: 0;\n  }\n  .modal-backdrop-enter-to {\n    opacity: 1;\n  }\n  .modal-backdrop-leave {\n    transition: opacity 200ms ease-in;\n  }\n  .modal-backdrop-leave-from {\n    opacity: 1;\n  }\n  .modal-backdrop-leave-to {\n    opacity: 0;\n  }\n\n  /* Modal panel transitions */\n  .modal-panel-enter {\n    transition: opacity 200ms ease-out, transform 200ms ease-out;\n  }\n  .modal-panel-enter-from {\n    opacity: 0;\n    transform: scale(0.95);\n  }\n  .modal-panel-enter-to {\n    opacity: 1;\n    transform: scale(1);\n  }\n  .modal-panel-leave {\n    transition: opacity 150ms ease-in, transform 150ms ease-in;\n  }\n  .modal-panel-leave-from {\n    opacity: 1;\n    transform: scale(1);\n  }\n  .modal-panel-leave-to {\n    opacity: 0;\n    transform: scale(0.95);\n  }\n`;\n\n// Styled components\nconst Backdrop = styled.div<{ $transparent: boolean; $zIndex: number }>`\n  position: fixed;\n  inset: 0;\n  background-color: ${({ $transparent }) =>\n    $transparent ? 'transparent' : 'rgba(33, 28, 28, 0.75)'};\n  z-index: ${({ $zIndex }) => $zIndex - 10};\n`;\n\nconst ModalWrapper = styled.div<{ $zIndex: number }>`\n  position: fixed;\n  inset: 0;\n  z-index: ${({ $zIndex }) => $zIndex};\n  overflow-y: auto;\n`;\n\nconst ModalCentering = styled.div`\n  display: flex;\n  min-height: 100%;\n  align-items: center;\n  justify-content: center;\n  padding: 16px;\n  text-align: center;\n\n  @media (max-width: 640px) {\n    padding: 8px;\n  }\n`;\n\nconst ModalPanel = styled(Dialog.Panel)<{ 'data-size'?: string }>`\n  position: relative;\n  width: 100%;\n  transform-origin: center;\n  background-color: #ffffff;\n  border-radius: 8px;\n  box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n  text-align: left;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n\n  /* Size variants */\n  &[data-size='sm'] {\n    max-width: 400px;\n    max-height: 80vh;\n  }\n\n  &[data-size='md'] {\n    max-width: 500px;\n    max-height: 85vh;\n  }\n\n  &[data-size='lg'] {\n    max-width: 600px;\n    max-height: 90vh;\n  }\n\n  &[data-size='xl'] {\n    max-width: 800px;\n    max-height: 90vh;\n  }\n\n  &[data-size='full'] {\n    max-width: 90vw;\n    max-height: 90vh;\n  }\n\n  /* Mobile responsive */\n  @media (max-width: 640px) {\n    &[data-size='sm'],\n    &[data-size='md'],\n    &[data-size='lg'],\n    &[data-size='xl'] {\n      max-width: 100%;\n      max-height: 95vh;\n    }\n\n    &[data-size='full'] {\n      max-width: 100%;\n      max-height: 95vh;\n    }\n  }\n`;\n\nconst Header = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 16px 24px;\n  border-bottom: 1px solid #e5e5e5;\n  flex-shrink: 0;\n`;\n\nconst Title = styled(Dialog.Title)<{ $fontSize?: string }>`\n  margin: 0;\n  font-size: ${({ $fontSize }) => $fontSize || '1.25rem'};\n  font-weight: 600;\n  color: #171717;\n  line-height: 1.25;\n`;\n\nconst CloseButton = styled.button`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  padding: 0;\n  border: none;\n  border-radius: 6px;\n  background-color: transparent;\n  color: #525252;\n  cursor: pointer;\n  transition: background-color 150ms ease-out, color 150ms ease-out;\n  flex-shrink: 0;\n\n  &:hover {\n    background-color: #f5f5f5;\n    color: #171717;\n  }\n\n  &:focus {\n    outline: none;\n  }\n\n  &:focus-visible {\n    outline: 2px solid #2563eb;\n    outline-offset: 2px;\n  }\n\n  &:active {\n    transform: scale(0.95);\n  }\n`;\n\nconst Body = styled.div`\n  flex: 1;\n  overflow-y: auto;\n  padding: 24px;\n  color: #525252;\n  font-size: 0.875rem;\n  line-height: 1.5;\n\n  /* Custom scrollbar */\n  &::-webkit-scrollbar {\n    width: 8px;\n  }\n\n  &::-webkit-scrollbar-track {\n    background: #f5f5f5;\n    border-radius: 6px;\n  }\n\n  &::-webkit-scrollbar-thumb {\n    background: #d4d4d4;\n    border-radius: 6px;\n  }\n\n  &::-webkit-scrollbar-thumb:hover {\n    background: #a3a3a3;\n  }\n`;\n\nconst Footer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: 12px;\n  padding: 16px 24px;\n  border-top: 1px solid #e5e5e5;\n  flex-shrink: 0;\n\n  @media (max-width: 640px) {\n    flex-direction: column-reverse;\n    gap: 8px;\n\n    > * {\n      width: 100%;\n    }\n  }\n`;\n\n/**\n * Modal component - Accessible modal dialog using Headless UI\n *\n * @example\n * ```tsx\n * <Modal isOpen={isOpen} onClose={handleClose} title=\"Confirm Action\">\n *   <Modal.Body>\n *     Are you sure you want to proceed?\n *   </Modal.Body>\n *   <Modal.Footer>\n *     <Button variant=\"secondary\" onClick={handleClose}>Cancel</Button>\n *     <Button variant=\"primary\" onClick={handleConfirm}>Confirm</Button>\n *   </Modal.Footer>\n * </Modal>\n * ```\n */\nexport function Modal({\n  isOpen,\n  onClose,\n  title,\n  titleFontSize,\n  children,\n  size = 'md',\n  closeOnBackdropClick = true,\n  closeOnEsc = true,\n  showCloseButton = true,\n  footer,\n  className,\n  portalContainer,\n  'data-testid': testId,\n  dataTestId,\n  dataId,\n  transparent = false,\n  zIndex = 50,\n  initialFocusRef,\n  onMount,\n  'aria-label': ariaLabel,\n}: ModalProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const onMountCalledRef = useRef(false);\n  const theme = useTheme() as Theme;\n  \n  // Resolve title font size from theme tokens or CSS value\n  const resolvedTitleFontSize = getFontSizeValue(titleFontSize, theme);\n\n  // Call onMount when the modal is open and the container is mounted\n  useEffect(() => {\n    if (isOpen && containerRef.current && onMount && !onMountCalledRef.current) {\n      onMountCalledRef.current = true;\n      onMount(containerRef.current);\n    }\n  }, [isOpen, onMount]);\n\n  // Reset the flag when modal closes\n  useEffect(() => {\n    if (!isOpen) {\n      onMountCalledRef.current = false;\n    }\n  }, [isOpen]);\n\n  const handleBackdropClick = () => {\n    if (closeOnBackdropClick) {\n      onClose();\n    }\n  };\n\n  const handleClose = () => {\n    if (closeOnEsc) {\n      onClose();\n    }\n  };\n\n  return (\n    <>\n      <Global styles={modalTransitionStyles} />\n      <Transition appear show={isOpen} as={Fragment}>\n        <Dialog\n          as=\"div\"\n          onClose={handleClose}\n          data-testid={dataTestId || testId}\n          data-id={dataId}\n          initialFocus={initialFocusRef}\n          {...(ariaLabel && { 'aria-label': ariaLabel })}\n          {...(portalContainer && { container: portalContainer })}\n        >\n          {/* Backdrop */}\n          <Transition.Child\n            as={Fragment}\n            enter={transitionClasses.backdropEnter}\n            enterFrom={transitionClasses.backdropEnterFrom}\n            enterTo={transitionClasses.backdropEnterTo}\n            leave={transitionClasses.backdropLeave}\n            leaveFrom={transitionClasses.backdropLeaveFrom}\n            leaveTo={transitionClasses.backdropLeaveTo}\n          >\n            <Backdrop\n              onClick={handleBackdropClick}\n              aria-hidden=\"true\"\n              $transparent={transparent}\n              $zIndex={zIndex}\n              data-transparent={transparent}\n            />\n          </Transition.Child>\n\n          {/* Modal container */}\n          <ModalWrapper ref={containerRef} $zIndex={zIndex} data-zindex={zIndex}>\n            <ModalCentering>\n              <Transition.Child\n                as={Fragment}\n                enter={transitionClasses.modalEnter}\n                enterFrom={transitionClasses.modalEnterFrom}\n                enterTo={transitionClasses.modalEnterTo}\n                leave={transitionClasses.modalLeave}\n                leaveFrom={transitionClasses.modalLeaveFrom}\n                leaveTo={transitionClasses.modalLeaveTo}\n              >\n                <ModalPanel\n                  className={className}\n                  data-size={size}\n                  data-testid={testId ? `${testId}-panel` : undefined}\n                >\n                  {/* Header */}\n                  {(title || showCloseButton) && (\n                    <Header>\n                      {title && (\n                        <Title\n                          as=\"h2\"\n                          $fontSize={resolvedTitleFontSize}\n                          data-testid={testId ? `${testId}-title` : undefined}\n                        >\n                          {title}\n                        </Title>\n                      )}\n                      {showCloseButton && (\n                        <CloseButton\n                          type=\"button\"\n                          onClick={onClose}\n                          aria-label=\"Close modal\"\n                          data-testid={testId ? `${testId}-close` : undefined}\n                        >\n                          <svg\n                            width=\"24\"\n                            height=\"24\"\n                            viewBox=\"0 0 24 24\"\n                            fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\"\n                            aria-hidden=\"true\"\n                          >\n                            <path\n                              d=\"M18 6L6 18M6 6L18 18\"\n                              stroke=\"currentColor\"\n                              strokeWidth=\"2\"\n                              strokeLinecap=\"round\"\n                              strokeLinejoin=\"round\"\n                            />\n                          </svg>\n                        </CloseButton>\n                      )}\n                    </Header>\n                  )}\n\n                  {/* Body */}\n                  <Body data-testid={testId ? `${testId}-body` : undefined}>\n                    {children}\n                  </Body>\n\n                  {/* Footer */}\n                  {footer && (\n                    <Footer\n                      data-testid={testId ? `${testId}-footer` : undefined}\n                    >\n                      {footer}\n                    </Footer>\n                  )}\n                </ModalPanel>\n              </Transition.Child>\n            </ModalCentering>\n          </ModalWrapper>\n        </Dialog>\n      </Transition>\n    </>\n  );\n}\n\n/**\n * ModalHeader - Compound component for custom modal header\n */\nexport function ModalHeader({ children, className }: ModalHeaderProps) {\n  return <Header className={className}>{children}</Header>;\n}\n\n/**\n * ModalBody - Compound component for modal body content\n */\nexport function ModalBody({ children, className }: ModalBodyProps) {\n  return <Body className={className}>{children}</Body>;\n}\n\n/**\n * ModalFooter - Compound component for modal footer actions\n */\nexport function ModalFooter({ children, className }: ModalFooterProps) {\n  return <Footer className={className}>{children}</Footer>;\n}\n\n// Attach compound components to Modal\nModal.Header = ModalHeader;\nModal.Body = ModalBody;\nModal.Footer = ModalFooter;\n\nModal.displayName = 'Modal';\nModalHeader.displayName = 'Modal.Header';\nModalBody.displayName = 'Modal.Body';\nModalFooter.displayName = 'Modal.Footer';\n\nexport default Modal;","/**\n * Color System for IntelligenceBank UI Primitives\n * \n * Colors sourced from the ib-ui library design system.\n * This file provides a comprehensive color palette compatible with the\n * IntelligenceBank main platform.\n * \n * @see /Users/charlyvanni/Workspace/IntelligenceBank/ib/dev_override/ib-ui/src/Atoms/Colors\n */\n\n// =============================================================================\n// Grey Scale\n// =============================================================================\n\n/**\n * Grey scale colors - Used for backgrounds, borders, and text\n * Ranges from lightest (grey100) to darkest (grey900)\n */\nexport const greyScale = {\n  /** Lightest grey - subtle backgrounds */\n  grey100: '#F7F7F7',\n  /** Light grey - card backgrounds, dividers */\n  grey150: '#E5E5E5',\n  /** Light grey - borders, disabled backgrounds */\n  grey200: '#D9D9D9',\n  /** Medium light grey - borders */\n  grey300: '#BFBFBF',\n  /** Medium grey - disabled text */\n  grey400: '#A1A1A1',\n  /** Medium grey - secondary text, icons */\n  grey500: '#737373',\n  /** Medium dark grey - secondary text */\n  grey600: '#595959',\n  /** Dark grey - primary text alternative */\n  grey700: '#3F3F3F',\n  /** Dark grey - headers, primary backgrounds (PRIMARY_DEFAULT) */\n  grey800: '#262626',\n  /** Darkest grey - near black */\n  grey900: '#191919',\n} as const;\n\n// =============================================================================\n// Semantic Colors - Green (Success)\n// =============================================================================\n\n/**\n * Green colors - Used for success states, confirmations, positive actions\n */\nexport const greenColors = {\n  /** Lightest green - success backgrounds */\n  greenLighter: '#E5F6E8',\n  /** Light green - success highlights */\n  greenLight: '#54C164',\n  /** Base green - primary success color */\n  greenBase: '#2B8048',\n  /** Dark green - success hover states */\n  greenDark: '#046211',\n  /** Darkest green - success active states */\n  greenDarker: '#033707',\n} as const;\n\n// =============================================================================\n// Semantic Colors - Red (Error/Destructive)\n// =============================================================================\n\n/**\n * Red colors - Used for errors, warnings, destructive actions\n */\nexport const redColors = {\n  /** Very light red - error backgrounds (alternative) */\n  redLighter2: '#FCECE7',\n  /** Lightest red - error backgrounds */\n  redLighter: '#FFE3E5',\n  /** Light red - error highlights */\n  redLight: '#F16C71',\n  /** Base red - primary error color */\n  redBase: '#CA212B',\n  /** Dark red - error hover states */\n  redDark: '#97090E',\n  /** Darkest red - error active states */\n  redDarker: '#5F0508',\n} as const;\n\n// =============================================================================\n// Semantic Colors - Blue (Info/Links)\n// =============================================================================\n\n/**\n * Blue colors - Used for informational states, links, selected items\n */\nexport const blueColors = {\n  /** Very light blue - info backgrounds (alternative) */\n  blueLighter2: '#E0EBFD',\n  /** Lightest blue - info backgrounds */\n  blueLighter: '#DDE9FC',\n  /** Light blue - info highlights */\n  blueLight: '#5493F0',\n  /** Base blue - primary info color */\n  blueBase: '#0053CD',\n  /** Dark blue - info hover states */\n  blueDark: '#003B91',\n  /** Darkest blue - info active states */\n  blueDarker: '#012355',\n  /** Link blue - standard link color */\n  blueLink: '#0066CC',\n} as const;\n\n// =============================================================================\n// Semantic Colors - Orange (Warning)\n// =============================================================================\n\n/**\n * Orange colors - Used for warning states, pending status, attention\n */\nexport const orangeColors = {\n  /** Very light orange - warning backgrounds (alternative) */\n  orangeLighter2: '#FFEFC6',\n  /** Lightest orange - warning backgrounds */\n  orangeLighter: '#FFEEDD',\n  /** Light orange - warning highlights */\n  orangeLight: '#FFBA7C',\n  /** Base orange - primary warning color */\n  orangeBase: '#F86C05',\n  /** Dark orange - warning hover states */\n  orangeDark: '#B3520C',\n  /** Darkest orange - warning active states */\n  orangeDarker: '#6D3106',\n} as const;\n\n// =============================================================================\n// Legacy/Utility Colors\n// =============================================================================\n\n/**\n * Legacy text colors - For backward compatibility with ib-ui\n */\nexport const textColors = {\n  /** Primary text color */\n  textColor: '#4a4a4a',\n  /** Faded text color */\n  textColorFade: 'rgba(74,74,74, 0.5)',\n  /** Instruction/help text color */\n  instructionColor: '#737474',\n  /** Help text color (same as lighterGrey) */\n  helpTextColor: '#9b9b9b',\n  /** White text for dark backgrounds */\n  whiteTextColor: '#ffffff',\n  /** Highlight text color (white) */\n  highlightTextColor: '#ffffff',\n} as const;\n\n/**\n * Legacy grey colors - For backward compatibility with ib-ui\n */\nexport const legacyGreyColors = {\n  /** Light grey (same as grey500) */\n  lightGrey: '#727274',\n  /** Lighter grey */\n  lighterGrey: '#9b9b9b',\n  /** Lightest grey */\n  lightestGrey: '#f4f4f4',\n} as const;\n\n/**\n * Border colors\n */\nexport const borderColors = {\n  /** Standard border grey */\n  borderGrey: '#d0d0d0',\n  /** Lighter border grey */\n  borderLighterGrey: '#e0e0e0',\n  /** Border shadow color */\n  borderShadow: '#d8d8d8',\n} as const;\n\n/**\n * Icon colors\n */\nexport const iconColors = {\n  /** Standard icon grey */\n  iconGrey: '#a3a3a3',\n  /** Disabled icon grey */\n  iconGreyDisabled: 'rgba(163,163,163, 0.5)',\n  /** Icon background overlay */\n  iconBackground: 'rgba(0, 0, 0, 0.10)',\n} as const;\n\n/**\n * Background colors\n */\nexport const backgroundColors = {\n  /** Processing/loading background overlay */\n  backgroundProcessingColor: 'rgba(163, 163, 163, .3)',\n  /** Standard white background */\n  backgroundWhiteColor: '#ffffff',\n  /** Row/stripe background grey */\n  rowGrey: '#f9f9f9',\n} as const;\n\n/**\n * Base colors\n */\nexport const baseColors = {\n  /** White */\n  whiteColor: '#ffffff',\n  /** Black */\n  blackColor: '#000000',\n  /** Yellow (notification, highlight) */\n  yellow: '#FFEFC6',\n} as const;\n\n// =============================================================================\n// Status/Feedback Colors\n// =============================================================================\n\n/**\n * Status colors for messaging, alerts, notifications\n */\nexport const statusColors = {\n  /** Success status (green) */\n  successColor: '#21B63C',\n  /** Error status (red) */\n  errorColor: '#d31818',\n  /** Warning status (orange) */\n  warningColor: '#f88b07',\n  /** Info status (orange) */\n  infoColor: '#f88b07',\n  /** Notice status (orange) */\n  noticeColor: '#FFA500',\n} as const;\n\n/**\n * Snackbar/Toast background colors\n */\nexport const snackbarColors = {\n  /** Snackbar error background */\n  snackbarErrorBackground: '#D01C23',\n  /** Snackbar success background */\n  snackbarSuccessBackground: '#108c27',\n  /** Snackbar warning background */\n  snackbarWarningBackground: '#F97E24',\n} as const;\n\n/**\n * Progress bar colors\n */\nexport const progressColors = {\n  /** Completed progress */\n  progressBarCompletedColor: '#108C27',\n  /** Error progress */\n  progressBarErrorColor: '#D01C23',\n} as const;\n\n// =============================================================================\n// Transparency Utilities\n// =============================================================================\n\n/**\n * Transparent black overlays - for various UI states\n */\nexport const transparentBlack = {\n  /** 50% black overlay */\n  transparentBlack50: 'rgba(0, 0, 0, 0.50)',\n  /** 20% black overlay */\n  transparentBlack20: 'rgba(0, 0, 0, 0.20)',\n  /** 8% black overlay - subtle hover */\n  transparentBlack08: 'rgba(0, 0, 0, 0.08)',\n  /** 5% black overlay - very subtle */\n  transparentBlack05: 'rgba(0, 0, 0, 0.05)',\n} as const;\n\n/**\n * Transparent white overlays - for dark backgrounds\n */\nexport const transparentWhite = {\n  /** 50% white overlay */\n  transparentWhite50: 'rgba(255,255,255,0.50)',\n  /** 20% white overlay */\n  transparentWhite20: 'rgba(255,255,255,0.20)',\n  /** 5% white overlay */\n  transparentWhite05: 'rgba(255,255,255,0.05)',\n} as const;\n\n// =============================================================================\n// Dynamic Tenant Colors (Fallback Values)\n// =============================================================================\n\n/**\n * Default/fallback values for the 6 dynamic tenant colors.\n *\n * These values are used when constructing the theme and no tenant-specific\n * colors are provided from the login API response.\n *\n * IMPORTANT: Components should NOT import these directly.\n * Instead, use:\n *   - theme.colors.highlight (via useTheme())\n *   - var(--color-highlight) (in CSS)\n *\n * The theme handles the \"default vs dynamic\" resolution automatically.\n *\n * Login Response Field    →    Theme Property           →    CSS Variable\n * ─────────────────────────────────────────────────────────────────────────\n * colourPrimary           →    colors.primary           →    --color-primary\n * colourPrimaryText       →    colors.primaryText       →    --color-primary-text\n * colourSecondary         →    colors.secondary         →    --color-secondary\n * colourSecondaryText     →    colors.secondaryText     →    --color-secondary-text\n * colourHighlight         →    colors.highlight         →    --color-highlight\n * colourHighlightText     →    colors.highlightText     →    --color-highlight-text\n */\nexport const defaultPaletteColors = {\n  /** Primary color fallback - white background */\n  PRIMARY_DEFAULT: '#ffffff',\n  /** Primary text color fallback - black on primary backgrounds */\n  PRIMARY_TEXT_DEFAULT: '#000000',\n  /** Secondary color fallback - orange accent */\n  SECONDARY_DEFAULT: '#F68D32',\n  /** Secondary text color fallback - white on secondary backgrounds */\n  SECONDARY_TEXT_DEFAULT: '#ffffff',\n  /** Highlight/accent color fallback - brand orange */\n  HIGHLIGHT_DEFAULT: '#F4770B',\n  /** Highlight text color fallback - white on highlight backgrounds */\n  HIGHLIGHT_TEXT_DEFAULT: '#ffffff',\n} as const;\n\n/**\n * User default colors\n */\nexport const userDefaultColors = {\n  /** Default text color for user-generated content */\n  userDefaultTextColor: '#000000',\n  /** Default background color for user-generated content */\n  userDefaultBackgroundColor: '#ffffff',\n} as const;\n\n// =============================================================================\n// Slider/Form Colors\n// =============================================================================\n\n/**\n * Form element colors\n */\nexport const formColors = {\n  /** Slider track/thumb color */\n  sliderGrey: '#bdbdbd',\n} as const;\n\n// =============================================================================\n// Shadows (from ib-ui)\n// =============================================================================\n\n/**\n * Shadow values from ib-ui design system\n */\nexport const ibUiShadows = {\n  /** Level 1 shadow - subtle elevation */\n  shadow100: '0px 1px 3px rgba(0, 0, 0, 0.25)',\n  /** Level 2 shadow - cards, dropdowns */\n  shadow200: '0px 2px 5px rgba(0, 0, 0, 0.25)',\n  /** Level 3 shadow - modals, popovers */\n  shadow300: '0px 3px 12px rgba(0, 0, 0, 0.25)',\n  /** Footer shadow - upward facing */\n  shadowFooter: '0px -1px 2px rgba(0, 0, 0, 0.25)',\n  /** Selected item shadow - emphasized */\n  shadowSelected: '0px 2px 5px rgba(0, 0, 0, 0.50)',\n} as const;\n\n// =============================================================================\n// Border Radius (from ib-ui)\n// =============================================================================\n\n/**\n * Border radius values from ib-ui design system\n */\nexport const borderRadius = {\n  /** Small radius - buttons, inputs (4px) */\n  borderRadiusSmall: '4px',\n  /** Medium radius - cards (8px) */\n  borderRadiusMedium: '8px',\n  /** Large radius - modals, containers (16px) */\n  borderRadiusLarge: '16px',\n} as const;\n\n// =============================================================================\n// Combined Exports\n// =============================================================================\n\n/**\n * All grey colors combined (scale + legacy)\n */\nexport const allGreyColors = {\n  ...greyScale,\n  ...legacyGreyColors,\n} as const;\n\n/**\n * All semantic colors combined (ib-ui version)\n */\nexport const ibUiSemanticColors = {\n  green: greenColors,\n  red: redColors,\n  blue: blueColors,\n  orange: orangeColors,\n} as const;\n\n/**\n * Complete color palette - all colors from ib-ui\n */\nexport const ibUiColors = {\n  // Scales\n  grey: greyScale,\n  \n  // Semantic\n  green: greenColors,\n  red: redColors,\n  blue: blueColors,\n  orange: orangeColors,\n  \n  // Status\n  status: statusColors,\n  snackbar: snackbarColors,\n  progress: progressColors,\n  \n  // UI Elements\n  text: textColors,\n  border: borderColors,\n  icon: iconColors,\n  background: backgroundColors,\n  form: formColors,\n  \n  // Base\n  base: baseColors,\n  \n  // Transparency\n  transparentBlack,\n  transparentWhite,\n  \n  // Tenant fallback values (actual values come from theme context)\n  highlight: defaultPaletteColors.HIGHLIGHT_DEFAULT,\n  palette: defaultPaletteColors,\n  user: userDefaultColors,\n} as const;\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type GreyScale = typeof greyScale;\nexport type GreenColors = typeof greenColors;\nexport type RedColors = typeof redColors;\nexport type BlueColors = typeof blueColors;\nexport type OrangeColors = typeof orangeColors;\nexport type TextColors = typeof textColors;\nexport type BorderColors = typeof borderColors;\nexport type IconColors = typeof iconColors;\nexport type BackgroundColors = typeof backgroundColors;\nexport type BaseColors = typeof baseColors;\nexport type StatusColors = typeof statusColors;\nexport type SnackbarColors = typeof snackbarColors;\nexport type ProgressColors = typeof progressColors;\nexport type TransparentBlack = typeof transparentBlack;\nexport type TransparentWhite = typeof transparentWhite;\nexport type DefaultPaletteColors = typeof defaultPaletteColors;\nexport type IbUiShadowsType = typeof ibUiShadows;\nexport type BorderRadius = typeof borderRadius;\nexport type IbUiColors = typeof ibUiColors;\n\nexport default ibUiColors;\n","/**\n * Typography Utilities for Relative Font Sizing\n *\n * This module provides utilities for creating scalable font sizes\n * based on a configurable base size. All font sizes are derived\n * from the base using ratios, enabling easy accessibility scaling.\n *\n * @example\n * // Default sizing (base = 14px)\n * const sizes = createFontSizes(); // tn=10px, xs=12px, sm=14px, xl=18px\n *\n * // Large accessibility mode (base = 16px)\n * const largeSizes = createFontSizes(16); // tn=11.4px, xs=13.7px, sm=16px, xl=20.6px\n */\n\n/**\n * Default base font size in pixels.\n * This matches the current production value.\n */\nexport const DEFAULT_BASE_FONT_SIZE = 14;\n\n/**\n * Font size ratios relative to base.\n * These ratios are calculated to match the current pixel values\n * when base = 14px:\n * - tn: 10px → 10/14 = 0.714 (tiny)\n * - xs: 12px → 12/14 = 0.857\n * - sm: 14px → 14/14 = 1.0\n * - base: 14px → 14/14 = 1.0\n * - md: 14.5px → 14.5/14 = 1.036\n * - lg: 15px → 15/14 = 1.071\n * - xl: 18px → 18/14 = 1.286\n */\nexport const FONT_SIZE_RATIOS = {\n  tn: 10 / 14,      // 0.714\n  xs: 12 / 14,      // 0.857\n  sm: 14 / 14,      // 1.0\n  base: 14 / 14,    // 1.0\n  md: 14.5 / 14,    // 1.036\n  lg: 15 / 14,      // 1.071\n  xl: 18 / 14,      // 1.286\n} as const;\n\n/**\n * Font size preset names for common accessibility configurations.\n */\nexport const FONT_SCALE_PRESETS = {\n  compact: 12,\n  normal: 14,\n  comfortable: 16,\n  large: 18,\n} as const;\n\nexport type FontScalePreset = keyof typeof FONT_SCALE_PRESETS;\n\n/**\n * Typography configuration options.\n */\nexport interface TypographyConfig {\n  /**\n   * Base font size in pixels. All other sizes are derived from this value.\n   * @default 14\n   */\n  baseFontSize?: number;\n}\n\n/**\n * Generated font sizes type.\n */\nexport interface FontSizes {\n  tn: string;\n  xs: string;\n  sm: string;\n  base: string;\n  md: string;\n  lg: string;\n  xl: string;\n  icons: string;\n}\n\n/**\n * Rounds a number to one decimal place for consistent pixel values.\n */\nfunction roundToOneDecimal(value: number): number {\n  return Math.round(value * 10) / 10;\n}\n\n/**\n * Creates font sizes based on a configurable base size.\n * All sizes are calculated using ratios relative to the base.\n *\n * @param baseFontSize - The base font size in pixels (default: 14)\n * @returns Font sizes object with pixel values as strings\n *\n * @example\n * // Default (14px base)\n * createFontSizes();\n * // { tn: '10px', xs: '12px', sm: '14px', base: '14px', md: '14.5px', lg: '15px', xl: '18px', icons: '24px' }\n *\n * @example\n * // Large accessibility mode (16px base)\n * createFontSizes(16);\n * // { tn: '11.4px', xs: '13.7px', sm: '16px', base: '16px', md: '16.6px', lg: '17.1px', xl: '20.6px', icons: '24px' }\n */\nexport function createFontSizes(baseFontSize: number = DEFAULT_BASE_FONT_SIZE): FontSizes {\n  const tn = roundToOneDecimal(baseFontSize * FONT_SIZE_RATIOS.tn);\n  const xs = roundToOneDecimal(baseFontSize * FONT_SIZE_RATIOS.xs);\n  const sm = baseFontSize;\n  const base = baseFontSize;\n  const md = roundToOneDecimal(baseFontSize * FONT_SIZE_RATIOS.md);\n  const lg = roundToOneDecimal(baseFontSize * FONT_SIZE_RATIOS.lg);\n  const xl = roundToOneDecimal(baseFontSize * FONT_SIZE_RATIOS.xl);\n\n  return {\n    tn: `${tn}px`,\n    xs: `${xs}px`,\n    sm: `${sm}px`,\n    base: `${base}px`,\n    md: `${md}px`,\n    lg: `${lg}px`,\n    xl: `${xl}px`,\n    icons: '24px', // Icons maintain fixed size for consistency\n  };\n}\n\n/**\n * Creates font sizes from a preset name.\n *\n * @param preset - The preset name ('compact', 'normal', 'comfortable', 'large')\n * @returns Font sizes object with pixel values as strings\n *\n * @example\n * createFontSizesFromPreset('large');\n * // { tn: '12.9px', xs: '15.4px', sm: '18px', base: '18px', md: '18.6px', lg: '19.3px', xl: '23.1px', icons: '24px' }\n */\nexport function createFontSizesFromPreset(preset: FontScalePreset): FontSizes {\n  return createFontSizes(FONT_SCALE_PRESETS[preset]);\n}\n","import { ThemeProvider as EmotionThemeProvider, Global, css } from '@emotion/react';\n\nimport { productionTheme } from './index';\nimport type { Theme } from './index';\nimport type { ReactNode } from 'react';\n\nexport interface ThemeProviderProps {\n  theme?: Theme;\n  children: ReactNode;\n}\n\n/**\n * Creates CSS custom properties from the theme for CSS module compatibility.\n * CSS modules can use var(--color-primary) to access dynamic theme values.\n */\nconst createCssVariables = (theme: Theme) => css`\n  :root {\n    /* Dynamic tenant colors (from login API) */\n    --color-primary: ${theme.colors.primary};\n    --color-primary-text: ${theme.colors.primaryText};\n    --color-secondary: ${theme.colors.secondary};\n    --color-secondary-text: ${theme.colors.secondaryText};\n    --color-highlight: ${theme.colors.highlight};\n    --color-highlight-text: ${theme.colors.highlightText};\n    \n    /* Fixed text colors */\n    --color-text-primary: ${theme.colors.text.primary};\n    --color-text-secondary: ${theme.colors.text.secondary};\n    --color-text-muted: ${theme.colors.text.muted};\n    --color-text-inverse: ${theme.colors.text.inverse};\n    \n    /* Fixed status colors */\n    --color-success: ${theme.colors.status.success};\n    --color-error: ${theme.colors.status.error};\n    --color-warning: ${theme.colors.status.warning};\n    --color-info: ${theme.colors.status.info};\n    \n    /* Fixed background colors */\n    --color-background: ${theme.colors.background.default};\n    --color-background-hover: ${theme.colors.background.hover};\n    --color-background-active: ${theme.colors.background.active};\n    --color-background-disabled: ${theme.colors.background.disabled};\n    \n    /* Fixed border colors */\n    --color-border-light: ${theme.colors.border.light};\n    --color-border-medium: ${theme.colors.border.medium};\n    --color-border-input: ${theme.colors.border.input};\n    --color-border-dotted: ${theme.colors.border.dotted};\n    \n    /* Grey scale */\n    --color-grey-100: ${theme.colors.grey[100]};\n    --color-grey-200: ${theme.colors.grey[200]};\n    --color-grey-300: ${theme.colors.grey[300]};\n    --color-grey-400: ${theme.colors.grey[400]};\n    --color-grey-500: ${theme.colors.grey[500]};\n    --color-grey-600: ${theme.colors.grey[600]};\n    --color-grey-700: ${theme.colors.grey[700]};\n    --color-grey-800: ${theme.colors.grey[800]};\n    --color-grey-900: ${theme.colors.grey[900]};\n    \n    /* Common aliases */\n    --color-white: #ffffff;\n    --color-black: #000000;\n  }\n`;\n\nexport const ThemeProvider = ({\n  theme = productionTheme,\n  children,\n}: ThemeProviderProps) => (\n  <EmotionThemeProvider theme={theme}>\n    <Global styles={createCssVariables(theme)} />\n    {children}\n  </EmotionThemeProvider>\n);","/**\n * Theme System for IntelligenceBank UI Primitives\n *\n * This theme has two types of colors:\n *\n * 1. DYNAMIC COLORS (6 tenant-specific) - Populated from login response:\n *    - colourPrimary       → colors.primary\n *    - colourPrimaryText   → colors.primaryText\n *    - colourSecondary     → colors.secondary\n *    - colourSecondaryText → colors.secondaryText\n *    - colourHighlight     → colors.highlight\n *    - colourHighlightText → colors.highlightText\n *\n * 2. FIXED TOKENS - Never change (success, error, grey scale, etc.)\n *\n * Typography uses a relative sizing system where all font sizes are\n * derived from a configurable base. Use createTheme() to customize:\n *\n * @example\n * // Default theme (14px base)\n * import { theme } from '@intelligencebank/connectingib';\n *\n * @example\n * // Accessibility mode (16px base - all text scales proportionally)\n * import { createTheme } from '@intelligencebank/connectingib';\n * const largeTheme = createTheme({ typography: { baseFontSize: 16 } });\n */\n\nimport {\n  greyScale,\n  greenColors,\n  redColors,\n  blueColors,\n  orangeColors,\n  textColors,\n  borderColors,\n  iconColors,\n  backgroundColors,\n  statusColors,\n  snackbarColors,\n  progressColors,\n  transparentBlack,\n  transparentWhite,\n  defaultPaletteColors,\n  ibUiShadows,\n  borderRadius as ibUiBorderRadius,\n} from './colors';\nimport {\n  createFontSizes,\n  DEFAULT_BASE_FONT_SIZE,\n  FONT_SCALE_PRESETS,\n  type TypographyConfig,\n  type FontSizes,\n  type FontScalePreset,\n} from './typography';\n\n/**\n * Grey scale - FIXED (never changes per tenant)\n */\nconst grey = {\n  100: greyScale.grey100,\n  150: greyScale.grey150,\n  200: greyScale.grey200,\n  300: greyScale.grey300,\n  400: greyScale.grey400,\n  500: greyScale.grey500,\n  600: greyScale.grey600,\n  700: greyScale.grey700,\n  800: greyScale.grey800,\n  900: greyScale.grey900,\n} as const;\n\n/**\n * Semantic color scales - FIXED (never changes per tenant)\n */\nconst semantic = {\n  green: {\n    lighter: greenColors.greenLighter,\n    light: greenColors.greenLight,\n    base: greenColors.greenBase,\n    dark: greenColors.greenDark,\n    darker: greenColors.greenDarker,\n  },\n  red: {\n    lighter2: redColors.redLighter2,\n    lighter: redColors.redLighter,\n    light: redColors.redLight,\n    base: redColors.redBase,\n    dark: redColors.redDark,\n    darker: redColors.redDarker,\n  },\n  blue: {\n    lighter2: blueColors.blueLighter2,\n    lighter: blueColors.blueLighter,\n    light: blueColors.blueLight,\n    base: blueColors.blueBase,\n    dark: blueColors.blueDark,\n    darker: blueColors.blueDarker,\n    link: blueColors.blueLink,\n  },\n  orange: {\n    lighter2: orangeColors.orangeLighter2,\n    lighter: orangeColors.orangeLighter,\n    light: orangeColors.orangeLight,\n    base: orangeColors.orangeBase,\n    dark: orangeColors.orangeDark,\n    darker: orangeColors.orangeDarker,\n  },\n} as const;\n\nexport const productionTheme = {\n  colors: {\n    // =================================================================\n    // DYNAMIC COLORS (6 tenant-specific, populated from login response)\n    //\n    // Login Response Field    →    Theme Property\n    // ─────────────────────────────────────────────\n    // colourPrimary           →    colors.primary\n    // colourPrimaryText       →    colors.primaryText\n    // colourSecondary         →    colors.secondary\n    // colourSecondaryText     →    colors.secondaryText\n    // colourHighlight         →    colors.highlight\n    // colourHighlightText     →    colors.highlightText\n    // =================================================================\n    primary: defaultPaletteColors.PRIMARY_DEFAULT,\n    primaryText: defaultPaletteColors.PRIMARY_TEXT_DEFAULT,\n    secondary: defaultPaletteColors.SECONDARY_DEFAULT,\n    secondaryText: defaultPaletteColors.SECONDARY_TEXT_DEFAULT,\n    highlight: defaultPaletteColors.HIGHLIGHT_DEFAULT,\n    highlightText: defaultPaletteColors.HIGHLIGHT_TEXT_DEFAULT,\n\n    // =================================================================\n    // FIXED TOKENS (never change per tenant)\n    // =================================================================\n\n    // Base colors\n    white: '#FFFFFF',\n    black: '#000000',\n\n    // Text colors\n    text: {\n      primary: textColors.textColor,\n      secondary: 'rgba(0, 0, 0, 0.7)',\n      muted: '#949494',\n      inverse: '#FFFFFF',\n      fade: textColors.textColorFade,\n      instruction: textColors.instructionColor,\n      help: textColors.helpTextColor,\n    },\n\n    // Status colors\n    status: {\n      success: statusColors.successColor,\n      error: statusColors.errorColor,\n      warning: statusColors.warningColor,\n      info: statusColors.infoColor,\n      notice: statusColors.noticeColor,\n    },\n\n    // Snackbar colors\n    snackbar: {\n      success: snackbarColors.snackbarSuccessBackground,\n      error: snackbarColors.snackbarErrorBackground,\n      warning: snackbarColors.snackbarWarningBackground,\n    },\n\n    // Progress colors\n    progress: {\n      complete: progressColors.progressBarCompletedColor,\n      error: progressColors.progressBarErrorColor,\n    },\n\n    // Background colors\n    background: {\n      default: '#FFFFFF',\n      hover: '#efefef',\n      active: '#e8e8e8',\n      disabled: '#eee',\n      processing: backgroundColors.backgroundProcessingColor,\n      row: backgroundColors.rowGrey,\n    },\n\n    // Border colors\n    border: {\n      light: '#f5f5f5',\n      medium: '#BFBFBF',\n      input: '#949494',\n      dotted: '#eee',\n      grey: borderColors.borderGrey,\n      shadow: borderColors.borderShadow,\n    },\n\n    // Icon colors\n    icon: {\n      grey: iconColors.iconGrey,\n      disabled: iconColors.iconGreyDisabled,\n      background: iconColors.iconBackground,\n    },\n\n    // Grey scale\n    grey,\n\n    // Semantic colors (green, red, blue, orange scales)\n    semantic,\n\n    // Transparency utilities\n    transparent: {\n      black50: transparentBlack.transparentBlack50,\n      black20: transparentBlack.transparentBlack20,\n      black08: transparentBlack.transparentBlack08,\n      black05: transparentBlack.transparentBlack05,\n      white50: transparentWhite.transparentWhite50,\n      white20: transparentWhite.transparentWhite20,\n      white05: transparentWhite.transparentWhite05,\n    },\n  },\n  \n  typography: {\n    fontFamily: '\"Roboto\", sans-serif',\n    fontFamilyIcons: '\"Material Symbols Outlined\"',\n    \n    // Base font size that all other sizes are derived from\n    baseFontSize: DEFAULT_BASE_FONT_SIZE,\n    \n    // Font sizes calculated from baseFontSize using ratios\n    fontSize: createFontSizes(DEFAULT_BASE_FONT_SIZE),\n    \n    fontWeight: {\n      regular: 400,\n      medium: 500,\n      semibold: 600,\n      bold: 700,\n    },\n    \n    lineHeight: {\n      tight: '1.25',\n      normal: '1.5',\n      relaxed: '20px',  // Production uses 20px for buttons\n    },\n  },\n  \n  spacing: {\n    0: '0',\n    px: '1px',\n    1: '4px',\n    2: '6px',\n    3: '8px',\n    4: '10px',\n    5: '12px',\n    6: '16px',\n    7: '24px',\n    8: '32px',\n  },\n  \n  sizes: {\n    buttonHeight: '36px',\n    headerHeight: '48px',\n    navHeight: '52px',\n    thumbnailSmall: '96px',\n    thumbnailLarge: '200px',\n    iconSize: '24px',\n  },\n  \n  borders: {\n    radius: {\n      sm: '4px',\n      md: '8px',\n      full: '9999px',\n      // ib-ui naming convention\n      small: ibUiBorderRadius.borderRadiusSmall,\n      medium: ibUiBorderRadius.borderRadiusMedium,\n      large: ibUiBorderRadius.borderRadiusLarge,\n    },\n    width: {\n      thin: '1px',\n      medium: '2px',\n    },\n  },\n  \n  shadows: {\n    card: '0px 2px 8px 2px rgb(0 0 0 / 18%)',\n    dropdown: '0px 2px 5px rgba(0, 0, 0, 0.25)',\n    menu: '0 2px 8px rgba(0, 0, 0, 0.2)',\n    snackbar: '0px 2px 5px rgb(0 0 0 / 25%)',\n    // ib-ui shadows\n    ibUi: {\n      100: ibUiShadows.shadow100,\n      200: ibUiShadows.shadow200,\n      300: ibUiShadows.shadow300,\n      footer: ibUiShadows.shadowFooter,\n      selected: ibUiShadows.shadowSelected,\n    },\n  },\n  \n  transitions: {\n    fast: 'opacity 0.2s, transform 0.1s',\n    normal: '200ms',\n    slow: '400ms',\n    easing: {\n      slide: 'cubic-bezier(0.17, 0.04, 0.03, 0.94)',\n      easeOut: 'cubic-bezier(0, 0, 0.2, 1)',\n    },\n  },\n  \n  zIndex: {\n    base: 0,\n    header: 1,\n    dropdown: 99,\n    modal: 1000,\n    snackbar: 10000,\n  },\n} as const;\n\nexport type Theme = typeof productionTheme;\n\n/**\n * Theme configuration options for createTheme().\n */\nexport interface ThemeConfig {\n  /**\n   * Typography configuration options.\n   */\n  typography?: Partial<TypographyConfig>;\n  \n  /**\n   * Dynamic tenant colors (from login API response).\n   */\n  colors?: {\n    primary?: string;\n    primaryText?: string;\n    secondary?: string;\n    secondaryText?: string;\n    highlight?: string;\n    highlightText?: string;\n  };\n}\n\n/**\n * Creates a customized theme with the given configuration.\n * Use this to create themes with different base font sizes for accessibility,\n * or to apply tenant-specific colors from the login API response.\n *\n * @param config - Theme configuration options\n * @returns A complete theme object\n *\n * @example\n * // Default theme (same as importing `theme`)\n * const defaultTheme = createTheme();\n *\n * @example\n * // Large accessibility mode (16px base)\n * const largeTheme = createTheme({\n *   typography: { baseFontSize: 16 }\n * });\n *\n * @example\n * // With tenant colors from login response\n * const tenantTheme = createTheme({\n *   colors: {\n *     primary: loginResponse.colourPrimary,\n *     highlight: loginResponse.colourHighlight,\n *   }\n * });\n *\n * @example\n * // Using font scale presets\n * import { FONT_SCALE_PRESETS } from '@intelligencebank/connectingib';\n * const comfortableTheme = createTheme({\n *   typography: { baseFontSize: FONT_SCALE_PRESETS.comfortable }\n * });\n */\nexport function createTheme(config: ThemeConfig = {}): Theme {\n  const baseFontSize = config.typography?.baseFontSize ?? DEFAULT_BASE_FONT_SIZE;\n  \n  return {\n    ...productionTheme,\n    colors: {\n      ...productionTheme.colors,\n      ...(config.colors?.primary && { primary: config.colors.primary }),\n      ...(config.colors?.primaryText && { primaryText: config.colors.primaryText }),\n      ...(config.colors?.secondary && { secondary: config.colors.secondary }),\n      ...(config.colors?.secondaryText && { secondaryText: config.colors.secondaryText }),\n      ...(config.colors?.highlight && { highlight: config.colors.highlight }),\n      ...(config.colors?.highlightText && { highlightText: config.colors.highlightText }),\n    },\n    typography: {\n      ...productionTheme.typography,\n      baseFontSize,\n      fontSize: createFontSizes(baseFontSize),\n    },\n  } as Theme;\n}\n\n// Default theme (backward compatible)\nexport const theme = productionTheme;\n\n// Alias for API consistency\nexport { productionTheme as defaultTheme };\n\n// Re-export ThemeProvider\nexport { ThemeProvider } from './ThemeProvider';\nexport type { ThemeProviderProps } from './ThemeProvider';\n\n// Re-export typography utilities\nexport {\n  createFontSizes,\n  DEFAULT_BASE_FONT_SIZE,\n  FONT_SCALE_PRESETS,\n};\nexport type { TypographyConfig, FontSizes, FontScalePreset };\n\n// Re-export colors module\nexport * from './colors';\n\n// Re-export for convenience\nexport default productionTheme;\n","import { forwardRef } from 'react';\nimport { keyframes } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { theme } from '../../theme';\nimport { Spinner } from '../Spinner';\nimport type { LoadingPlaceholderProps, SkeletonShape, SkeletonAnimation } from './LoadingPlaceholder.types';\n\nconst shimmer = keyframes`\n  0% {\n    background-position: -200% 0;\n  }\n  100% {\n    background-position: 200% 0;\n  }\n`;\n\nconst pulse = keyframes`\n  0%, 100% {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0.5;\n  }\n`;\n\ninterface SkeletonStyleProps {\n  $width: number | string;\n  $height: number | string;\n  $shape: SkeletonShape;\n  $animation: SkeletonAnimation;\n}\n\nconst getBorderRadius = (shape: SkeletonShape): string => {\n  switch (shape) {\n    case 'circle':\n      return '50%';\n    case 'rounded':\n      return '6px';\n    case 'rectangle':\n    default:\n      return '0';\n  }\n};\n\nconst getWidth = (width: number | string): string => {\n  return typeof width === 'number' ? `${width}px` : width;\n};\n\nconst getHeight = (height: number | string): string => {\n  return typeof height === 'number' ? `${height}px` : height;\n};\n\nconst SkeletonItem = styled.div<SkeletonStyleProps>`\n  width: ${({ $width }) => getWidth($width)};\n  height: ${({ $height }) => getHeight($height)};\n  border-radius: ${({ $shape }) => getBorderRadius($shape)};\n  background: ${({ $animation }) =>\n    $animation === 'shimmer'\n      ? 'linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%)'\n      : '#f0f0f0'};\n  background-size: ${({ $animation }) => ($animation === 'shimmer' ? '200% 100%' : 'auto')};\n  animation: ${({ $animation }) => ($animation === 'shimmer' ? shimmer : pulse)} 1.5s infinite;\n\n  @media (prefers-reduced-motion: reduce) {\n    animation: none;\n    background: #f0f0f0;\n  }\n`;\n\ninterface ContainerStyleProps {\n  $gap: number | string;\n}\n\nconst Container = styled.div<ContainerStyleProps>`\n  display: flex;\n  flex-direction: column;\n  gap: ${({ $gap }) => (typeof $gap === 'number' ? `${$gap}px` : $gap)};\n`;\n\nconst SpinnerContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: ${theme.spacing[3]};\n  padding: ${theme.spacing[3]};\n`;\n\nconst LoadingText = styled.span`\n  font-size: ${theme.typography.fontSize.sm};\n  color: ${theme.colors.text.secondary};\n  font-family: ${theme.typography.fontFamily};\n`;\n\n/**\n * LoadingPlaceholder - A versatile loading indicator component\n *\n * Displays either skeleton placeholders with shimmer/pulse animation\n * or a spinner with optional loading text.\n *\n * @example\n * ```tsx\n * // Skeleton placeholder for a form field\n * <LoadingPlaceholder height={42} shape=\"rounded\" />\n *\n * // Multiple skeleton items\n * <LoadingPlaceholder count={3} height={20} gap={8} />\n *\n * // Spinner with text\n * <LoadingPlaceholder variant=\"spinner\" text=\"Loading...\" />\n *\n * // Circle skeleton (avatar placeholder)\n * <LoadingPlaceholder width={48} height={48} shape=\"circle\" />\n * ```\n */\nexport const LoadingPlaceholder = forwardRef<HTMLDivElement, LoadingPlaceholderProps>(\n  (\n    {\n      variant = 'skeleton',\n      count = 1,\n      height = 42,\n      width = '100%',\n      shape = 'rounded',\n      gap = 8,\n      text,\n      animation = 'shimmer',\n      className,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    if (variant === 'spinner') {\n      return (\n        <SpinnerContainer\n          ref={ref}\n          className={className}\n          data-testid={dataTestId}\n          data-id={dataId}\n        >\n          <Spinner size=\"sm\" />\n          {text && <LoadingText>{text}</LoadingText>}\n        </SpinnerContainer>\n      );\n    }\n\n    if (count === 1) {\n      return (\n        <SkeletonItem\n          ref={ref}\n          $width={width}\n          $height={height}\n          $shape={shape}\n          $animation={animation}\n          className={className}\n          data-testid={dataTestId}\n          data-id={dataId}\n          aria-busy=\"true\"\n          aria-label=\"Loading\"\n        />\n      );\n    }\n\n    return (\n      <Container\n        ref={ref}\n        $gap={gap}\n        className={className}\n        data-testid={dataTestId}\n        data-id={dataId}\n        aria-busy=\"true\"\n        aria-label=\"Loading\"\n      >\n        {Array.from({ length: count }, (_, index) => (\n          <SkeletonItem\n            key={index}\n            $width={width}\n            $height={height}\n            $shape={shape}\n            $animation={animation}\n          />\n        ))}\n      </Container>\n    );\n  }\n);\n\nLoadingPlaceholder.displayName = 'LoadingPlaceholder';\n\nexport default LoadingPlaceholder;\n","import { forwardRef, useCallback, useRef, useState, useEffect } from 'react';\nimport styled from '@emotion/styled';\nimport { css } from '@emotion/react';\nimport { Tooltip } from '../Tooltip';\nimport type { TabsProps, TabsVariant, TabsSize, Tab } from './Tabs.types';\n\n/**\n * Get size-based styles\n */\nconst getSizeStyles = (size: TabsSize, theme: any) => {\n  switch (size) {\n    case 'sm':\n      return {\n        fontSize: theme.typography.fontSize.xs,\n        padding: '6px 10px',\n        gap: '4px',\n        iconSize: '14px',\n        height: '28px',\n      };\n    case 'lg':\n      return {\n        fontSize: theme.typography.fontSize.md,\n        padding: '12px 20px',\n        gap: '8px',\n        iconSize: '20px',\n        height: '44px',\n      };\n    case 'md':\n    default:\n      return {\n        fontSize: theme.typography.fontSize.sm,\n        padding: '8px 16px',\n        gap: '6px',\n        iconSize: '18px',\n        height: '36px',\n      };\n  }\n};\n\n/**\n * Container for the tab list\n */\nconst TabsContainer = styled.div<{\n  $fullWidth: boolean;\n  $variant: TabsVariant;\n  $scrollable: boolean;\n  $size: TabsSize;\n}>`\n  display: flex;\n  flex-direction: row;\n  align-items: stretch;\n  position: relative;\n  width: ${({ $fullWidth }) => ($fullWidth ? '100%' : 'auto')};\n  \n  ${({ $scrollable }) =>\n    $scrollable &&\n    css`\n      overflow-x: auto;\n      overflow-y: hidden;\n      scrollbar-width: thin;\n      -webkit-overflow-scrolling: touch;\n      \n      &::-webkit-scrollbar {\n        height: 4px;\n      }\n      \n      &::-webkit-scrollbar-track {\n        background: transparent;\n      }\n      \n      &::-webkit-scrollbar-thumb {\n        background-color: rgba(0, 0, 0, 0.2);\n        border-radius: 2px;\n      }\n    `}\n  \n  ${({ $variant, $size, theme }) => {\n    const sizeStyles = getSizeStyles($size, theme);\n    \n    switch ($variant) {\n      case 'underline':\n        return css`\n          border-bottom: 1px solid ${theme.colors.border.medium};\n        `;\n      case 'pills':\n      case 'primary':\n        return css`\n          background-color: rgba(0, 0, 0, 0.05);\n          border-radius: ${parseInt(sizeStyles.height) / 2}px;\n          padding: 0;\n          gap: 0;\n        `;\n      default:\n        return css`\n          gap: 0;\n        `;\n    }\n  }}\n`;\n\n/**\n * Slider indicator for pills/primary variant\n */\nconst TabSlider = styled.div<{\n  $left: number;\n  $width: number;\n  $primary: boolean;\n  $disabled: boolean;\n  $isInitialRender: boolean;\n  $height: number;\n}>`\n  position: absolute;\n  top: 0;\n  z-index: 1;\n  height: ${({ $height }) => $height}px;\n  width: ${({ $width }) => $width}px;\n  left: ${({ $left }) => $left}px;\n  border-radius: ${({ $height }) => $height / 2}px;\n  border: 1px solid ${({ $disabled, theme }) =>\n    $disabled ? theme.colors.grey[200] : theme.colors.highlight};\n  background-color: ${({ $disabled, $primary, theme }) => {\n    if ($disabled) return theme.colors.white;\n    if ($primary) return theme.colors.highlight;\n    return theme.colors.white;\n  }};\n  transition: ${({ $isInitialRender }) =>\n    $isInitialRender ? 'none' : 'width 0.3s ease, left 0.3s ease'};\n  will-change: transform, width, left;\n  pointer-events: none;\n`;\n\n/**\n * Individual tab button\n */\nconst TabButton = styled.button<{\n  $isActive: boolean;\n  $variant: TabsVariant;\n  $size: TabsSize;\n  $fullWidth: boolean;\n  $iconOnly: boolean;\n}>`\n  position: relative;\n  z-index: 2;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid transparent;\n  background: transparent;\n  cursor: pointer;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n  transition: color 0.2s ease;\n  white-space: nowrap;\n  flex: ${({ $fullWidth }) => ($fullWidth ? '1 1 0' : '0 0 auto')};\n  min-width: ${({ $fullWidth }) => ($fullWidth ? '0' : 'auto')};\n  \n  /* Size styles */\n  ${({ $size, $iconOnly, theme }) => {\n    const sizeStyles = getSizeStyles($size, theme);\n    return css`\n      font-size: ${sizeStyles.fontSize};\n      padding: ${$iconOnly ? `0 12px` : sizeStyles.padding};\n      gap: ${sizeStyles.gap};\n      height: ${sizeStyles.height};\n    `;\n  }}\n  \n  /* Variant styles */\n  ${({ $variant, $isActive, theme }) => {\n    switch ($variant) {\n      case 'pills':\n        return css`\n          border-radius: 18px;\n          color: ${$isActive ? theme.colors.grey[600] : theme.colors.grey[600]};\n          \n          &:hover:not(:disabled) {\n            color: ${theme.colors.grey[800]};\n          }\n        `;\n      case 'primary':\n        return css`\n          border-radius: 18px;\n          color: ${$isActive ? theme.colors.white : theme.colors.grey[600]};\n          \n          &:hover:not(:disabled) {\n            color: ${$isActive ? theme.colors.white : theme.colors.grey[800]};\n          }\n        `;\n      case 'underline':\n        return css`\n          color: ${$isActive ? theme.colors.highlight : theme.colors.text.secondary};\n          margin-bottom: -1px;\n          \n          &::after {\n            content: '';\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            right: 0;\n            height: 2px;\n            background-color: ${$isActive ? theme.colors.highlight : 'transparent'};\n            transition: background-color 0.2s;\n          }\n          \n          &:hover:not(:disabled)::after {\n            background-color: ${$isActive ? theme.colors.highlight : theme.colors.border.medium};\n          }\n          \n          &:hover:not(:disabled) {\n            color: ${$isActive ? theme.colors.highlight : theme.colors.text.primary};\n          }\n        `;\n      default:\n        return css`\n          color: ${$isActive ? theme.colors.highlight : theme.colors.text.secondary};\n          border-bottom: 2px solid ${$isActive ? theme.colors.highlight : 'transparent'};\n          \n          &:hover:not(:disabled) {\n            color: ${$isActive ? theme.colors.highlight : theme.colors.text.primary};\n            border-bottom-color: ${$isActive ? theme.colors.highlight : theme.colors.border.medium};\n          }\n        `;\n    }\n  }}\n  \n  /* Disabled state */\n  &:disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n    pointer-events: none;\n    color: ${({ theme }) => theme.colors.grey[400]};\n  }\n  \n  /* Focus state - accessible */\n  &:focus {\n    outline: none;\n  }\n  \n  &:focus-visible {\n    border: 1px solid ${({ theme }) => theme.colors.grey[400]};\n    ${({ $isActive }) =>\n      $isActive &&\n      css`\n        outline: 2px solid rgba(0, 0, 0, 0.2);\n      `}\n  }\n`;\n\n/**\n * Icon wrapper for consistent sizing\n */\nconst IconWrapper = styled.span<{ $size: TabsSize }>`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  \n  ${({ $size, theme }) => {\n    const sizeStyles = getSizeStyles($size, theme);\n    return css`\n      width: ${sizeStyles.iconSize};\n      height: ${sizeStyles.iconSize};\n      \n      svg {\n        width: 100%;\n        height: 100%;\n      }\n    `;\n  }}\n`;\n\n/**\n * Badge for tab labels\n */\nconst Badge = styled.span`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0 6px;\n  min-width: 18px;\n  height: 18px;\n  font-size: 11px;\n  font-weight: 600;\n  line-height: 1;\n  border-radius: 9px;\n  background-color: ${({ theme }) => theme.colors.highlight};\n  color: ${({ theme }) => theme.colors.white};\n  margin-left: 4px;\n`;\n\n/**\n * Tabs component - A navigation component for switching between views\n *\n * @example\n * ```tsx\n * const [activeTab, setActiveTab] = useState('tab1');\n * \n * <Tabs\n *   tabs={[\n *     { id: 'tab1', label: 'Overview' },\n *     { id: 'tab2', label: 'Details', icon: <InfoIcon /> },\n *     { id: 'tab3', label: 'Settings', disabled: true },\n *     { id: 'tab4', label: 'Notifications', badgeText: '5' },\n *   ]}\n *   activeTab={activeTab}\n *   onTabChange={setActiveTab}\n *   variant=\"underline\"\n *   size=\"md\"\n * />\n * \n * // Scrollable tabs for many items\n * <Tabs\n *   tabs={manyTabs}\n *   activeTab={activeTab}\n *   onTabChange={setActiveTab}\n *   scrollable\n * />\n * \n * // Expanded tabs that fill width\n * <Tabs\n *   tabs={tabs}\n *   activeTab={activeTab}\n *   onTabChange={setActiveTab}\n *   expandTabs\n * />\n * \n * // Primary (filled) variant\n * <Tabs\n *   tabs={tabs}\n *   activeTab={activeTab}\n *   onTabChange={setActiveTab}\n *   variant=\"primary\"\n * />\n * ```\n */\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n  (\n    {\n      tabs,\n      activeTab,\n      onTabChange,\n      variant = 'default',\n      size = 'md',\n      fullWidth = false,\n      expandTabs = false,\n      scrollable = false,\n      className,\n      'aria-label': ariaLabel = 'Tab navigation',\n      'data-testid': testId,\n    },\n    ref\n  ) => {\n    const tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [sliderStyle, setSliderStyle] = useState({ left: 0, width: 0 });\n    const [isInitialRender, setIsInitialRender] = useState(true);\n    \n    // Use expandTabs or fullWidth (expandTabs takes precedence for ib-ui compatibility)\n    const shouldExpand = expandTabs || fullWidth;\n    \n    // Is this a pill/primary variant that needs the slider?\n    const useSlider = variant === 'pills' || variant === 'primary';\n    \n    // Update slider position when active tab changes\n    useEffect(() => {\n      if (!useSlider) return;\n      \n      const activeElement = tabRefs.current.get(activeTab);\n      if (activeElement && containerRef.current) {\n        const containerRect = containerRef.current.getBoundingClientRect();\n        const tabRect = activeElement.getBoundingClientRect();\n        \n        setSliderStyle({\n          left: tabRect.left - containerRect.left,\n          width: tabRect.width,\n        });\n      }\n      \n      // After first render, enable transitions\n      if (isInitialRender) {\n        requestAnimationFrame(() => {\n          setIsInitialRender(false);\n        });\n      }\n    }, [activeTab, useSlider, isInitialRender, tabs]);\n    \n    const handleKeyDown = useCallback(\n      (event: React.KeyboardEvent<HTMLButtonElement>, currentIndex: number) => {\n        const currentTab = tabs[currentIndex];\n        if (!currentTab) return;\n        \n        const enabledTabs = tabs.filter(tab => !tab.disabled);\n        const currentEnabledIndex = enabledTabs.findIndex(\n          tab => tab.id === currentTab.id\n        );\n        \n        let nextIndex: number | null = null;\n        \n        switch (event.key) {\n          case 'ArrowLeft':\n          case 'ArrowUp':\n            event.preventDefault();\n            nextIndex = currentEnabledIndex - 1;\n            if (nextIndex < 0) nextIndex = enabledTabs.length - 1;\n            break;\n          case 'ArrowRight':\n          case 'ArrowDown':\n            event.preventDefault();\n            nextIndex = currentEnabledIndex + 1;\n            if (nextIndex >= enabledTabs.length) nextIndex = 0;\n            break;\n          case 'Home':\n            event.preventDefault();\n            nextIndex = 0;\n            break;\n          case 'End':\n            event.preventDefault();\n            nextIndex = enabledTabs.length - 1;\n            break;\n        }\n        \n        if (nextIndex !== null) {\n          const nextTab = enabledTabs[nextIndex];\n          if (nextTab) {\n            const nextTabElement = tabRefs.current.get(nextTab.id);\n            if (nextTabElement) {\n              nextTabElement.focus();\n              onTabChange(nextTab.id);\n            }\n          }\n        }\n      },\n      [tabs, onTabChange]\n    );\n    \n    const setTabRef = useCallback((id: string, element: HTMLButtonElement | null) => {\n      if (element) {\n        tabRefs.current.set(id, element);\n      } else {\n        tabRefs.current.delete(id);\n      }\n    }, []);\n    \n    const handleTabClick = useCallback(\n      (tab: Tab, event: React.MouseEvent<HTMLButtonElement>) => {\n        if (tab.disabled) return;\n        tab.onClick?.(event);\n        onTabChange(tab.id);\n      },\n      [onTabChange]\n    );\n    \n    const sizeStyles = getSizeStyles(size, { typography: { fontSize: { xs: '12px', sm: '14px', md: '14.5px' } } });\n    const activeTabData = tabs.find(t => t.id === activeTab);\n    \n    const renderTabButton = (tab: Tab, index: number) => {\n      const isActive = tab.id === activeTab;\n      const iconOnly = !!tab.icon && !tab.label;\n      \n      const button = (\n        <TabButton\n          key={tab.id}\n          ref={(el) => setTabRef(tab.id, el)}\n          role=\"tab\"\n          id={`tab-${tab.id}`}\n          aria-selected={isActive}\n          aria-controls={`tabpanel-${tab.id}`}\n          tabIndex={isActive ? 0 : -1}\n          disabled={tab.disabled}\n          onClick={(e) => handleTabClick(tab, e)}\n          onKeyDown={(e) => handleKeyDown(e, index)}\n          $isActive={isActive}\n          $variant={variant}\n          $size={size}\n          $fullWidth={shouldExpand}\n          $iconOnly={iconOnly}\n          data-id={tab.dataId}\n          data-testid={testId ? `${testId}-tab-${tab.id}` : undefined}\n        >\n          {tab.icon && (\n            <IconWrapper $size={size} aria-hidden=\"true\">\n              {tab.icon}\n            </IconWrapper>\n          )}\n          {tab.label}\n          {tab.badgeText && <Badge>{tab.badgeText}</Badge>}\n        </TabButton>\n      );\n      \n      if (tab.tooltip) {\n        return (\n          <Tooltip key={tab.id} content={tab.tooltip}>\n            {button}\n          </Tooltip>\n        );\n      }\n      \n      return button;\n    };\n    \n    return (\n      <TabsContainer\n        ref={(node) => {\n          (containerRef as any).current = node;\n          if (typeof ref === 'function') {\n            ref(node);\n          } else if (ref) {\n            ref.current = node;\n          }\n        }}\n        role=\"tablist\"\n        aria-label={ariaLabel}\n        className={className}\n        data-testid={testId}\n        $fullWidth={shouldExpand}\n        $variant={variant}\n        $scrollable={scrollable}\n        $size={size}\n      >\n        {useSlider && (\n          <TabSlider\n            $left={sliderStyle.left}\n            $width={sliderStyle.width}\n            $primary={variant === 'primary'}\n            $disabled={!!activeTabData?.disabled}\n            $isInitialRender={isInitialRender}\n            $height={parseInt(sizeStyles.height)}\n            aria-hidden=\"true\"\n          />\n        )}\n        {tabs.map((tab, index) => renderTabButton(tab, index))}\n      </TabsContainer>\n    );\n  }\n);\n\nTabs.displayName = 'Tabs';\n\nexport default Tabs;\n","import { forwardRef, useCallback, useRef, useState, useEffect } from 'react';\nimport styled from '@emotion/styled';\nimport { css, keyframes } from '@emotion/react';\nimport type { DropZoneProps, DropZoneVariant, DropZoneSize } from './DropZone.types';\nimport { Button } from '../Button';\nimport { Message } from '../Message';\n\n/**\n * Get size-based styles\n */\nconst getSizeStyles = (size: DropZoneSize, theme: any) => {\n  switch (size) {\n    case 'sm':\n      return {\n        padding: '16px',\n        fontSize: theme.typography.fontSize.xs,\n        iconSize: '24px',\n        minHeight: '80px',\n      };\n    case 'lg':\n      return {\n        padding: '32px',\n        fontSize: theme.typography.fontSize.md,\n        iconSize: '48px',\n        minHeight: '180px',\n      };\n    case 'md':\n    default:\n      return {\n        padding: '24px',\n        fontSize: theme.typography.fontSize.sm,\n        iconSize: '36px',\n        minHeight: '120px',\n      };\n  }\n};\n\n/**\n * Root container for the drop zone with error message support\n */\nconst Root = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  width: 100%;\n`;\n\n/**\n * Container for the drop zone\n */\nconst DropZoneContainer = styled.div<{\n  $isDragOver: boolean;\n  $disabled: boolean;\n  $variant: DropZoneVariant;\n  $size: DropZoneSize;\n  $error: boolean;\n}>`\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  transition: ${({ theme }) => theme.transitions.fast};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  box-sizing: border-box;\n  \n  /* Size styles */\n  ${({ $size, theme }) => {\n    const sizeStyles = getSizeStyles($size, theme);\n    return `\n      padding: ${sizeStyles.padding};\n      font-size: ${sizeStyles.fontSize};\n      min-height: ${sizeStyles.minHeight};\n    `;\n  }}\n  \n  /* Variant styles */\n  ${({ $variant, $isDragOver, $disabled, $error, theme }) => {\n    const borderColor = $error\n      ? theme.colors.status.error\n      : ($isDragOver && !$disabled ? theme.colors.highlight : theme.colors.border.medium);\n    \n    if ($variant === 'compact') {\n      return `\n        border: ${theme.borders.width.thin} dashed ${borderColor};\n        border-radius: ${theme.borders.radius.sm};\n        background-color: ${$isDragOver && !$disabled ? `color-mix(in srgb, ${theme.colors.highlight} 8%, transparent)` : theme.colors.background.default};\n      `;\n    }\n    \n    return `\n      border: ${theme.borders.width.medium} dashed ${borderColor};\n      border-radius: ${theme.borders.radius.md};\n      background-color: ${$isDragOver && !$disabled ? `color-mix(in srgb, ${theme.colors.highlight} 8%, transparent)` : theme.colors.background.hover};\n    `;\n  }}\n  \n  /* Hover state */\n  &:hover:not([data-disabled=\"true\"]) {\n    border-color: ${({ theme, $isDragOver, $error }) =>\n      $error ? theme.colors.status.error : ($isDragOver ? theme.colors.highlight : theme.colors.text.secondary)};\n    background-color: ${({ theme }) => theme.colors.background.active};\n  }\n  \n  /* Disabled state */\n  ${({ $disabled, theme }) => $disabled && `\n    opacity: 0.5;\n    background-color: ${theme.colors.background.disabled};\n    pointer-events: none;\n  `}\n  \n  /* Focus visible for accessibility */\n  &:focus-visible {\n    outline: 2px solid ${({ theme }) => theme.colors.highlight};\n    outline-offset: 2px;\n  }\n`;\n\n/**\n * Hidden file input\n */\nconst HiddenInput = styled.input`\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n`;\n\n/**\n * Default content container\n */\nconst DefaultContent = styled.div<{ $size: DropZoneSize }>`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  color: ${({ theme }) => theme.colors.text.secondary};\n`;\n\n/**\n * Upload icon SVG\n */\nconst UploadIcon = styled.svg<{ $size: DropZoneSize; $error?: boolean }>`\n  ${({ $size, theme }) => {\n    const sizeStyles = getSizeStyles($size, theme);\n    return `\n      width: ${sizeStyles.iconSize};\n      height: ${sizeStyles.iconSize};\n    `;\n  }}\n  fill: ${({ theme, $error }) => $error ? theme.colors.status.error : 'currentColor'};\n`;\n\n/**\n * Text content\n */\nconst DropText = styled.span<{ $error?: boolean }>`\n  color: ${({ theme, $error }) => $error ? theme.colors.status.error : theme.colors.text.secondary};\n`;\n\n/**\n * Browse link styled text\n */\nconst BrowseText = styled.span<{ $error?: boolean }>`\n  color: ${({ theme, $error }) => $error ? theme.colors.status.error : theme.colors.highlight};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n  text-decoration: underline;\n  \n  &:hover {\n    text-decoration: underline;\n  }\n`;\n\n/**\n * Hint text for file size or types\n */\nconst HintText = styled.span`\n  color: ${({ theme }) => theme.colors.text.muted};\n  font-size: ${({ theme }) => theme.typography.fontSize.xs};\n`;\n\n/**\n * Spacer for visual separation between hint sections\n */\nconst HintSpacer = styled.div`\n  height: 4px;\n`;\n\n/**\n * Preview wrapper container\n */\nconst PreviewWrapper = styled.div`\n  position: relative;\n  width: 100%;\n`;\n\n/**\n * Preview container with styling\n */\nconst PreviewContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  width: 100%;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid ${({ theme }) => theme.colors.border.medium};\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  padding: 24px;\n  position: relative;\n  box-sizing: border-box;\n`;\n\n/**\n * Preview image container\n */\nconst PreviewImageContainer = styled.div`\n  width: 240px;\n  height: 160px;\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  overflow: hidden;\n  position: relative;\n  flex-shrink: 0;\n  border: 1px solid ${({ theme }) => theme.colors.border.medium};\n`;\n\n/**\n * Preview image\n */\nconst PreviewImage = styled.img`\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n`;\n\n/**\n * Preview placeholder for non-image files\n */\nconst PreviewPlaceholder = styled.div`\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background-color: ${({ theme }) => theme.colors.background.hover};\n  color: ${({ theme }) => theme.colors.text.secondary};\n  font-size: ${({ theme }) => theme.typography.fontSize.sm};\n`;\n\n/**\n * Preview file info container\n */\nconst PreviewInfo = styled.div`\n  display: flex;\n  gap: 12px;\n  align-items: center;\n  justify-content: center;\n  flex-wrap: wrap;\n`;\n\n/**\n * File name and size text\n */\nconst FileInfoText = styled.span`\n  color: ${({ theme }) => theme.colors.text.secondary};\n  font-size: ${({ theme }) => theme.typography.fontSize.sm};\n`;\n\n/**\n * Progress bar animation\n */\nconst progressAnimation = keyframes`\n  0% {\n    background-position: 0% 50%;\n  }\n  100% {\n    background-position: 100% 50%;\n  }\n`;\n\n/**\n * Progress bar container\n */\nconst ProgressBar = styled.div<{ $progress: number }>`\n  width: 100%;\n  height: 4px;\n  background-color: ${({ theme }) => theme.colors.border.light};\n  border-radius: 2px;\n  overflow: hidden;\n  margin-top: 8px;\n`;\n\n/**\n * Progress bar fill\n */\nconst ProgressFill = styled.div<{ $progress: number; $uploading?: boolean }>`\n  height: 100%;\n  width: ${({ $progress }) => $progress}%;\n  background-color: ${({ theme }) => theme.colors.highlight};\n  border-radius: 2px;\n  transition: width 0.3s ease;\n  \n  ${({ $uploading }) => $uploading && css`\n    background: linear-gradient(\n      90deg,\n      var(--color-highlight, #0066cc) 0%,\n      var(--color-highlight-light, #3399ff) 50%,\n      var(--color-highlight, #0066cc) 100%\n    );\n    background-size: 200% 100%;\n    animation: ${progressAnimation} 1.5s linear infinite;\n  `}\n`;\n\n/**\n * Progress text\n */\nconst ProgressText = styled.span`\n  color: ${({ theme }) => theme.colors.text.secondary};\n  font-size: ${({ theme }) => theme.typography.fontSize.xs};\n  margin-top: 4px;\n`;\n\n/**\n * Clear/Remove icon button\n */\nconst ClearIcon = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n    <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n  </svg>\n);\n\n/**\n * Format bytes to human readable string\n */\nconst formatBytes = (bytes: number): string => {\n  if (bytes === 0) return '0 Bytes';\n  const k = 1024;\n  const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n};\n\n/**\n * Check if a file is an image\n */\nconst isImageFile = (file: File): boolean => {\n  return file.type.startsWith('image/');\n};\n\n/**\n * Check if a URL points to an image\n */\nconst isImageUrl = (url: string): boolean => {\n  if (url.includes('unsplash.com') || url.includes('images.unsplash.com')) {\n    return true;\n  }\n  if (url.startsWith('blob:')) {\n    return true;\n  }\n  if (url.startsWith('data:image/')) {\n    return true;\n  }\n  const urlWithoutQuery = url.split('?')[0]?.split('#')[0] || url;\n  return /\\.(jpg|jpeg|png|gif|webp|svg)$/i.test(urlWithoutQuery);\n};\n\n/**\n * DropZone component - A drag-and-drop file input area\n *\n * @example\n * ```tsx\n * const [files, setFiles] = useState<File[]>([]);\n *\n * <DropZone\n *   onFilesSelect={(files) => setFiles(files)}\n *   accept={['image/*', '.pdf']}\n *   multiple\n * />\n *\n * // With preview mode\n * <DropZone\n *   onFilesSelect={handleFiles}\n *   showPreview\n *   maxSize={5 * 1024 * 1024}\n *   onError={handleError}\n * />\n *\n * // With progress indicator\n * <DropZone\n *   onFilesSelect={handleFiles}\n *   showPreview\n *   progress={uploadProgress}\n *   uploading={isUploading}\n * />\n *\n * // With existing file\n * <DropZone\n *   onFilesSelect={handleFiles}\n *   showPreview\n *   existingFile={{ url: 'https://...', name: 'image.jpg' }}\n *   onClearExisting={() => setExistingFile(null)}\n * />\n * ```\n */\nexport const DropZone = forwardRef<HTMLDivElement, DropZoneProps>(\n  (\n    {\n      onFilesSelect,\n      accept,\n      multiple = false,\n      disabled = false,\n      variant = 'default',\n      size = 'md',\n      children,\n      showDefaultContent = true,\n      maxSizeHint,\n      className,\n      'aria-label': ariaLabel = 'Drop files here or click to browse',\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      maxSize,\n      onError,\n      text,\n      browseText,\n      showPreview = false,\n      changeButtonText,\n      onChangeClick,\n      value,\n      existingFile,\n      onClearExisting,\n      allowRemove = true,\n      error,\n      setError,\n      progress,\n      uploading,\n      onClear,\n      sizeHintText,\n    },\n    ref\n  ) => {\n    const [isDragOver, setIsDragOver] = useState(false);\n    const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n    const [previewUrls, setPreviewUrls] = useState<string[]>([]);\n    const inputRef = useRef<HTMLInputElement>(null);\n    const dragCounter = useRef(0);\n    const isDialogOpenRef = useRef(false);\n\n    const acceptString = accept?.join(',');\n\n    // Update selected files when value prop changes (controlled mode)\n    useEffect(() => {\n      if (value) {\n        setSelectedFiles(value);\n      }\n    }, [value]);\n\n    // Generate preview URLs for image files\n    useEffect(() => {\n      const urls: string[] = [];\n      selectedFiles.forEach(file => {\n        if (isImageFile(file)) {\n          urls.push(URL.createObjectURL(file));\n        } else {\n          urls.push('');\n        }\n      });\n      setPreviewUrls(urls);\n\n      return () => {\n        urls.forEach(url => {\n          if (url) URL.revokeObjectURL(url);\n        });\n      };\n    }, [selectedFiles]);\n\n    /**\n     * Validate files against maxSize constraint\n     */\n    const validateFiles = useCallback(\n      (files: FileList | File[]): boolean => {\n        if (maxSize) {\n          const fileArray = Array.isArray(files) ? files : Array.from(files);\n          for (const file of fileArray) {\n            if (file.size > maxSize) {\n              const maxSizeMB = (maxSize / (1024 * 1024)).toFixed(2);\n              const errorMessage = `File size exceeds maximum allowed size of ${maxSizeMB} MB`;\n              onError?.(errorMessage);\n              setError?.(errorMessage);\n              return false;\n            }\n          }\n        }\n        return true;\n      },\n      [maxSize, onError, setError]\n    );\n\n    /**\n     * Handle file selection\n     */\n    const handleFileSelect = useCallback(\n      (files: FileList | File[] | null) => {\n        if (!files || (Array.isArray(files) ? files.length === 0 : files.length === 0) || disabled) return;\n\n        const fileArray = Array.isArray(files) ? files : Array.from(files);\n\n        if (validateFiles(fileArray)) {\n          const filesToSelect = multiple ? fileArray : fileArray.slice(0, 1);\n\n          if (showPreview) {\n            setSelectedFiles(filesToSelect);\n          }\n\n          onFilesSelect(filesToSelect);\n        }\n      },\n      [disabled, multiple, onFilesSelect, validateFiles, showPreview]\n    );\n\n    const handleDragEnter = useCallback(\n      (e: React.DragEvent<HTMLDivElement>) => {\n        e.preventDefault();\n        e.stopPropagation();\n        if (disabled) return;\n        \n        dragCounter.current++;\n        if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\n          setIsDragOver(true);\n        }\n      },\n      [disabled]\n    );\n\n    const handleDragLeave = useCallback(\n      (e: React.DragEvent<HTMLDivElement>) => {\n        e.preventDefault();\n        e.stopPropagation();\n        if (disabled) return;\n        \n        dragCounter.current--;\n        if (dragCounter.current === 0) {\n          setIsDragOver(false);\n        }\n      },\n      [disabled]\n    );\n\n    const handleDragOver = useCallback(\n      (e: React.DragEvent<HTMLDivElement>) => {\n        e.preventDefault();\n        e.stopPropagation();\n      },\n      []\n    );\n\n    const handleDrop = useCallback(\n      (e: React.DragEvent<HTMLDivElement>) => {\n        e.preventDefault();\n        e.stopPropagation();\n        if (disabled) return;\n        \n        setIsDragOver(false);\n        dragCounter.current = 0;\n\n        const droppedFiles = e.dataTransfer.files;\n        if (droppedFiles && droppedFiles.length > 0) {\n          handleFileSelect(droppedFiles);\n        }\n      },\n      [disabled, handleFileSelect]\n    );\n\n    const handleClick = useCallback(() => {\n      if (disabled || isDialogOpenRef.current) return;\n      isDialogOpenRef.current = true;\n      inputRef.current?.click();\n    }, [disabled]);\n\n    const handleInputChange = useCallback(\n      (e: React.ChangeEvent<HTMLInputElement>) => {\n        isDialogOpenRef.current = false;\n        const selectedInputFiles = e.target.files;\n        if (selectedInputFiles && selectedInputFiles.length > 0) {\n          handleFileSelect(selectedInputFiles);\n        }\n        e.target.value = '';\n      },\n      [handleFileSelect]\n    );\n\n    const handleInputFocus = useCallback(() => {\n      isDialogOpenRef.current = true;\n    }, []);\n\n    const handleInputBlur = useCallback(() => {\n      setTimeout(() => {\n        if (isDialogOpenRef.current) {\n          isDialogOpenRef.current = false;\n        }\n      }, 100);\n    }, []);\n\n    const handleKeyDown = useCallback(\n      (e: React.KeyboardEvent<HTMLDivElement>) => {\n        if (disabled) return;\n        if (e.key === 'Enter' || e.key === ' ') {\n          e.preventDefault();\n          inputRef.current?.click();\n        }\n      },\n      [disabled]\n    );\n\n    const handleChangeClick = useCallback(() => {\n      if (onChangeClick) {\n        onChangeClick();\n      } else {\n        if (!disabled && inputRef.current && !isDialogOpenRef.current) {\n          isDialogOpenRef.current = true;\n          inputRef.current.click();\n        }\n      }\n    }, [onChangeClick, disabled]);\n\n    const handleClearAll = useCallback(() => {\n      setSelectedFiles([]);\n      setPreviewUrls([]);\n      \n      if (inputRef.current) {\n        inputRef.current.value = '';\n      }\n\n      onClear?.();\n      \n      // Notify parent with empty array\n      onFilesSelect([]);\n    }, [onFilesSelect, onClear]);\n\n    const handleClearExisting = useCallback(() => {\n      if (onClearExisting) {\n        onClearExisting();\n      }\n    }, [onClearExisting]);\n\n    // Display text\n    const displayText = text || `Drag & drop ${multiple ? 'files' : 'a file'} here, or`;\n    const browseDisplayText = browseText || 'browse';\n    const changeDisplayText = changeButtonText || 'Change';\n\n    // Get accessibility label\n    const getAccessibilityLabel = () => {\n      const textStr = typeof displayText === 'string' \n        ? displayText \n        : 'Drag and drop a file to upload or click';\n      const browseStr = typeof browseDisplayText === 'string' ? browseDisplayText : 'Browse';\n      return `File upload. ${textStr} ${browseStr}`;\n    };\n\n    // Check if we should show preview\n    const shouldShowPreview = showPreview && (selectedFiles.length > 0 || existingFile);\n\n    /**\n     * Render preview for existing file from URL\n     */\n    const renderExistingFilePreview = () => {\n      if (!existingFile) return null;\n\n      const isImage = isImageUrl(existingFile.url);\n\n      return (\n        <PreviewContainer key=\"existing-file\">\n          <PreviewImageContainer>\n            {isImage ? (\n              <PreviewImage\n                src={existingFile.url}\n                alt={existingFile.name || 'Existing file'}\n              />\n            ) : (\n              <PreviewPlaceholder>\n                No preview available\n              </PreviewPlaceholder>\n            )}\n          </PreviewImageContainer>\n\n          <PreviewInfo>\n            <FileInfoText>\n              {existingFile.name || 'Existing file'}\n              {existingFile.size ? ` (${formatBytes(existingFile.size)})` : ''}\n            </FileInfoText>\n            {allowRemove && (\n              <Button\n                icon={<ClearIcon />}\n                aria-label=\"Clear existing file\"\n                onClick={handleClearExisting}\n                disabled={disabled}\n                variant=\"ghost\"\n                size=\"sm\"\n              />\n            )}\n            <Button\n              variant=\"secondary\"\n              size=\"sm\"\n              onClick={handleChangeClick}\n              disabled={disabled}\n            >\n              {changeDisplayText}\n            </Button>\n          </PreviewInfo>\n\n          {/* Progress bar for existing file upload */}\n          {typeof progress === 'number' && (\n            <>\n              <ProgressBar $progress={progress}>\n                <ProgressFill $progress={progress} $uploading={uploading} />\n              </ProgressBar>\n              <ProgressText>{progress}% uploaded</ProgressText>\n            </>\n          )}\n        </PreviewContainer>\n      );\n    };\n\n    /**\n     * Render preview for a single uploaded file\n     */\n    const renderFilePreview = (file: File, index: number) => {\n      const previewUrl = previewUrls[index];\n\n      return (\n        <PreviewContainer key={`${file.name}-${index}`}>\n          <PreviewImageContainer>\n            {isImageFile(file) && previewUrl ? (\n              <PreviewImage src={previewUrl} alt={file.name} />\n            ) : (\n              <PreviewPlaceholder>\n                No preview available\n              </PreviewPlaceholder>\n            )}\n          </PreviewImageContainer>\n\n          <PreviewInfo>\n            <FileInfoText>\n              {file.name} ({formatBytes(file.size)})\n            </FileInfoText>\n            {allowRemove && (\n              <Button\n                icon={<ClearIcon />}\n                aria-label=\"Clear all\"\n                onClick={handleClearAll}\n                disabled={disabled || uploading}\n                variant=\"ghost\"\n                size=\"sm\"\n              />\n            )}\n            <Button\n              variant=\"secondary\"\n              size=\"sm\"\n              onClick={handleChangeClick}\n              disabled={disabled || uploading}\n            >\n              {changeDisplayText}\n            </Button>\n          </PreviewInfo>\n\n          {/* Progress bar */}\n          {typeof progress === 'number' && (\n            <>\n              <ProgressBar $progress={progress}>\n                <ProgressFill $progress={progress} $uploading={uploading} />\n              </ProgressBar>\n              <ProgressText>{progress}% uploaded</ProgressText>\n            </>\n          )}\n        </PreviewContainer>\n      );\n    };\n\n    // If showing preview and we have files or existing file, render preview mode\n    if (shouldShowPreview && !error) {\n      return (\n        <PreviewWrapper ref={ref} className={className} data-testid={dataTestId || testId} data-id={dataId}>\n          <HiddenInput\n            ref={inputRef}\n            type=\"file\"\n            accept={acceptString}\n            multiple={multiple}\n            disabled={disabled}\n            onChange={handleInputChange}\n            onFocus={handleInputFocus}\n            onBlur={handleInputBlur}\n            tabIndex={-1}\n            aria-hidden=\"true\"\n            data-testid={testId ? `${testId}-input` : undefined}\n            aria-label={getAccessibilityLabel()}\n            title={getAccessibilityLabel()}\n          />\n\n          {/* Show existing file if present and no new files selected */}\n          {existingFile && selectedFiles.length === 0 && renderExistingFilePreview()}\n\n          {/* Show newly selected files */}\n          {selectedFiles.map((file, index) => renderFilePreview(file, index))}\n        </PreviewWrapper>\n      );\n    }\n\n    // Default upload mode\n    return (\n      <Root>\n        <DropZoneContainer\n          ref={ref}\n          role=\"button\"\n          tabIndex={disabled ? -1 : 0}\n          aria-label={ariaLabel}\n          aria-disabled={disabled}\n          data-disabled={disabled}\n          data-testid={dataTestId || testId}\n          data-id={dataId}\n          className={className}\n          $isDragOver={isDragOver}\n          $disabled={disabled}\n          $variant={variant}\n          $size={size}\n          $error={!!error}\n          onClick={handleClick}\n          onKeyDown={handleKeyDown}\n          onDragEnter={handleDragEnter}\n          onDragLeave={handleDragLeave}\n          onDragOver={handleDragOver}\n          onDrop={handleDrop}\n        >\n          <HiddenInput\n            ref={inputRef}\n            type=\"file\"\n            accept={acceptString}\n            multiple={multiple}\n            disabled={disabled}\n            onChange={handleInputChange}\n            onFocus={handleInputFocus}\n            onBlur={handleInputBlur}\n            tabIndex={-1}\n            aria-hidden=\"true\"\n            data-testid={testId ? `${testId}-input` : undefined}\n          />\n          \n          {children ? (\n            children\n          ) : showDefaultContent ? (\n            <DefaultContent $size={size}>\n              <UploadIcon\n                $size={size}\n                $error={!!error}\n                viewBox=\"0 0 24 24\"\n                aria-hidden=\"true\"\n              >\n                <path d=\"M19.35 10.04A7.49 7.49 0 0012 4C9.11 4 6.6 5.64 5.35 8.04A5.994 5.994 0 000 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z\" />\n              </UploadIcon>\n              <DropText $error={!!error}>\n                {displayText}{' '}\n                <BrowseText $error={!!error}>{browseDisplayText}</BrowseText>\n              </DropText>\n              {(sizeHintText || maxSizeHint || maxSize || accept) && (\n                <>\n                  {accept && (\n                    <HintText>\n                      {`Formats: ${accept.join(', ')}`}\n                    </HintText>\n                  )}\n                  {accept && (sizeHintText || maxSizeHint || maxSize) && (\n                    <HintSpacer />\n                  )}\n                  {(sizeHintText || maxSizeHint || maxSize) && (\n                    <HintText>\n                      {sizeHintText || `Max size: ${formatBytes(maxSizeHint || maxSize || 0)}`}\n                    </HintText>\n                  )}\n                </>\n              )}\n            </DefaultContent>\n          ) : null}\n        </DropZoneContainer>\n        {error && (\n          <Message variant=\"error\" size=\"sm\" dataTestId={testId ? `${testId}-error` : undefined}>\n            {error}\n          </Message>\n        )}\n      </Root>\n    );\n  }\n);\n\nDropZone.displayName = 'DropZone';\n\nexport default DropZone;\n","import { forwardRef, useState } from 'react';\nimport styled from '@emotion/styled';\nimport { keyframes } from '@emotion/react';\n\nimport { Message } from '../Message';\nimport type { RiskCardProps } from './RiskCard.types';\nimport type { Theme } from '../../theme';\n\nconst slideIn = keyframes`\n  from {\n    opacity: 0;\n    transform: translateX(-8px);\n  }\n  to {\n    opacity: 1;\n    transform: translateX(0);\n  }\n`;\n\nconst RiskCardContainer = styled.div<{ $interactive: boolean }>`\n  padding: ${({ theme }) => (theme as Theme).spacing[4]};\n  background: ${({ theme }) => (theme as Theme).colors.background.default};\n  border-radius: ${({ theme }) => (theme as Theme).borders.radius.sm};\n  border: ${({ theme }) => (theme as Theme).borders.width.thin} solid ${({ theme }) => (theme as Theme).colors.border.light};\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n  animation: ${slideIn} 0.3s ease-out;\n  cursor: ${({ $interactive }) => ($interactive ? 'pointer' : 'default')};\n  \n  &:hover {\n    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);\n  }\n`;\n\nconst RiskHeader = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  gap: ${({ theme }) => (theme as Theme).spacing[3]};\n  margin-bottom: ${({ theme }) => (theme as Theme).spacing[3]};\n`;\n\nconst RiskTitleArea = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  flex: 1;\n  min-width: 0;\n`;\n\nconst RiskTitle = styled.h4`\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xs};\n  font-weight: ${({ theme }) => (theme as Theme).typography.fontWeight.semibold};\n  color: ${({ theme }) => (theme as Theme).colors.text.primary};\n  margin: 0;\n  line-height: 1.4;\n`;\n\nconst RiskIndex = styled.span`\n  font-size: 10px;\n  font-weight: ${({ theme }) => (theme as Theme).typography.fontWeight.medium};\n  color: ${({ theme }) => (theme as Theme).colors.text.muted};\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n`;\n\nconst RiskDescription = styled.p`\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xs};\n  color: ${({ theme }) => (theme as Theme).colors.text.secondary};\n  margin: 0 0 ${({ theme }) => (theme as Theme).spacing[3]};\n  line-height: 1.6;\n`;\n\nconst QuoteText = styled.p`\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xs};\n  color: ${({ theme }) => (theme as Theme).colors.text.secondary};\n  margin: 0 0 ${({ theme }) => (theme as Theme).spacing[3]};\n  line-height: 1.5;\n  font-style: italic;\n`;\n\nconst ExpandableSection = styled.div<{ $isExpanded: boolean }>`\n  overflow: hidden;\n  max-height: ${({ $isExpanded }) => ($isExpanded ? '500px' : '0')};\n  opacity: ${({ $isExpanded }) => ($isExpanded ? 1 : 0)};\n  transition: max-height 0.3s ease, opacity 0.2s ease, margin 0.2s ease;\n  margin-top: ${({ $isExpanded, theme }) => ($isExpanded ? (theme as Theme).spacing[3] : '0')};\n`;\n\nconst ExpandButton = styled.button`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  padding: 6px 0;\n  background: none;\n  border: none;\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xs};\n  font-weight: ${({ theme }) => (theme as Theme).typography.fontWeight.medium};\n  color: ${({ theme }) => (theme as Theme).colors.highlight};\n  cursor: pointer;\n  text-decoration: underline;\n  \n  &:hover {\n    text-decoration: underline;\n  }\n  \n  &:focus-visible {\n    outline: 2px solid ${({ theme }) => (theme as Theme).colors.highlight};\n    outline-offset: 2px;\n  }\n`;\n\nconst FooterContainer = styled.div`\n  margin-top: ${({ theme }) => (theme as Theme).spacing[3]};\n`;\n\n/**\n * RiskCard component - Displays an individual compliance risk\n *\n * Supports two usage patterns:\n * 1. Direct API data injection: Pass the `risk` prop with API response data\n * 2. Individual props: Pass title, description, etc. separately for custom mapping\n *\n * @example Direct API data injection\n * ```tsx\n * const apiResponse = { title: 'Rule Name', description: 'Issue found', recommendation: 'Fix it' };\n * <RiskCard risk={apiResponse} index={0} />\n * ```\n *\n * @example Individual props\n * ```tsx\n * <RiskCard\n *   title=\"Custom Title\"\n *   description=\"Custom description\"\n *   quote=\"The problematic sentence\"\n *   recommendation=\"How to fix\"\n *   index={0}\n * />\n * ```\n *\n * @example With custom labels\n * ```tsx\n * <RiskCard\n *   risk={data}\n *   indexLabelPrefix=\"Issue\"\n *   showRecommendationText=\"View suggestion\"\n *   hideRecommendationText=\"Hide suggestion\"\n * />\n * ```\n */\nexport const RiskCard = forwardRef<HTMLDivElement, RiskCardProps>(\n  (\n    {\n      // API data injection\n      risk,\n      // Individual props (override risk fields)\n      title,\n      description,\n      recommendation,\n      quote,\n      severity,\n      // Display configuration\n      index,\n      indexLabelPrefix = 'Detected Risk',\n      expandable = true,\n      defaultExpanded = false,\n      showRecommendationText = 'Show recommendation',\n      hideRecommendationText = 'Hide recommendation',\n      // Event handlers\n      onExpandChange,\n      onClick,\n      // Customization\n      className,\n      style,\n      headerContent,\n      footerContent,\n      // Testing\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\n    // Resolve props (individual props override risk fields)\n    const resolvedTitle = title ?? risk?.title ?? '';\n    const resolvedDescription = description ?? risk?.description ?? '';\n    const resolvedRecommendation = recommendation ?? risk?.recommendation;\n    const resolvedQuote = quote ?? risk?.sentence;\n    const resolvedSeverity = severity ?? risk?.severity;\n\n    const hasExpandableContent = expandable && Boolean(resolvedRecommendation);\n    const isInteractive = Boolean(onClick);\n\n    const handleExpandToggle = () => {\n      const newExpanded = !isExpanded;\n      setIsExpanded(newExpanded);\n      onExpandChange?.(newExpanded);\n    };\n\n    const handleClick = () => {\n      onClick?.();\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent) => {\n      if (isInteractive && (event.key === 'Enter' || event.key === ' ')) {\n        event.preventDefault();\n        onClick?.();\n      }\n    };\n\n    return (\n      <RiskCardContainer\n        ref={ref}\n        className={className}\n        style={style}\n        $interactive={isInteractive}\n        onClick={isInteractive ? handleClick : undefined}\n        onKeyDown={isInteractive ? handleKeyDown : undefined}\n        role={isInteractive ? 'button' : undefined}\n        tabIndex={isInteractive ? 0 : undefined}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n        data-severity={resolvedSeverity}\n      >\n        {headerContent ? (\n          headerContent\n        ) : (\n          <RiskHeader>\n            <RiskTitleArea>\n              {index !== undefined && (\n                <RiskIndex>{indexLabelPrefix} #{index + 1}</RiskIndex>\n              )}\n              <RiskTitle>{resolvedTitle}</RiskTitle>\n            </RiskTitleArea>\n          </RiskHeader>\n        )}\n\n        {resolvedDescription && (\n          <RiskDescription>\n            {resolvedDescription}\n          </RiskDescription>\n        )}\n\n        {resolvedQuote && (\n          <QuoteText>\n            &ldquo;{resolvedQuote}&rdquo;\n          </QuoteText>\n        )}\n\n        {hasExpandableContent && (\n          <>\n            <ExpandButton\n              onClick={(e) => {\n                e.stopPropagation();\n                handleExpandToggle();\n              }}\n              aria-expanded={isExpanded}\n              data-expanded={isExpanded}\n            >\n              {isExpanded ? hideRecommendationText : showRecommendationText}\n            </ExpandButton>\n\n            <ExpandableSection $isExpanded={isExpanded}>\n              <Message variant=\"info\" mode=\"banner\" size=\"xs\">\n                {resolvedRecommendation}\n              </Message>\n            </ExpandableSection>\n          </>\n        )}\n\n        {footerContent && (\n          <FooterContainer>\n            {footerContent}\n          </FooterContainer>\n        )}\n      </RiskCardContainer>\n    );\n  }\n);\n\nRiskCard.displayName = 'RiskCard';\n\nexport default RiskCard;\n","import { forwardRef, useId, memo, useState, useEffect } from 'react';\nimport styled from '@emotion/styled';\nimport { useTheme } from '@emotion/react';\n\nimport { Message } from '../Message';\n\nimport type { CheckboxProps, FontSizeValue } from './Checkbox.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Map theme font size token to actual value\n */\nconst getFontSizeValue = (fontSize: FontSizeValue | undefined, theme: Theme): string | undefined => {\n  if (!fontSize) {\n    return undefined;\n  }\n  \n  // Check if it's a theme token key\n  const themeTokens = ['xs', 'sm', 'base', 'md', 'lg', 'xl'] as const;\n  if (themeTokens.includes(fontSize as typeof themeTokens[number])) {\n    return theme.typography.fontSize[fontSize as keyof typeof theme.typography.fontSize];\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n/**\n * Container for the checkbox and label\n */\nconst CheckboxContainer = styled.div<{\n  $disabled?: boolean;\n  $labelPosition: 'left' | 'right';\n}>`\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n  min-height: 24px;\n  width: fit-content;\n  max-width: 100%;\n  outline: none;\n  border-radius: 4px;\n  position: relative;\n  padding: 1px 0;\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  flex-direction: ${({ $labelPosition }) =>\n    $labelPosition === 'left' ? 'row-reverse' : 'row'};\n`;\n\n/**\n * Hidden input for accessibility\n */\nconst HiddenCheckbox = styled.input`\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  white-space: nowrap;\n  width: 1px;\n`;\n\n/**\n * Styled checkbox box\n */\nconst StyledCheckbox = styled.span<{\n  theme?: Theme;\n  $checked: boolean;\n  $disabled: boolean;\n  $error: boolean;\n  $indeterminate: boolean;\n  $color?: string;\n}>`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 20px;\n  min-width: 20px;\n  height: 20px;\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  margin: 2px;\n  border-radius: 4px;\n  border: 1px solid\n    ${({ theme, $error, $checked, $indeterminate, $color }) =>\n      $error\n        ? theme.colors.semantic.red.base\n        : $checked || $indeterminate\n        ? $color || theme.colors.highlight\n        : theme.colors.grey[400]};\n  background: ${({ theme, $checked, $indeterminate, $error, $color }) =>\n    $checked || $indeterminate\n      ? $error\n        ? theme.colors.semantic.red.base\n        : $color || theme.colors.highlight\n      : 'transparent'};\n  transition: border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;\n  flex-shrink: 0;\n  position: relative;\n\n  /* Hover effect */\n  ${({ $disabled, theme }) =>\n    !$disabled &&\n    `\n    &:hover {\n      box-shadow: 0 0 0 2px ${theme.colors.transparent.black20};\n    }\n  `}\n\n  /* Disabled styling */\n  ${({ $disabled, theme }) =>\n    $disabled &&\n    `\n    border-color: ${theme.colors.grey[300]};\n    opacity: 0.6;\n    background: ${theme.colors.grey[100]};\n  `}\n`;\n\n/**\n * Checkmark icon (visible when checked)\n */\nconst CheckIcon = styled.span<{\n  theme?: Theme;\n  $visible: boolean;\n}>`\n  opacity: ${({ $visible }) => ($visible ? 1 : 0)};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%;\n  transition: opacity 0.2s ease-in-out;\n  \n  &::before {\n    content: '';\n    display: block;\n    width: 5px;\n    height: 9px;\n    border: solid ${({ theme }) => theme.colors.highlightText};\n    border-width: 0 2px 2px 0;\n    transform: rotate(45deg) translateY(-1px);\n  }\n`;\n\n/**\n * Indeterminate icon (horizontal line when indeterminate)\n */\nconst IndeterminateIcon = styled.span<{\n  theme?: Theme;\n  $visible: boolean;\n}>`\n  opacity: ${({ $visible }) => ($visible ? 1 : 0)};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%;\n  transition: opacity 0.2s ease-in-out;\n  \n  &::before {\n    content: '';\n    display: block;\n    width: 10px;\n    height: 2px;\n    background: ${({ theme }) => theme.colors.highlightText};\n    border-radius: 1px;\n  }\n`;\n\n/**\n * Label text for the checkbox\n */\nconst CheckboxLabel = styled.label<{\n  theme?: Theme;\n  $disabled?: boolean;\n  $labelPosition: 'left' | 'right';\n  $fontSize?: string;\n}>`\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $fontSize }) => $fontSize || theme.typography.fontSize.sm};\n  line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n  color: ${({ theme, $disabled }) =>\n    $disabled ? theme.colors.grey[400] : theme.colors.grey[700]};\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  display: inline-block;\n  min-height: 24px;\n  line-height: 24px;\n  user-select: none;\n  \n  /* Allow text wrapping */\n  white-space: normal;\n  word-wrap: break-word;\n  overflow-wrap: break-word;\n`;\n\n/**\n * Wrapper for the entire checkbox component\n */\nconst CheckboxWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\n/**\n * Container for messages\n */\nconst MessageContainer = styled.div`\n  margin-left: 30px;\n  margin-top: 2px;\n`;\n\n/**\n * Checkbox - A single checkbox component\n *\n * Used for selecting multiple options from a set or toggling a single option.\n * Usually used within a CheckboxGroup, but can also be used standalone.\n *\n * @example\n * ```tsx\n * // Controlled\n * <Checkbox\n *   label=\"Accept terms and conditions\"\n *   checked={accepted}\n *   onChange={(e, checked) => setAccepted(checked)}\n * />\n *\n * // With indeterminate state\n * <Checkbox\n *   label=\"Select all\"\n *   checked={allSelected}\n *   indeterminate={someSelected && !allSelected}\n *   onChange={handleSelectAll}\n * />\n * ```\n */\nconst CheckboxComponent = forwardRef<HTMLDivElement, CheckboxProps>(\n  (\n    {\n      label,\n      labelPosition = 'right',\n      checked = false,\n      disabled = false,\n      error = false,\n      color,\n      indeterminate = false,\n      name,\n      id: providedId,\n      'aria-label': ariaLabel,\n      onChange,\n      tabIndex,\n      errorMessage,\n      assistiveMessage,\n      className,\n      'data-testid': testId,\n      labelFontSize,\n    },\n    ref\n  ) => {\n    const generatedId = useId();\n    const checkboxId = providedId || generatedId;\n    const labelId = `${checkboxId}-label`;\n    const hasVisibleLabel = Boolean(label);\n    const theme = useTheme() as Theme;\n    \n    // Resolve font size\n    const resolvedLabelFontSize = getFontSizeValue(labelFontSize, theme);\n\n    // Internal state for controlled/uncontrolled behavior\n    const [isChecked, setIsChecked] = useState(!!checked);\n\n    // Sync with controlled prop\n    useEffect(() => {\n      setIsChecked(!!checked);\n    }, [checked]);\n\n    const actualTabIndex = tabIndex !== undefined ? tabIndex : disabled ? -1 : 0;\n\n    const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (disabled) return;\n\n      event.preventDefault();\n      event.stopPropagation();\n      \n      const newChecked = !isChecked;\n      setIsChecked(newChecked);\n      onChange?.(event, newChecked);\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n      if (disabled) return;\n\n      if (event.key === ' ' || event.key === 'Enter') {\n        event.preventDefault();\n        event.stopPropagation();\n        \n        const newChecked = !isChecked;\n        setIsChecked(newChecked);\n        onChange?.(event, newChecked);\n      }\n    };\n\n    return (\n      <CheckboxWrapper className={className} data-testid={testId}>\n        <CheckboxContainer\n          ref={ref}\n          role=\"checkbox\"\n          aria-checked={indeterminate ? 'mixed' : isChecked}\n          aria-disabled={disabled}\n          aria-labelledby={hasVisibleLabel ? labelId : undefined}\n          aria-label={!hasVisibleLabel ? ariaLabel || 'Checkbox' : undefined}\n          tabIndex={actualTabIndex}\n          onClick={handleClick}\n          onKeyDown={handleKeyDown}\n          $disabled={disabled}\n          $labelPosition={labelPosition}\n          data-testid={testId && `${testId}-container`}\n        >\n          <HiddenCheckbox\n            type=\"checkbox\"\n            id={checkboxId}\n            name={name}\n            checked={isChecked}\n            disabled={disabled}\n            readOnly\n            tabIndex={-1}\n            aria-hidden=\"true\"\n          />\n          <StyledCheckbox\n            $checked={isChecked}\n            $disabled={disabled}\n            $error={error}\n            $indeterminate={indeterminate}\n            $color={color}\n            data-testid={testId && `${testId}-box`}\n          >\n            {indeterminate ? (\n              <IndeterminateIcon $visible={true} />\n            ) : (\n              <CheckIcon $visible={isChecked} />\n            )}\n          </StyledCheckbox>\n          {label && (\n            <CheckboxLabel\n              id={labelId}\n              htmlFor={checkboxId}\n              $disabled={disabled}\n              $labelPosition={labelPosition}\n              $fontSize={resolvedLabelFontSize}\n            >\n              {label}\n            </CheckboxLabel>\n          )}\n        </CheckboxContainer>\n        {errorMessage && error && (\n          <MessageContainer>\n            <Message variant=\"error\">{errorMessage}</Message>\n          </MessageContainer>\n        )}\n        {assistiveMessage && !errorMessage && (\n          <MessageContainer>\n            <Message variant=\"assistive\">{assistiveMessage}</Message>\n          </MessageContainer>\n        )}\n      </CheckboxWrapper>\n    );\n  }\n);\n\nCheckboxComponent.displayName = 'Checkbox';\n\nexport const Checkbox = memo(CheckboxComponent);\n\nexport default Checkbox;\n","import { useState, useEffect, useCallback, useId, memo } from 'react';\nimport styled from '@emotion/styled';\nimport { useTheme } from '@emotion/react';\n\nimport { Checkbox } from './Checkbox';\nimport { Message } from '../Message';\n\nimport type { CheckboxGroupProps, CheckboxGroupOption, CheckedStateMap, FontSizeValue } from './Checkbox.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Map theme font size token to actual value\n */\nconst getFontSizeValue = (fontSize: FontSizeValue | undefined, theme: Theme): string | undefined => {\n  if (!fontSize) {\n    return undefined;\n  }\n  \n  // Check if it's a theme token key\n  const themeTokens = ['xs', 'sm', 'base', 'md', 'lg', 'xl'] as const;\n  if (themeTokens.includes(fontSize as typeof themeTokens[number])) {\n    return theme.typography.fontSize[fontSize as keyof typeof theme.typography.fontSize];\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n/**\n * Fieldset wrapper for the checkbox group\n */\nconst Fieldset = styled.fieldset`\n  border: none;\n  padding: 0;\n  margin: 0;\n`;\n\n/**\n * Legend for the checkbox group\n */\nconst Legend = styled.legend<{ theme?: Theme; $fontSize?: string }>`\n  padding: 0;\n  margin-bottom: 8px;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $fontSize }) => $fontSize || theme.typography.fontSize.sm};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n  color: ${({ theme }) => theme.colors.grey[700]};\n`;\n\n/**\n * Required asterisk indicator\n */\nconst RequiredIndicator = styled.span<{ theme?: Theme }>`\n  color: ${({ theme }) => theme.colors.highlight};\n  margin-left: 2px;\n`;\n\n/**\n * Container for the checkbox options\n */\nconst GroupContainer = styled.div<{\n  $orientation: 'horizontal' | 'vertical';\n  $isChild?: boolean;\n}>`\n  display: flex;\n  gap: 8px;\n  flex-direction: ${({ $orientation }) =>\n    $orientation === 'horizontal' ? 'row' : 'column'};\n  flex-wrap: ${({ $orientation }) =>\n    $orientation === 'horizontal' ? 'wrap' : 'nowrap'};\n  ${({ $isChild }) => $isChild && 'margin-left: 26px;'}\n`;\n\n/**\n * Container for messages\n */\nconst MessageContainer = styled.div`\n  margin-top: 8px;\n`;\n\n/**\n * Initialize checked state from options\n */\nfunction initializeCheckedState(options: CheckboxGroupOption[], defaultValue?: CheckedStateMap): CheckedStateMap {\n  const state: CheckedStateMap = { ...defaultValue };\n  \n  const processOptions = (opts: CheckboxGroupOption[]) => {\n    for (const option of opts) {\n      if (state[option.id] === undefined) {\n        state[option.id] = false;\n      }\n      if (option.children) {\n        processOptions(option.children);\n      }\n    }\n  };\n  \n  processOptions(options);\n  return state;\n}\n\n/**\n * CheckboxGroup - A component for managing a group of checkboxes\n *\n * Handles multi-selection state and supports hierarchical checkbox structures\n * with parent-child relationships. Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Controlled\n * <CheckboxGroup\n *   name=\"toppings\"\n *   value={selectedToppings}\n *   onChange={(state) => setSelectedToppings(state)}\n *   options={[\n *     { id: 'cheese', label: 'Cheese' },\n *     { id: 'pepperoni', label: 'Pepperoni' },\n *     { id: 'mushrooms', label: 'Mushrooms' },\n *   ]}\n *   legend=\"Select Toppings\"\n * />\n *\n * // With hierarchical options\n * <CheckboxGroup\n *   options={[\n *     { \n *       id: 'all', \n *       label: 'Select All',\n *       children: [\n *         { id: 'option1', label: 'Option 1' },\n *         { id: 'option2', label: 'Option 2' },\n *       ]\n *     },\n *   ]}\n *   orientation=\"vertical\"\n * />\n * ```\n */\nconst CheckboxGroupComponent = ({\n  name,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  options,\n  disabled = false,\n  error = false,\n  orientation = 'vertical',\n  legend,\n  'aria-label': ariaLabel,\n  required = false,\n  errorMessage,\n  assistiveMessage,\n  className,\n  'data-testid': testId,\n  labelFontSize,\n  optionsFontSize,\n}: CheckboxGroupProps) => {\n  const generatedId = useId();\n  const groupId = name ? `checkboxgroup-${name}` : `checkboxgroup-${generatedId}`;\n  const theme = useTheme() as Theme;\n  \n  // Resolve font sizes\n  const resolvedLabelFontSize = getFontSizeValue(labelFontSize, theme);\n  const resolvedOptionsFontSize = getFontSizeValue(optionsFontSize, theme);\n\n  // Determine if controlled or uncontrolled\n  const isControlled = controlledValue !== undefined;\n  const [internalValue, setInternalValue] = useState<CheckedStateMap>(() =>\n    initializeCheckedState(options, defaultValue)\n  );\n  const checkedState = isControlled ? controlledValue : internalValue;\n\n  // Sync internal state with controlled value\n  useEffect(() => {\n    if (isControlled) {\n      setInternalValue(controlledValue);\n    }\n  }, [isControlled, controlledValue]);\n\n  // Reinitialize when options change\n  useEffect(() => {\n    if (!isControlled) {\n      setInternalValue(prev => initializeCheckedState(options, prev));\n    }\n  }, [options, isControlled]);\n\n  const handleCheckboxChange = useCallback(\n    (optionId: string, isChecked: boolean, childrenIds?: string[]) => {\n      const newState = { ...checkedState, [optionId]: isChecked };\n      \n      // If this option has children, update them all\n      if (childrenIds) {\n        for (const childId of childrenIds) {\n          newState[childId] = isChecked;\n        }\n      }\n      \n      if (!isControlled) {\n        setInternalValue(newState);\n      }\n      onChange?.(newState);\n    },\n    [checkedState, isControlled, onChange]\n  );\n\n  // Get all children IDs for a given option\n  const getAllChildrenIds = useCallback((option: CheckboxGroupOption): string[] => {\n    const ids: string[] = [];\n    if (option.children) {\n      for (const child of option.children) {\n        ids.push(child.id);\n        ids.push(...getAllChildrenIds(child));\n      }\n    }\n    return ids;\n  }, []);\n\n  const renderCheckboxOptions = (\n    items: CheckboxGroupOption[],\n    _isChild = false\n  ) => {\n    return items.map((option) => {\n      const childrenIds = getAllChildrenIds(option);\n      \n      return (\n        <div key={option.id}>\n          <Checkbox\n            name={option.id}\n            label={option.label}\n            checked={checkedState[option.id] || false}\n            disabled={option.disabled || disabled}\n            error={option.error || error}\n            onChange={(_, checked) => handleCheckboxChange(option.id, checked, childrenIds.length > 0 ? childrenIds : undefined)}\n            data-testid={testId && `${testId}-option-${option.id}`}\n            labelFontSize={resolvedOptionsFontSize}\n          />\n          {option.children && option.children.length > 0 && (\n            <GroupContainer $orientation=\"vertical\" $isChild>\n              {renderCheckboxOptions(option.children, true)}\n            </GroupContainer>\n          )}\n        </div>\n      );\n    });\n  };\n\n  return (\n    <Fieldset className={className} data-testid={testId}>\n      {legend && (\n        <Legend $fontSize={resolvedLabelFontSize}>\n          {legend}\n          {required && <RequiredIndicator>*</RequiredIndicator>}\n        </Legend>\n      )}\n      <GroupContainer\n        role=\"group\"\n        aria-labelledby={legend ? groupId : undefined}\n        aria-label={!legend ? ariaLabel : undefined}\n        $orientation={orientation}\n        data-testid={testId && `${testId}-group`}\n      >\n        {renderCheckboxOptions(options)}\n      </GroupContainer>\n      {errorMessage && error && (\n        <MessageContainer>\n          <Message variant=\"error\">{errorMessage}</Message>\n        </MessageContainer>\n      )}\n      {assistiveMessage && !errorMessage && (\n        <MessageContainer>\n          <Message variant=\"assistive\">{assistiveMessage}</Message>\n        </MessageContainer>\n      )}\n    </Fieldset>\n  );\n};\n\nCheckboxGroupComponent.displayName = 'CheckboxGroup';\n\nexport const CheckboxGroup = memo(CheckboxGroupComponent);\n\nexport default CheckboxGroup;\n","import { forwardRef, useId, memo } from 'react';\nimport styled from '@emotion/styled';\nimport { useTheme } from '@emotion/react';\n\nimport { Message } from '../Message';\n\nimport type { RadioProps, FontSizeValue } from './Radio.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Map theme font size token to actual value\n */\nconst getFontSizeValue = (fontSize: FontSizeValue | undefined, theme: Theme): string | undefined => {\n  if (!fontSize) {\n    return undefined;\n  }\n  \n  // Check if it's a theme token key\n  const themeTokens = ['xs', 'sm', 'base', 'md', 'lg', 'xl'] as const;\n  if (themeTokens.includes(fontSize as typeof themeTokens[number])) {\n    return theme.typography.fontSize[fontSize as keyof typeof theme.typography.fontSize];\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n/**\n * Container for the radio button and label\n */\nconst RadioContainer = styled.div<{\n  $disabled?: boolean;\n  $labelPosition: 'left' | 'right';\n}>`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  min-height: 24px;\n  width: fit-content;\n  max-width: 100%;\n  outline: none;\n  border-radius: 4px;\n  position: relative;\n  padding: 2px 0;\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  flex-direction: ${({ $labelPosition }) =>\n    $labelPosition === 'left' ? 'row-reverse' : 'row'};\n`;\n\n/**\n * Hidden input for accessibility\n */\nconst HiddenRadio = styled.input`\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  white-space: nowrap;\n  width: 1px;\n`;\n\n/**\n * Outer ring of the radio button\n */\nconst OuterRing = styled.span<{\n  theme?: Theme;\n  $checked: boolean;\n  $disabled: boolean;\n  $error: boolean;\n  $color?: string;\n}>`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 20px;\n  min-width: 20px;\n  height: 20px;\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  margin: 2px;\n  border-radius: 50%;\n  border: 1px solid\n    ${({ theme, $error, $checked, $color }) =>\n      $error\n        ? theme.colors.semantic.red.base\n        : $checked\n        ? $color || theme.colors.highlight\n        : theme.colors.grey[400]};\n  background: transparent;\n  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n  flex-shrink: 0;\n  position: relative;\n\n  /* Hover effect */\n  ${({ $disabled, theme }) =>\n    !$disabled &&\n    `\n    &:hover {\n      box-shadow: 0 0 0 2px ${theme.colors.transparent.black20};\n    }\n  `}\n\n  /* Disabled styling */\n  ${({ $disabled, theme }) =>\n    $disabled &&\n    `\n    border-color: ${theme.colors.grey[300]};\n    opacity: 0.6;\n  `}\n`;\n\n/**\n * Inner dot of the radio button (visible when checked)\n */\nconst InnerDot = styled.span<{\n  theme?: Theme;\n  $checked: boolean;\n  $disabled: boolean;\n  $error: boolean;\n  $color?: string;\n}>`\n  opacity: ${({ $checked }) => ($checked ? 1 : 0)};\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n  background: ${({ theme, $error, $disabled, $color }) =>\n    $error\n      ? theme.colors.semantic.red.base\n      : $disabled\n      ? theme.colors.grey[400]\n      : $color || theme.colors.highlight};\n  transition: opacity 0.2s ease-in-out;\n`;\n\n/**\n * Label text for the radio\n */\nconst RadioLabel = styled.label<{\n  theme?: Theme;\n  $disabled?: boolean;\n  $labelPosition: 'left' | 'right';\n  $fontSize?: string;\n}>`\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $fontSize }) => $fontSize || theme.typography.fontSize.sm};\n  line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n  color: ${({ theme, $disabled }) =>\n    $disabled ? theme.colors.grey[400] : theme.colors.grey[700]};\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  display: inline-block;\n  min-height: 24px;\n  line-height: 24px;\n  user-select: none;\n`;\n\n/**\n * Wrapper for the entire radio component\n */\nconst RadioWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\n/**\n * Container for messages\n */\nconst MessageContainer = styled.div`\n  margin-left: 30px;\n  margin-top: 2px;\n`;\n\n/**\n * Radio - A single radio button component\n *\n * Used for selecting one option from a group. Usually used within a RadioGroup,\n * but can also be used standalone for simple boolean choices.\n *\n * @example\n * ```tsx\n * <Radio\n *   value=\"option1\"\n *   label=\"Option 1\"\n *   checked={selected === 'option1'}\n *   onChange={(e, checked) => setSelected('option1')}\n * />\n * ```\n */\nconst RadioComponent = forwardRef<HTMLDivElement, RadioProps>(\n  (\n    {\n      value,\n      label,\n      labelPosition = 'right',\n      checked = false,\n      disabled = false,\n      error = false,\n      color,\n      name,\n      id: providedId,\n      'aria-label': ariaLabel,\n      onChange,\n      tabIndex,\n      errorMessage,\n      assistiveMessage,\n      className,\n      'data-testid': testId,\n      labelFontSize,\n    },\n    ref\n  ) => {\n    const generatedId = useId();\n    const radioId = providedId || generatedId;\n    const labelId = `${radioId}-label`;\n    const hasVisibleLabel = Boolean(label);\n    const theme = useTheme() as Theme;\n    \n    // Resolve font size - if it's already a resolved string (from RadioGroup), use it directly\n    const resolvedFontSize = typeof labelFontSize === 'string' && !['xs', 'sm', 'base', 'md', 'lg', 'xl'].includes(labelFontSize)\n      ? labelFontSize\n      : getFontSizeValue(labelFontSize, theme);\n\n    const actualTabIndex = tabIndex !== undefined ? tabIndex : disabled ? -1 : 0;\n\n    const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (disabled) return;\n\n      event.preventDefault();\n      event.stopPropagation();\n      onChange?.(event, !checked);\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n      if (disabled) return;\n\n      if (event.key === ' ' || event.key === 'Enter') {\n        event.preventDefault();\n        event.stopPropagation();\n        onChange?.(event, !checked);\n      }\n    };\n\n    return (\n      <RadioWrapper className={className} data-testid={testId}>\n        <RadioContainer\n          ref={ref}\n          role=\"radio\"\n          aria-checked={checked}\n          aria-disabled={disabled}\n          aria-labelledby={hasVisibleLabel ? labelId : undefined}\n          aria-label={!hasVisibleLabel ? ariaLabel || 'Radio option' : undefined}\n          tabIndex={actualTabIndex}\n          onClick={handleClick}\n          onKeyDown={handleKeyDown}\n          $disabled={disabled}\n          $labelPosition={labelPosition}\n          data-testid={testId && `${testId}-container`}\n        >\n          <HiddenRadio\n            type=\"radio\"\n            id={radioId}\n            name={name}\n            value={String(value)}\n            checked={checked}\n            disabled={disabled}\n            readOnly\n            tabIndex={-1}\n            aria-hidden=\"true\"\n          />\n          <OuterRing\n            $checked={checked}\n            $disabled={disabled}\n            $error={error}\n            $color={color}\n            data-testid={testId && `${testId}-ring`}\n          >\n            <InnerDot\n              $checked={checked}\n              $disabled={disabled}\n              $error={error}\n              $color={color}\n            />\n          </OuterRing>\n          {label && (\n            <RadioLabel\n              id={labelId}\n              htmlFor={radioId}\n              $disabled={disabled}\n              $labelPosition={labelPosition}\n              $fontSize={resolvedFontSize}\n            >\n              {label}\n            </RadioLabel>\n          )}\n        </RadioContainer>\n        {errorMessage && error && (\n          <MessageContainer>\n            <Message variant=\"error\">{errorMessage}</Message>\n          </MessageContainer>\n        )}\n        {assistiveMessage && !errorMessage && (\n          <MessageContainer>\n            <Message variant=\"assistive\">{assistiveMessage}</Message>\n          </MessageContainer>\n        )}\n      </RadioWrapper>\n    );\n  }\n);\n\nRadioComponent.displayName = 'Radio';\n\nexport const Radio = memo(RadioComponent);\n\nexport default Radio;\n","import { useState, useEffect, useCallback, useRef, useId, memo } from 'react';\nimport styled from '@emotion/styled';\nimport { useTheme } from '@emotion/react';\n\nimport { Radio } from './Radio';\nimport { Message } from '../Message';\n\nimport type { RadioGroupProps, RadioGroupOption, FontSizeValue } from './Radio.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Map theme font size token to actual value\n */\nconst getFontSizeValue = (fontSize: FontSizeValue | undefined, theme: Theme): string | undefined => {\n  if (!fontSize) {\n    return undefined;\n  }\n  \n  // Check if it's a theme token key\n  const themeTokens = ['xs', 'sm', 'base', 'md', 'lg', 'xl'] as const;\n  if (themeTokens.includes(fontSize as typeof themeTokens[number])) {\n    return theme.typography.fontSize[fontSize as keyof typeof theme.typography.fontSize];\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n/**\n * Fieldset wrapper for the radio group\n */\nconst Fieldset = styled.fieldset`\n  border: none;\n  padding: 0;\n  margin: 0;\n`;\n\n/**\n * Legend for the radio group\n */\nconst Legend = styled.legend<{ theme?: Theme; $fontSize?: string }>`\n  padding: 0;\n  margin-bottom: 8px;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $fontSize }) => $fontSize || theme.typography.fontSize.sm};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n  color: ${({ theme }) => theme.colors.grey[700]};\n`;\n\n/**\n * Required asterisk indicator\n */\nconst RequiredIndicator = styled.span<{ theme?: Theme }>`\n  color: ${({ theme }) => theme.colors.highlight};\n  margin-left: 2px;\n`;\n\n/**\n * Container for the radio options\n */\nconst GroupContainer = styled.div<{\n  $orientation: 'horizontal' | 'vertical';\n}>`\n  display: flex;\n  gap: 8px;\n  flex-direction: ${({ $orientation }) =>\n    $orientation === 'horizontal' ? 'row' : 'column'};\n  flex-wrap: ${({ $orientation }) =>\n    $orientation === 'horizontal' ? 'wrap' : 'nowrap'};\n`;\n\n/**\n * Container for messages\n */\nconst MessageContainer = styled.div`\n  margin-top: 8px;\n`;\n\n/**\n * RadioGroup - A component for managing a group of radio buttons\n *\n * Handles selection state, keyboard navigation, and accessibility for a set of radio options.\n * Supports both controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * // Controlled\n * <RadioGroup\n *   name=\"size\"\n *   value={selectedSize}\n *   onChange={(value) => setSelectedSize(value)}\n *   options={[\n *     { id: 'sm', value: 'small', label: 'Small' },\n *     { id: 'md', value: 'medium', label: 'Medium' },\n *     { id: 'lg', value: 'large', label: 'Large' },\n *   ]}\n *   legend=\"Select Size\"\n * />\n *\n * // Uncontrolled\n * <RadioGroup\n *   name=\"color\"\n *   defaultValue=\"red\"\n *   options={[\n *     { id: 'red', value: 'red', label: 'Red' },\n *     { id: 'blue', value: 'blue', label: 'Blue' },\n *   ]}\n * />\n * ```\n */\nconst RadioGroupComponent = ({\n  name,\n  value: controlledValue,\n  defaultValue,\n  onChange,\n  options,\n  disabled = false,\n  error = false,\n  orientation = 'vertical',\n  legend,\n  'aria-label': ariaLabel,\n  required = false,\n  errorMessage,\n  assistiveMessage,\n  className,\n  'data-testid': testId,\n  labelFontSize,\n  optionsFontSize,\n}: RadioGroupProps) => {\n  const generatedId = useId();\n  const groupId = name ? `radiogroup-${name}` : `radiogroup-${generatedId}`;\n  const theme = useTheme() as Theme;\n  \n  // Resolve font sizes\n  const resolvedLabelFontSize = getFontSizeValue(labelFontSize, theme);\n  const resolvedOptionsFontSize = getFontSizeValue(optionsFontSize, theme);\n\n  // Determine if controlled or uncontrolled\n  const isControlled = controlledValue !== undefined;\n  const [internalValue, setInternalValue] = useState(defaultValue);\n  const selectedValue = isControlled ? controlledValue : internalValue;\n\n  // Refs for each radio option\n  const radioRefs = useRef<Map<string | number | boolean, HTMLDivElement>>(\n    new Map()\n  );\n\n  // Sync internal state with controlled value\n  useEffect(() => {\n    if (isControlled) {\n      setInternalValue(controlledValue);\n    }\n  }, [isControlled, controlledValue]);\n\n  const handleRadioChange = useCallback(\n    (\n      optionValue: string | number | boolean,\n      event: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>\n    ) => {\n      if (!isControlled) {\n        setInternalValue(optionValue);\n      }\n      onChange?.(optionValue, event);\n    },\n    [isControlled, onChange]\n  );\n\n  const handleKeyDown = useCallback(\n    (event: React.KeyboardEvent<HTMLDivElement>) => {\n      const { key } = event;\n\n      // Determine navigation keys based on orientation\n      const isVertical = orientation === 'vertical';\n      const nextKey = isVertical ? 'ArrowDown' : 'ArrowRight';\n      const prevKey = isVertical ? 'ArrowUp' : 'ArrowLeft';\n      const altNextKey = isVertical ? 'ArrowRight' : 'ArrowDown';\n      const altPrevKey = isVertical ? 'ArrowLeft' : 'ArrowUp';\n\n      if (\n        key === nextKey ||\n        key === prevKey ||\n        key === altNextKey ||\n        key === altPrevKey\n      ) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        // Get only enabled options\n        const enabledOptions = options.filter(\n          (option) => !option.disabled && !disabled\n        );\n\n        if (enabledOptions.length === 0) return;\n\n        // Find current index\n        const currentIndex = enabledOptions.findIndex(\n          (option) => option.value === selectedValue\n        );\n\n        let nextIndex: number;\n\n        if (key === nextKey || key === altNextKey) {\n          // Move to next option (wrap around)\n          nextIndex =\n            currentIndex === -1 ? 0 : (currentIndex + 1) % enabledOptions.length;\n        } else {\n          // Move to previous option (wrap around)\n          nextIndex =\n            currentIndex === -1\n              ? enabledOptions.length - 1\n              : (currentIndex - 1 + enabledOptions.length) % enabledOptions.length;\n        }\n\n        const nextOption = enabledOptions[nextIndex];\n\n        if (!nextOption) return;\n\n        // Update selection\n        handleRadioChange(\n          nextOption.value,\n          event as React.KeyboardEvent<HTMLDivElement>\n        );\n\n        // Move focus to the next radio\n        setTimeout(() => {\n          const radioRef = radioRefs.current.get(nextOption.value);\n          radioRef?.focus();\n        }, 0);\n      }\n    },\n    [orientation, options, selectedValue, handleRadioChange, disabled]\n  );\n\n  const renderRadioOptions = (items: RadioGroupOption[]) => {\n    // Determine which radio should be in tab order\n    const selectedIndex = items.findIndex(\n      (option) => option.value === selectedValue\n    );\n    const firstEnabledIndex = items.findIndex(\n      (option) => !option.disabled && !disabled\n    );\n\n    // If nothing is selected, first enabled radio is in tab order\n    const focusableIndex =\n      selectedIndex !== -1 ? selectedIndex : firstEnabledIndex;\n\n    return items.map((option, index) => {\n      const isInTabOrder = index === focusableIndex;\n\n      return (\n        <Radio\n          key={option.id}\n          ref={(el) => {\n            if (el) {\n              radioRefs.current.set(option.value, el);\n            } else {\n              radioRefs.current.delete(option.value);\n            }\n          }}\n          value={option.value}\n          label={option.label}\n          checked={option.value === selectedValue}\n          disabled={option.disabled || disabled}\n          error={option.error || error}\n          name={groupId}\n          tabIndex={isInTabOrder ? 0 : -1}\n          onChange={(event) => handleRadioChange(option.value, event)}\n          data-testid={testId && `${testId}-option-${option.id}`}\n          labelFontSize={resolvedOptionsFontSize}\n        />\n      );\n    });\n  };\n\n  return (\n    <Fieldset className={className} data-testid={testId}>\n      {legend && (\n        <Legend $fontSize={resolvedLabelFontSize}>\n          {legend}\n          {required && <RequiredIndicator>*</RequiredIndicator>}\n        </Legend>\n      )}\n      <GroupContainer\n        role=\"radiogroup\"\n        aria-labelledby={legend ? groupId : undefined}\n        aria-label={!legend ? ariaLabel : undefined}\n        $orientation={orientation}\n        onKeyDown={handleKeyDown}\n        data-testid={testId && `${testId}-group`}\n      >\n        {renderRadioOptions(options)}\n      </GroupContainer>\n      {errorMessage && error && (\n        <MessageContainer>\n          <Message variant=\"error\">{errorMessage}</Message>\n        </MessageContainer>\n      )}\n      {assistiveMessage && !errorMessage && (\n        <MessageContainer>\n          <Message variant=\"assistive\">{assistiveMessage}</Message>\n        </MessageContainer>\n      )}\n    </Fieldset>\n  );\n};\n\nRadioGroupComponent.displayName = 'RadioGroup';\n\nexport const RadioGroup = memo(RadioGroupComponent);\n\nexport default RadioGroup;\n","import styled from '@emotion/styled';\nimport { forwardRef, useCallback } from 'react';\n\nimport { Checkbox } from '../Checkbox';\nimport { Message } from '../Message';\nimport { Radio } from '../Radio';\nimport { Stack } from '../Stack';\nimport { Tooltip } from '../Tooltip';\nimport { theme } from '../../theme';\n\nimport type { RiskItemCardProps } from './RiskItemCard.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Card container with selection, error, and disabled states\n */\nconst CardContainer = styled.div<{\n  theme?: Theme;\n  $isSelected: boolean;\n  $hasError: boolean;\n  $isDisabled: boolean;\n  $accentColor?: string;\n}>`\n  display: flex;\n  align-items: center;\n  gap: ${theme.spacing[3]};\n  padding: ${theme.spacing[3]};\n  background-color: ${({ $isSelected, $isDisabled, $accentColor, theme: t }) =>\n    $isDisabled\n      ? t.colors.background.default\n      : $isSelected\n        ? `color-mix(in srgb, ${$accentColor || t.colors.highlight} 8%, white)`\n        : t.colors.white};\n  border: 1px solid\n    ${({ $isSelected, $hasError, $isDisabled, $accentColor, theme: t }) =>\n      $hasError\n        ? t.colors.status.error\n        : $isDisabled\n          ? t.colors.border.light\n          : $isSelected\n            ? $accentColor || t.colors.highlight\n            : t.colors.border.light};\n  border-radius: 8px;\n  cursor: ${({ $isDisabled, $hasError }) =>\n    $isDisabled || $hasError ? 'not-allowed' : 'pointer'};\n  transition: ${theme.transitions.fast};\n  opacity: ${({ $isDisabled }) => ($isDisabled ? 0.6 : 1)};\n\n  &:hover {\n    background-color: ${({ $isSelected, $isDisabled, $accentColor, theme: t }) =>\n      $isDisabled\n        ? t.colors.background.default\n        : $isSelected\n          ? `color-mix(in srgb, ${$accentColor || t.colors.highlight} 8%, white)`\n          : t.colors.background.default};\n    border-color: ${({\n      $hasError,\n      $isSelected,\n      $isDisabled,\n      $accentColor,\n      theme: t,\n    }) =>\n      $hasError\n        ? t.colors.status.error\n        : $isDisabled\n          ? t.colors.border.light\n          : $isSelected\n            ? $accentColor || t.colors.highlight\n            : t.colors.border.medium};\n  }\n\n  &:focus-visible {\n    outline: 2px solid ${({ $accentColor, theme: t }) => $accentColor || t.colors.highlight};\n    outline-offset: 2px;\n  }\n`;\n\n/**\n * Icon container with customizable background and foreground colors\n */\nconst IconContainer = styled.div<{\n  $bgColor: string;\n  $fgColor: string;\n}>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 40px;\n  height: 40px;\n  border-radius: 8px;\n  background-color: ${({ $bgColor }) => $bgColor};\n  color: ${({ $fgColor }) => $fgColor};\n  font-size: 10px;\n  font-weight: ${theme.typography.fontWeight.bold};\n  letter-spacing: 0.5px;\n  flex-shrink: 0;\n`;\n\n/**\n * Title text with truncation\n */\nconst Title = styled.span`\n  font-size: ${theme.typography.fontSize.xs};\n  font-weight: ${theme.typography.fontWeight.medium};\n  color: ${theme.colors.text.primary};\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  line-height: 1.3;\n`;\n\n/**\n * Subtitle wrapper for secondary information\n * Also overrides font-size on any Chip components inside\n */\nconst SubtitleWrapper = styled.div`\n  font-size: ${theme.typography.fontSize.tn};\n  color: ${theme.colors.text.muted};\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  \n  /* Override Chip's internal font-size to use tn */\n  > div > div,\n  div[class*=\"Chip\"] {\n    font-size: ${theme.typography.fontSize.tn};\n  }\n`;\n\n/**\n * Wrapper that applies tn font size to Chip components passed as badge\n */\nconst BadgeWrapper = styled.span`\n  display: inline-flex;\n  \n  /* Override Chip's internal font-size to use tn */\n  > div {\n    font-size: ${theme.typography.fontSize.tn};\n  }\n`;\n\n/**\n * Remove button with danger hover state\n */\nconst RemoveButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 24px;\n  height: 24px;\n  padding: 0;\n  background: none;\n  border: none;\n  cursor: pointer;\n  color: ${theme.colors.text.muted};\n  border-radius: 4px;\n  flex-shrink: 0;\n  transition: ${theme.transitions.fast};\n\n  &:hover {\n    color: ${theme.colors.status.error};\n    background-color: color-mix(\n      in srgb,\n      ${theme.colors.status.error} 10%,\n      ${theme.colors.white}\n    );\n  }\n\n  &:focus-visible {\n    outline: 2px solid ${theme.colors.highlight};\n    outline-offset: 1px;\n  }\n\n  svg {\n    display: block;\n  }\n`;\n\n/**\n * Close icon for remove button\n */\nconst CloseIcon = () => (\n  <svg\n    width=\"14\"\n    height=\"14\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n  >\n    <path d=\"M4 4L12 12M12 4L4 12\" />\n  </svg>\n);\n\n/**\n * RiskItemCard - A selectable card for file/page items in Risk Reviews\n *\n * A versatile card component that supports:\n * - Selected, error, and disabled states\n * - Single (radio) or multi (checkbox) selection modes\n * - Custom icon with background/foreground colors\n * - Title and subtitle with text truncation\n * - Optional badge (Chip with tn font size applied automatically)\n * - Remove button\n * - Custom accent color for selection highlighting\n *\n * Used for displaying files in the review queue and pages for URL capture.\n *\n * @example\n * ```tsx\n * // File card with badge\n * <RiskItemCard\n *   icon={{ content: 'PDF', bgColor: '#FFEBEE', fgColor: '#C62828' }}\n *   title=\"document.pdf\"\n *   badge={<Chip size=\"small\" label=\"1.2 MB\" />}\n *   selected={selectedIndex === 0}\n *   onClick={() => setSelectedIndex(0)}\n *   onRemove={() => removeFile(0)}\n * />\n *\n * // Page card with multi selection\n * <RiskItemCard\n *   icon={{ content: <FavIcon src={url} />, bgColor: 'transparent' }}\n *   title=\"Page Title\"\n *   subtitle=\"https://example.com/page\"\n *   selectionMode=\"multi\"\n *   selected={selectedIds.has(id)}\n *   disabled={isMaxSelected && !selectedIds.has(id)}\n *   onClick={() => toggleSelection(id)}\n * />\n * ```\n */\nexport const RiskItemCard = forwardRef<HTMLDivElement, RiskItemCardProps>(\n  (\n    {\n      selected = false,\n      error = false,\n      disabled = false,\n      icon,\n      title,\n      subtitle,\n      badge,\n      errorMessage,\n      onRemove,\n      onClick,\n      selectionMode = 'single',\n      showSelectionControl = true,\n      name,\n      value,\n      accentColor,\n      className,\n      style,\n      dataTestId,\n      ariaLabel,\n    },\n    ref\n  ) => {\n    const hasError = error || !!errorMessage;\n    const isMultiMode = selectionMode === 'multi';\n    const isInteractionDisabled = hasError || disabled;\n\n    const handleClick = useCallback(\n      (e: React.MouseEvent) => {\n        e.stopPropagation();\n        if (isInteractionDisabled) return;\n        onClick?.();\n      },\n      [isInteractionDisabled, onClick]\n    );\n\n    const handleRemove = useCallback(\n      (e: React.MouseEvent) => {\n        e.stopPropagation();\n        onRemove?.();\n      },\n      [onRemove]\n    );\n\n    const handleKeyDown = useCallback(\n      (e: React.KeyboardEvent) => {\n        if (e.key === 'Enter' || e.key === ' ') {\n          e.preventDefault();\n          if (isInteractionDisabled) return;\n          onClick?.();\n        }\n      },\n      [isInteractionDisabled, onClick]\n    );\n\n    const renderSelectionControl = () => {\n      if (!showSelectionControl) return null;\n\n      if (isMultiMode) {\n        return (\n          <Checkbox\n            checked={selected && !hasError}\n            disabled={isInteractionDisabled}\n            color={accentColor}\n            aria-label={ariaLabel || `Select ${title}`}\n            tabIndex={-1}\n            onChange={() => {\n              if (!isInteractionDisabled) {\n                onClick?.();\n              }\n            }}\n          />\n        );\n      }\n\n      return (\n        <Radio\n          name={name}\n          value={value ?? title}\n          checked={selected && !hasError}\n          disabled={hasError}\n          color={accentColor}\n          aria-label={ariaLabel || `Select ${title}`}\n        />\n      );\n    };\n\n    const renderIcon = () => {\n      if (!icon) return null;\n\n      return (\n        <IconContainer\n          $bgColor={icon.bgColor || theme.colors.grey[100]}\n          $fgColor={icon.fgColor || theme.colors.grey[600]}\n          aria-hidden=\"true\"\n        >\n          {icon.content}\n        </IconContainer>\n      );\n    };\n\n    const renderSubtitle = () => {\n      if (errorMessage) {\n        return (\n          <Message variant=\"error\" showIcon={false} size=\"sm\">\n            {errorMessage}\n          </Message>\n        );\n      }\n\n      if (!subtitle && !badge) return null;\n\n      return (\n        <SubtitleWrapper>\n          <Stack direction=\"horizontal\" gap={2} align=\"center\">\n            {badge && <BadgeWrapper>{badge}</BadgeWrapper>}\n            {subtitle}\n          </Stack>\n        </SubtitleWrapper>\n      );\n    };\n\n    return (\n      <CardContainer\n        ref={ref}\n        className={className}\n        style={style}\n        $isSelected={selected}\n        $hasError={hasError}\n        $isDisabled={disabled}\n        $accentColor={accentColor}\n        onClick={handleClick}\n        onKeyDown={handleKeyDown}\n        tabIndex={0}\n        role=\"option\"\n        aria-selected={selected}\n        aria-disabled={isInteractionDisabled}\n        data-testid={dataTestId}\n      >\n        {renderSelectionControl()}\n\n        {renderIcon()}\n\n        <Stack gap={1} style={{ flex: 1, minWidth: 0 }}>\n          <Tooltip content={title} onlyWhenOverflow position=\"top\">\n            <Title>{title}</Title>\n          </Tooltip>\n          {renderSubtitle()}\n        </Stack>\n\n        {onRemove && (\n          <Tooltip content=\"Remove\" position=\"top\">\n            <RemoveButton\n              onClick={handleRemove}\n              aria-label={`Remove ${title}`}\n              type=\"button\"\n            >\n              <CloseIcon />\n            </RemoveButton>\n          </Tooltip>\n        )}\n      </CardContainer>\n    );\n  }\n);\n\nRiskItemCard.displayName = 'RiskItemCard';\n\nexport default RiskItemCard;\n","import styled from '@emotion/styled';\nimport { forwardRef, useCallback, useMemo, useState, useEffect, useRef } from 'react';\n\nimport type { PaginatorProps, PaginatorSize, PageSizeOption } from './Paginator.types';\n\n// Default page size options\nconst defaultPageSizeOptions: PageSizeOption[] = [\n  { value: 10, label: '10' },\n  { value: 25, label: '25' },\n  { value: 50, label: '50' },\n  { value: 100, label: '100' },\n];\n\n/**\n * Container for the paginator\n */\nconst PaginatorContainer = styled.div<{ $disabled: boolean; $inverse: boolean }>`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  justify-content: center;\n  gap: ${({ theme }) => theme.spacing[2]};\n  opacity: ${({ $disabled }) => ($disabled ? 0.5 : 1)};\n  pointer-events: ${({ $disabled }) => ($disabled ? 'none' : 'auto')};\n  color: ${({ $inverse, theme }) => ($inverse ? theme.colors.white : theme.colors.text.primary)};\n`;\n\n/**\n * Base button styles for paginator controls\n */\nconst PaginatorButton = styled.button<{\n  $size: PaginatorSize;\n  $active?: boolean;\n  $inverse?: boolean;\n}>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid ${({ $inverse, theme }) =>\n    $inverse ? 'rgba(255, 255, 255, 0.3)' : theme.colors.border.medium};\n  background-color: ${({ $active, $inverse, theme }) => {\n    if ($active) return theme.colors.highlight;\n    if ($inverse) return 'transparent';\n    return theme.colors.background.default;\n  }};\n  color: ${({ $active, $inverse, theme }) => {\n    if ($active) return theme.colors.white;\n    if ($inverse) return theme.colors.white;\n    return theme.colors.text.primary;\n  }};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n  cursor: pointer;\n  transition: ${({ theme }) => theme.transitions.fast};\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n\n  /* Size variants */\n  ${({ $size, theme }) => {\n    switch ($size) {\n      case 'sm':\n        return `\n          min-width: 28px;\n          height: 28px;\n          padding: 4px 8px;\n          font-size: ${theme.typography.fontSize.xs};\n        `;\n      case 'lg':\n        return `\n          min-width: 40px;\n          height: 40px;\n          padding: 8px 12px;\n          font-size: ${theme.typography.fontSize.md};\n        `;\n      default:\n        return `\n          min-width: 32px;\n          height: 32px;\n          padding: 6px 10px;\n          font-size: ${theme.typography.fontSize.sm};\n        `;\n    }\n  }}\n\n  &:not(:disabled):hover {\n    background-color: ${({ $active, $inverse, theme }) => {\n      if ($active) return theme.colors.highlight;\n      if ($inverse) return 'rgba(255, 255, 255, 0.1)';\n      return theme.colors.background.hover;\n    }};\n    opacity: ${({ $active }) => ($active ? 0.9 : 1)};\n  }\n\n  &:not(:disabled):active {\n    transform: scale(0.98);\n  }\n\n  &:disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n    pointer-events: none;\n  }\n\n  &:focus {\n    outline: none;\n  }\n\n  &:focus-visible {\n    outline: 2px solid ${({ theme }) => theme.colors.highlight};\n    outline-offset: 2px;\n  }\n`;\n\n/**\n * Icon button for navigation (first, prev, next, last)\n */\nconst NavButton = styled(PaginatorButton)`\n  /* Icon styles */\n  i,\n  .material-icons {\n    font-family: ${({ theme }) => theme.typography.fontFamilyIcons};\n    font-size: ${({ $size }) => {\n      switch ($size) {\n        case 'sm':\n          return '18px';\n        case 'lg':\n          return '26px';\n        default:\n          return '22px';\n      }\n    }};\n  }\n\n  svg {\n    width: ${({ $size }) => {\n      switch ($size) {\n        case 'sm':\n          return '16px';\n        case 'lg':\n          return '24px';\n        default:\n          return '20px';\n      }\n    }};\n    height: ${({ $size }) => {\n      switch ($size) {\n        case 'sm':\n          return '16px';\n        case 'lg':\n          return '24px';\n        default:\n          return '20px';\n      }\n    }};\n  }\n`;\n\n/**\n * Page number button\n */\nconst PageButton = styled(PaginatorButton)`\n  /* Page number specific styles */\n`;\n\n/**\n * Ellipsis indicator\n */\nconst Ellipsis = styled.span<{ $size: PaginatorSize }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: ${({ theme }) => theme.colors.text.muted};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  min-width: ${({ $size }) => {\n    switch ($size) {\n      case 'sm':\n        return '20px';\n      case 'lg':\n        return '32px';\n      default:\n        return '24px';\n    }\n  }};\n  font-size: ${({ $size, theme }) => {\n    switch ($size) {\n      case 'sm':\n        return theme.typography.fontSize.xs;\n      case 'lg':\n        return theme.typography.fontSize.md;\n      default:\n        return theme.typography.fontSize.sm;\n    }\n  }};\n`;\n\n/**\n * Page info container (for simple mode)\n */\nconst PageInfoContainer = styled.div<{ $size: PaginatorSize; $inverse: boolean }>`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing[2]};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  color: ${({ $inverse, theme }) => ($inverse ? theme.colors.white : theme.colors.text.primary)};\n  font-size: ${({ $size, theme }) => {\n    switch ($size) {\n      case 'sm':\n        return theme.typography.fontSize.xs;\n      case 'lg':\n        return theme.typography.fontSize.md;\n      default:\n        return theme.typography.fontSize.sm;\n    }\n  }};\n`;\n\n/**\n * Go to page input field\n */\nconst GoToPageInput = styled.input<{ $size: PaginatorSize; $inverse: boolean }>`\n  border: 1px solid ${({ $inverse, theme }) =>\n    $inverse ? 'rgba(255, 255, 255, 0.3)' : theme.colors.border.medium};\n  background-color: ${({ $inverse, theme }) =>\n    $inverse ? 'rgba(255, 255, 255, 0.1)' : theme.colors.background.default};\n  color: ${({ $inverse, theme }) =>\n    $inverse ? theme.colors.white : theme.colors.text.primary};\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  text-align: center;\n  outline: none;\n  \n  ${({ $size, theme }) => {\n    switch ($size) {\n      case 'sm':\n        return `\n          width: 40px;\n          height: 28px;\n          font-size: ${theme.typography.fontSize.xs};\n        `;\n      case 'lg':\n        return `\n          width: 56px;\n          height: 40px;\n          font-size: ${theme.typography.fontSize.md};\n        `;\n      default:\n        return `\n          width: 48px;\n          height: 32px;\n          font-size: ${theme.typography.fontSize.sm};\n        `;\n    }\n  }}\n  \n  &:focus {\n    border-color: ${({ theme }) => theme.colors.text.primary};\n  }\n  \n  &::placeholder {\n    color: ${({ theme }) => theme.colors.text.muted};\n  }\n  \n  /* Remove number spinners */\n  &::-webkit-inner-spin-button,\n  &::-webkit-outer-spin-button {\n    -webkit-appearance: none;\n    margin: 0;\n  }\n  \n  -moz-appearance: textfield;\n`;\n\n/**\n * Page size selector container\n */\nconst PageSizeContainer = styled.div<{ $size: PaginatorSize }>`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing[2]};\n  margin-left: ${({ theme }) => theme.spacing[4]};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ $size, theme }) => {\n    switch ($size) {\n      case 'sm':\n        return theme.typography.fontSize.xs;\n      case 'lg':\n        return theme.typography.fontSize.md;\n      default:\n        return theme.typography.fontSize.sm;\n    }\n  }};\n`;\n\n/**\n * Page size select\n */\nconst PageSizeSelect = styled.select<{ $size: PaginatorSize; $inverse: boolean }>`\n  border: 1px solid ${({ $inverse, theme }) =>\n    $inverse ? 'rgba(255, 255, 255, 0.3)' : theme.colors.border.medium};\n  background-color: ${({ $inverse, theme }) =>\n    $inverse ? 'rgba(255, 255, 255, 0.1)' : theme.colors.background.default};\n  color: ${({ $inverse, theme }) =>\n    $inverse ? theme.colors.white : theme.colors.text.primary};\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  cursor: pointer;\n  outline: none;\n  \n  ${({ $size, theme }) => {\n    switch ($size) {\n      case 'sm':\n        return `\n          height: 28px;\n          padding: 4px 8px;\n          font-size: ${theme.typography.fontSize.xs};\n        `;\n      case 'lg':\n        return `\n          height: 40px;\n          padding: 8px 12px;\n          font-size: ${theme.typography.fontSize.md};\n        `;\n      default:\n        return `\n          height: 32px;\n          padding: 6px 10px;\n          font-size: ${theme.typography.fontSize.sm};\n        `;\n    }\n  }}\n  \n  &:focus {\n    border-color: ${({ theme }) => theme.colors.text.primary};\n  }\n`;\n\n// Arrow icons as SVG components\nconst ArrowLeftIcon = () => (\n  <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n    <path d=\"M15 18l-6-6 6-6\" />\n  </svg>\n);\n\nconst ArrowRightIcon = () => (\n  <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n    <path d=\"M9 18l6-6-6-6\" />\n  </svg>\n);\n\nconst DoubleArrowLeftIcon = () => (\n  <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n    <path d=\"M11 17l-5-5 5-5\" />\n    <path d=\"M18 17l-5-5 5-5\" />\n  </svg>\n);\n\nconst DoubleArrowRightIcon = () => (\n  <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n    <path d=\"M13 17l5-5-5-5\" />\n    <path d=\"M6 17l5-5-5-5\" />\n  </svg>\n);\n\n/**\n * Calculate visible page numbers with ellipsis\n */\nfunction getVisiblePages(\n  currentPage: number,\n  totalPages: number,\n  maxVisible: number\n): (number | 'ellipsis')[] {\n  if (totalPages <= maxVisible) {\n    return Array.from({ length: totalPages }, (_, i) => i + 1);\n  }\n\n  const pages: (number | 'ellipsis')[] = [];\n  const sidePages = Math.floor((maxVisible - 3) / 2);\n\n  // Always show first page\n  pages.push(1);\n\n  // Calculate start and end of middle section\n  let startPage = Math.max(2, currentPage - sidePages);\n  let endPage = Math.min(totalPages - 1, currentPage + sidePages);\n\n  // Adjust if we're near the beginning\n  if (currentPage <= sidePages + 2) {\n    endPage = Math.min(totalPages - 1, maxVisible - 2);\n    startPage = 2;\n  }\n\n  // Adjust if we're near the end\n  if (currentPage >= totalPages - sidePages - 1) {\n    startPage = Math.max(2, totalPages - maxVisible + 3);\n    endPage = totalPages - 1;\n  }\n\n  // Add ellipsis before middle section if needed\n  if (startPage > 2) {\n    pages.push('ellipsis');\n  }\n\n  // Add middle pages\n  for (let i = startPage; i <= endPage; i++) {\n    pages.push(i);\n  }\n\n  // Add ellipsis after middle section if needed\n  if (endPage < totalPages - 1) {\n    pages.push('ellipsis');\n  }\n\n  // Always show last page\n  if (totalPages > 1) {\n    pages.push(totalPages);\n  }\n\n  return pages;\n}\n\n/**\n * Paginator component - Navigation control for paginated content\n * Supports go-to-page input and page size selector\n *\n * @example\n * ```tsx\n * <Paginator\n *   currentPage={1}\n *   totalPages={10}\n *   onPageChange={(page) => setPage(page)}\n * />\n *\n * // Simple mode with go-to-page (ib-ui style)\n * <Paginator\n *   currentPage={5}\n *   totalPages={20}\n *   onPageChange={handlePageChange}\n *   simple\n *   showGoToPage\n * />\n *\n * // With page size selector\n * <Paginator\n *   currentPage={1}\n *   totalPages={10}\n *   onPageChange={handlePageChange}\n *   showPageSizeSelector\n *   pageSize={25}\n *   onPageSizeChange={handlePageSizeChange}\n * />\n * ```\n */\nexport const Paginator = forwardRef<HTMLDivElement, PaginatorProps>(\n  (\n    {\n      currentPage,\n      totalPages,\n      onPageChange,\n      showFirstLast = false,\n      showPrevNext = true,\n      maxVisiblePages = 5,\n      disabled = false,\n      size = 'md',\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      firstLabel,\n      lastLabel,\n      prevLabel,\n      nextLabel,\n      showGoToPage = false,\n      goToPageDebounce = 300,\n      showPageInfo,\n      pageInfoFormat = (total) => `of ${total.toLocaleString()}`,\n      loading = false,\n      showPageSizeSelector = false,\n      pageSize,\n      onPageSizeChange,\n      pageSizeOptions = defaultPageSizeOptions,\n      simple = false,\n      inverse = false,\n      goToPageLabel = 'Go to page',\n      pageSizeLabel = 'Items per page',\n      ...rest\n    },\n    ref\n  ) => {\n    // Ensure valid page bounds\n    const safeTotalPages = Math.max(1, totalPages);\n    const safeCurrentPage = Math.min(Math.max(1, currentPage), safeTotalPages);\n\n    const isFirstPage = safeCurrentPage === 1;\n    const isLastPage = safeCurrentPage === safeTotalPages;\n    const isDisabled = disabled || loading;\n\n    // Internal state for go-to-page input\n    const [goToPageValue, setGoToPageValue] = useState<string>(safeCurrentPage.toString());\n    const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n    // Sync go-to-page value with current page\n    useEffect(() => {\n      setGoToPageValue(safeCurrentPage.toString());\n    }, [safeCurrentPage]);\n\n    // Cleanup debounce on unmount\n    useEffect(() => {\n      return () => {\n        if (debounceRef.current) {\n          clearTimeout(debounceRef.current);\n        }\n      };\n    }, []);\n\n    const visiblePages = useMemo(\n      () => getVisiblePages(safeCurrentPage, safeTotalPages, maxVisiblePages),\n      [safeCurrentPage, safeTotalPages, maxVisiblePages]\n    );\n\n    const handlePageChange = useCallback(\n      (page: number) => {\n        if (page >= 1 && page <= safeTotalPages && page !== safeCurrentPage && !isDisabled) {\n          onPageChange(page);\n        }\n      },\n      [onPageChange, safeTotalPages, safeCurrentPage, isDisabled]\n    );\n\n    const handleKeyDown = useCallback(\n      (event: React.KeyboardEvent, page: number) => {\n        if (event.key === 'Enter' || event.key === ' ') {\n          event.preventDefault();\n          handlePageChange(page);\n        }\n      },\n      [handlePageChange]\n    );\n\n    // Handle go-to-page input change with debounce\n    const handleGoToPageChange = useCallback(\n      (event: React.ChangeEvent<HTMLInputElement>) => {\n        const value = event.target.value;\n        \n        // Only allow digits\n        const numericValue = value.replace(/[^\\d]/g, '');\n        setGoToPageValue(numericValue);\n\n        // Debounce the page change\n        if (debounceRef.current) {\n          clearTimeout(debounceRef.current);\n        }\n\n        debounceRef.current = setTimeout(() => {\n          let page = parseInt(numericValue, 10);\n          if (!isNaN(page)) {\n            // Clamp to valid range\n            page = Math.max(1, Math.min(page, safeTotalPages));\n            setGoToPageValue(page.toString());\n            if (page !== safeCurrentPage) {\n              onPageChange(page);\n            }\n          } else if (numericValue === '') {\n            setGoToPageValue(safeCurrentPage.toString());\n          }\n        }, goToPageDebounce);\n      },\n      [safeTotalPages, safeCurrentPage, onPageChange, goToPageDebounce]\n    );\n\n    // Handle go-to-page blur (normalize value)\n    const handleGoToPageBlur = useCallback(() => {\n      let page = parseInt(goToPageValue, 10);\n      if (isNaN(page) || goToPageValue === '') {\n        setGoToPageValue(safeCurrentPage.toString());\n      } else {\n        page = Math.max(1, Math.min(page, safeTotalPages));\n        setGoToPageValue(page.toString());\n      }\n    }, [goToPageValue, safeCurrentPage, safeTotalPages]);\n\n    // Handle page size change\n    const handlePageSizeChange = useCallback(\n      (event: React.ChangeEvent<HTMLSelectElement>) => {\n        const newSize = parseInt(event.target.value, 10);\n        onPageSizeChange?.(newSize);\n      },\n      [onPageSizeChange]\n    );\n\n    // Determine if we should show page info\n    const shouldShowPageInfo = showPageInfo !== undefined ? showPageInfo : showGoToPage;\n\n    // Don't render if only one page and not showing controls\n    if (safeTotalPages <= 1 && !showPageSizeSelector) {\n      return null;\n    }\n\n    // Simple mode - just prev/next with page input\n    if (simple) {\n      return (\n        <PaginatorContainer\n          ref={ref}\n          className={className}\n          $disabled={isDisabled}\n          $inverse={inverse}\n          role=\"navigation\"\n          aria-label=\"Pagination\"\n          data-testid={dataTestId || testId}\n          data-id={dataId}\n          {...rest}\n        >\n          <NavButton\n            type=\"button\"\n            $size={size}\n            $inverse={inverse}\n            disabled={isDisabled || isFirstPage}\n            onClick={() => handlePageChange(safeCurrentPage - 1)}\n            aria-label={prevLabel || 'Previous page'}\n          >\n            <ArrowLeftIcon />\n          </NavButton>\n\n          <PageInfoContainer $size={size} $inverse={inverse}>\n            {showGoToPage ? (\n              <GoToPageInput\n                type=\"text\"\n                inputMode=\"numeric\"\n                pattern=\"[0-9]*\"\n                $size={size}\n                $inverse={inverse}\n                value={goToPageValue}\n                onChange={handleGoToPageChange}\n                onBlur={handleGoToPageBlur}\n                disabled={isDisabled}\n                aria-label={goToPageLabel}\n                min={1}\n                max={safeTotalPages}\n              />\n            ) : (\n              <span>{safeCurrentPage}</span>\n            )}\n            {shouldShowPageInfo && (\n              <span>{pageInfoFormat(safeTotalPages)}</span>\n            )}\n          </PageInfoContainer>\n\n          <NavButton\n            type=\"button\"\n            $size={size}\n            $inverse={inverse}\n            disabled={isDisabled || isLastPage}\n            onClick={() => handlePageChange(safeCurrentPage + 1)}\n            aria-label={nextLabel || 'Next page'}\n          >\n            <ArrowRightIcon />\n          </NavButton>\n        </PaginatorContainer>\n      );\n    }\n\n    // Full mode with page numbers\n    return (\n      <PaginatorContainer\n        ref={ref}\n        className={className}\n        $disabled={isDisabled}\n        $inverse={inverse}\n        role=\"navigation\"\n        aria-label=\"Pagination\"\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n        {...rest}\n      >\n        {/* First Page Button */}\n        {showFirstLast && (\n          <NavButton\n            type=\"button\"\n            $size={size}\n            $inverse={inverse}\n            disabled={isDisabled || isFirstPage}\n            onClick={() => handlePageChange(1)}\n            onKeyDown={(e) => handleKeyDown(e, 1)}\n            aria-label={firstLabel || 'Go to first page'}\n            aria-disabled={isFirstPage}\n          >\n            {firstLabel || <DoubleArrowLeftIcon />}\n          </NavButton>\n        )}\n\n        {/* Previous Page Button */}\n        {showPrevNext && (\n          <NavButton\n            type=\"button\"\n            $size={size}\n            $inverse={inverse}\n            disabled={isDisabled || isFirstPage}\n            onClick={() => handlePageChange(safeCurrentPage - 1)}\n            onKeyDown={(e) => handleKeyDown(e, safeCurrentPage - 1)}\n            aria-label={prevLabel || 'Go to previous page'}\n            aria-disabled={isFirstPage}\n          >\n            {prevLabel || <ArrowLeftIcon />}\n          </NavButton>\n        )}\n\n        {/* Page Numbers */}\n        {visiblePages.map((page, index) =>\n          page === 'ellipsis' ? (\n            <Ellipsis key={`ellipsis-${index}`} $size={size} aria-hidden=\"true\">\n              …\n            </Ellipsis>\n          ) : (\n            <PageButton\n              key={page}\n              type=\"button\"\n              $size={size}\n              $active={page === safeCurrentPage}\n              $inverse={inverse}\n              disabled={isDisabled}\n              onClick={() => handlePageChange(page)}\n              onKeyDown={(e) => handleKeyDown(e, page)}\n              aria-label={`Page ${page}`}\n              aria-current={page === safeCurrentPage ? 'page' : undefined}\n            >\n              {page}\n            </PageButton>\n          )\n        )}\n\n        {/* Next Page Button */}\n        {showPrevNext && (\n          <NavButton\n            type=\"button\"\n            $size={size}\n            $inverse={inverse}\n            disabled={isDisabled || isLastPage}\n            onClick={() => handlePageChange(safeCurrentPage + 1)}\n            onKeyDown={(e) => handleKeyDown(e, safeCurrentPage + 1)}\n            aria-label={nextLabel || 'Go to next page'}\n            aria-disabled={isLastPage}\n          >\n            {nextLabel || <ArrowRightIcon />}\n          </NavButton>\n        )}\n\n        {/* Last Page Button */}\n        {showFirstLast && (\n          <NavButton\n            type=\"button\"\n            $size={size}\n            $inverse={inverse}\n            disabled={isDisabled || isLastPage}\n            onClick={() => handlePageChange(safeTotalPages)}\n            onKeyDown={(e) => handleKeyDown(e, safeTotalPages)}\n            aria-label={lastLabel || 'Go to last page'}\n            aria-disabled={isLastPage}\n          >\n            {lastLabel || <DoubleArrowRightIcon />}\n          </NavButton>\n        )}\n\n        {/* Go to page input (in full mode) */}\n        {showGoToPage && (\n          <PageInfoContainer $size={size} $inverse={inverse}>\n            <span>Go to</span>\n            <GoToPageInput\n              type=\"text\"\n              inputMode=\"numeric\"\n              pattern=\"[0-9]*\"\n              $size={size}\n              $inverse={inverse}\n              value={goToPageValue}\n              onChange={handleGoToPageChange}\n              onBlur={handleGoToPageBlur}\n              disabled={isDisabled}\n              aria-label={goToPageLabel}\n              min={1}\n              max={safeTotalPages}\n            />\n            {shouldShowPageInfo && (\n              <span>{pageInfoFormat(safeTotalPages)}</span>\n            )}\n          </PageInfoContainer>\n        )}\n\n        {/* Page Size Selector */}\n        {showPageSizeSelector && onPageSizeChange && (\n          <PageSizeContainer $size={size}>\n            <label htmlFor=\"page-size-select\">{pageSizeLabel}:</label>\n            <PageSizeSelect\n              id=\"page-size-select\"\n              $size={size}\n              $inverse={inverse}\n              value={pageSize}\n              onChange={handlePageSizeChange}\n              disabled={isDisabled}\n            >\n              {pageSizeOptions.map((option) => (\n                <option key={option.value} value={option.value}>\n                  {option.label}\n                </option>\n              ))}\n            </PageSizeSelect>\n          </PageSizeContainer>\n        )}\n      </PaginatorContainer>\n    );\n  }\n);\n\nPaginator.displayName = 'Paginator';\n\nexport default Paginator;\n","import {\n  useCallback,\n  useState,\n  useRef,\n  useEffect,\n  useMemo,\n  useId,\n  forwardRef,\n  type KeyboardEvent,\n  type MouseEvent,\n} from 'react';\n\nimport styles from './Multiselect.module.css';\nimport { Button } from '../Button';\nimport { Message } from '../Message';\n\nimport type { MultiselectProps, FontSizeValue } from './Multiselect.types';\n\n/**\n * Font size token to CSS variable mapping\n */\nconst FONT_SIZE_TOKENS: Record<string, string> = {\n  xs: 'var(--font-size-xs, 12px)',\n  sm: 'var(--font-size-sm, 14px)',\n  base: 'var(--font-size-base, 14px)',\n  md: 'var(--font-size-md, 14.5px)',\n  lg: 'var(--font-size-lg, 15px)',\n  xl: 'var(--font-size-xl, 18px)',\n};\n\n/**\n * Get size-based default font size CSS value (sm: xs/12px, md: sm/14px)\n */\nconst getDefaultFontSize = (size: 'sm' | 'md'): string => {\n  return size === 'sm'\n    ? (FONT_SIZE_TOKENS.xs as string)\n    : (FONT_SIZE_TOKENS.sm as string);\n};\n\n/**\n * Resolve font size value to CSS string, with optional default\n */\nconst resolveFontSizeWithDefault = (\n  fontSize: FontSizeValue | undefined,\n  defaultFontSize: string\n): string => {\n  if (!fontSize) return defaultFontSize;\n  \n  // Check if it's a theme token key\n  if (typeof fontSize === 'string' && fontSize in FONT_SIZE_TOKENS) {\n    return FONT_SIZE_TOKENS[fontSize] as string;\n  }\n  \n  // Otherwise, treat as CSS value\n  return typeof fontSize === 'number' ? `${fontSize}px` : String(fontSize);\n};\n\n/**\n * Multiselect component for selecting multiple options\n * Displays selected values as chips with individual removal\n *\n * @example\n * ```tsx\n * const options = [\n *   { value: 'apple', label: 'Apple' },\n *   { value: 'banana', label: 'Banana' },\n *   { value: 'cherry', label: 'Cherry' },\n * ];\n *\n * <Multiselect\n *   options={options}\n *   value={selectedValues}\n *   onChange={setSelectedValues}\n *   placeholder=\"Select fruits...\"\n *   searchable\n * />\n * ```\n */\nexport const Multiselect = forwardRef<HTMLDivElement, MultiselectProps>(\n  (\n    {\n      options,\n      value,\n      onChange,\n      label,\n      placeholder = 'Select...',\n      disabled = false,\n      required = false,\n      error = false,\n      errorMessage,\n      size = 'md',\n      maxDisplayedChips = 3,\n      clearable = true,\n      showBulkActions = false,\n      selectAllLabel = 'Select All',\n      clearAllLabel = 'Clear All',\n      searchable = false,\n      searchPlaceholder = 'Search...',\n      fullWidth = false,\n      className,\n      'aria-label': ariaLabel,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      // Font size customization props\n      labelFontSize,\n      chipFontSize,\n      optionFontSize,\n    },\n    ref\n  ) => {\n    const componentId = useId();\n    const containerRef = useRef<HTMLDivElement>(null);\n    const triggerRef = useRef<HTMLButtonElement>(null);\n    const searchInputRef = useRef<HTMLInputElement>(null);\n    const optionsRef = useRef<HTMLUListElement>(null);\n\n    const [isOpen, setIsOpen] = useState(false);\n    const [searchQuery, setSearchQuery] = useState('');\n    const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n    // Compute size-based default font size\n    const defaultFontSize = getDefaultFontSize(size);\n    \n    // Compute resolved font sizes with size-based defaults\n    const resolvedLabelFontSize = resolveFontSizeWithDefault(labelFontSize, defaultFontSize);\n    const resolvedChipFontSize = resolveFontSizeWithDefault(chipFontSize, defaultFontSize);\n    const resolvedOptionFontSize = resolveFontSizeWithDefault(optionFontSize, defaultFontSize);\n\n    // Get selected options\n    const selectedOptions = useMemo(() => {\n      return options.filter((opt) => value.includes(opt.value));\n    }, [options, value]);\n\n    // Filter options based on search query\n    const filteredOptions = useMemo(() => {\n      if (!searchable || !searchQuery) {\n        return options;\n      }\n      const lowerQuery = searchQuery.toLowerCase();\n      return options.filter((option) =>\n        option.label.toLowerCase().includes(lowerQuery)\n      );\n    }, [options, searchQuery, searchable]);\n\n    // Handle click outside to close dropdown\n    useEffect(() => {\n      const handleClickOutside = (event: globalThis.MouseEvent) => {\n        if (\n          containerRef.current &&\n          !containerRef.current.contains(event.target as Node)\n        ) {\n          setIsOpen(false);\n          setSearchQuery('');\n          setHighlightedIndex(-1);\n        }\n      };\n\n      document.addEventListener('mousedown', handleClickOutside);\n      return () => {\n        document.removeEventListener('mousedown', handleClickOutside);\n      };\n    }, []);\n\n    // Focus search input when dropdown opens\n    useEffect(() => {\n      if (isOpen && searchable && searchInputRef.current) {\n        searchInputRef.current.focus();\n      }\n    }, [isOpen, searchable]);\n\n    // Reset highlighted index when filtered options change\n    useEffect(() => {\n      setHighlightedIndex(-1);\n    }, [filteredOptions.length]);\n\n    // Toggle dropdown\n    const handleToggle = useCallback(() => {\n      if (disabled) return;\n      setIsOpen((prev) => !prev);\n      setSearchQuery('');\n      setHighlightedIndex(-1);\n    }, [disabled]);\n\n    // Select or deselect an option\n    const handleOptionClick = useCallback(\n      (optionValue: string, optionDisabled?: boolean) => {\n        if (optionDisabled || disabled) return;\n\n        const newValue = value.includes(optionValue)\n          ? value.filter((v) => v !== optionValue)\n          : [...value, optionValue];\n\n        onChange(newValue);\n      },\n      [value, onChange, disabled]\n    );\n\n    // Remove a single chip\n    const handleRemoveChip = useCallback(\n      (e: MouseEvent, optionValue: string) => {\n        e.stopPropagation();\n        if (disabled) return;\n        onChange(value.filter((v) => v !== optionValue));\n      },\n      [value, onChange, disabled]\n    );\n\n    // Clear all selections\n    const handleClearAll = useCallback(\n      (e: MouseEvent) => {\n        e.stopPropagation();\n        if (disabled) return;\n        onChange([]);\n        setIsOpen(false);\n      },\n      [onChange, disabled]\n    );\n\n    // Select all options (only non-disabled ones)\n    const handleSelectAll = useCallback(\n      (e: MouseEvent) => {\n        e.stopPropagation();\n        if (disabled) return;\n        const selectableValues = options\n          .filter((opt) => !opt.disabled)\n          .map((opt) => opt.value);\n        onChange(selectableValues);\n      },\n      [options, onChange, disabled]\n    );\n\n    // Clear all in bulk actions (doesn't close dropdown)\n    const handleBulkClearAll = useCallback(\n      (e: MouseEvent) => {\n        e.stopPropagation();\n        if (disabled) return;\n        onChange([]);\n      },\n      [onChange, disabled]\n    );\n\n    // Check if all selectable options are selected\n    const allSelected = useMemo(() => {\n      const selectableOptions = options.filter((opt) => !opt.disabled);\n      return (\n        selectableOptions.length > 0 &&\n        selectableOptions.every((opt) => value.includes(opt.value))\n      );\n    }, [options, value]);\n\n    // Keyboard navigation\n    const handleKeyDown = useCallback(\n      (e: KeyboardEvent) => {\n        if (disabled) return;\n\n        switch (e.key) {\n          case 'Enter':\n          case ' ':\n            e.preventDefault();\n            if (!isOpen) {\n              setIsOpen(true);\n            } else if (highlightedIndex >= 0 && highlightedIndex < filteredOptions.length) {\n              const option = filteredOptions[highlightedIndex];\n              if (option && !option.disabled) {\n                handleOptionClick(option.value, option.disabled);\n              }\n            }\n            break;\n\n          case 'Escape':\n            e.preventDefault();\n            setIsOpen(false);\n            setSearchQuery('');\n            setHighlightedIndex(-1);\n            triggerRef.current?.focus();\n            break;\n\n          case 'ArrowDown':\n            e.preventDefault();\n            if (!isOpen) {\n              setIsOpen(true);\n            } else {\n              setHighlightedIndex((prev) => {\n                const nextIndex = prev + 1;\n                return nextIndex >= filteredOptions.length ? 0 : nextIndex;\n              });\n            }\n            break;\n\n          case 'ArrowUp':\n            e.preventDefault();\n            if (isOpen) {\n              setHighlightedIndex((prev) => {\n                const nextIndex = prev - 1;\n                return nextIndex < 0 ? filteredOptions.length - 1 : nextIndex;\n              });\n            }\n            break;\n\n          case 'Home':\n            e.preventDefault();\n            if (isOpen) {\n              setHighlightedIndex(0);\n            }\n            break;\n\n          case 'End':\n            e.preventDefault();\n            if (isOpen) {\n              setHighlightedIndex(filteredOptions.length - 1);\n            }\n            break;\n\n          default:\n            break;\n        }\n      },\n      [disabled, isOpen, highlightedIndex, filteredOptions, handleOptionClick]\n    );\n\n    // Scroll highlighted option into view\n    useEffect(() => {\n      if (highlightedIndex >= 0 && optionsRef.current) {\n        const options = optionsRef.current.querySelectorAll('[role=\"option\"]');\n        const highlighted = options[highlightedIndex] as HTMLElement | undefined;\n        if (highlighted) {\n          highlighted.scrollIntoView({ block: 'nearest' });\n        }\n      }\n    }, [highlightedIndex]);\n\n    // Determine which chips to display\n    const displayedChips = selectedOptions.slice(0, maxDisplayedChips);\n    const remainingCount = selectedOptions.length - maxDisplayedChips;\n\n    // Build container class names\n    const containerClassNames = [styles.multiselect, className]\n      .filter(Boolean)\n      .join(' ');\n\n    return (\n      <div\n        ref={(node) => {\n          (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n          if (typeof ref === 'function') {\n            ref(node);\n          } else if (ref) {\n            (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n          }\n        }}\n        className={containerClassNames}\n        data-full-width={fullWidth}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {/* Label */}\n        {label && (\n          <label\n            id={`${componentId}-label`}\n            className={styles.label}\n            htmlFor={`${componentId}-trigger`}\n            style={{ fontSize: resolvedLabelFontSize }}\n          >\n            {label}\n            {required && <span className={styles.requiredIndicator} aria-hidden=\"true\">*</span>}\n          </label>\n        )}\n\n        {/* Select wrapper */}\n        <div className={styles.selectWrapper}>\n          {/* Trigger button */}\n          <button\n            ref={triggerRef}\n            type=\"button\"\n            id={`${componentId}-trigger`}\n            className={styles.trigger}\n            onClick={handleToggle}\n            onKeyDown={handleKeyDown}\n            disabled={disabled}\n            data-size={size}\n            data-open={isOpen}\n            data-error={error}\n            data-disabled={disabled}\n            aria-haspopup=\"listbox\"\n            aria-expanded={isOpen}\n            aria-labelledby={label ? `${componentId}-label` : undefined}\n            aria-label={ariaLabel || label}\n            aria-controls={`${componentId}-listbox`}\n            aria-required={required}\n            data-testid={testId && `${testId}-trigger`}\n          >\n            <div className={styles.triggerContent}>\n              {selectedOptions.length === 0 ? (\n                <span\n                  className={styles.placeholder}\n                  style={{ fontSize: resolvedOptionFontSize }}\n                >\n                  {placeholder}\n                </span>\n              ) : (\n                <div className={styles.chips}>\n                  {displayedChips.map((option) => (\n                    <span\n                      key={option.value}\n                      className={styles.chip}\n                      data-size={size}\n                      style={{ fontSize: resolvedChipFontSize }}\n                    >\n                      <span className={styles.chipLabel}>{option.label}</span>\n                      <span\n                        role=\"button\"\n                        className={styles.chipRemove}\n                        onClick={(e) => handleRemoveChip(e, option.value)}\n                        onKeyDown={(e) => {\n                          if (e.key === 'Enter' || e.key === ' ') {\n                            e.preventDefault();\n                            handleRemoveChip(e as unknown as MouseEvent, option.value);\n                          }\n                        }}\n                        aria-label={`Remove ${option.label}`}\n                        tabIndex={-1}\n                        data-testid={testId && `${testId}-chip-remove-${option.value}`}\n                      >\n                        <svg\n                          width=\"14\"\n                          height=\"14\"\n                          viewBox=\"0 0 14 14\"\n                          fill=\"none\"\n                          xmlns=\"http://www.w3.org/2000/svg\"\n                          aria-hidden=\"true\"\n                        >\n                          <path\n                            d=\"M10.5 3.5L3.5 10.5M3.5 3.5L10.5 10.5\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            strokeLinejoin=\"round\"\n                          />\n                        </svg>\n                      </span>\n                    </span>\n                  ))}\n                  {remainingCount > 0 && (\n                    <span className={styles.moreChips}>+{remainingCount} more</span>\n                  )}\n                </div>\n              )}\n            </div>\n\n            <div className={styles.triggerActions}>\n              {/* Clear all button */}\n              {clearable && selectedOptions.length > 0 && (\n                <span\n                  role=\"button\"\n                  className={styles.clearButton}\n                  onClick={handleClearAll}\n                  onKeyDown={(e) => {\n                    if (e.key === 'Enter' || e.key === ' ') {\n                      e.preventDefault();\n                      handleClearAll(e as unknown as MouseEvent);\n                    }\n                  }}\n                  aria-label=\"Clear all selections\"\n                  tabIndex={-1}\n                  data-testid={testId && `${testId}-clear`}\n                >\n                  <svg\n                    width=\"16\"\n                    height=\"16\"\n                    viewBox=\"0 0 16 16\"\n                    fill=\"none\"\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    aria-hidden=\"true\"\n                  >\n                    <path\n                      d=\"M12 4L4 12M4 4L12 12\"\n                      stroke=\"currentColor\"\n                      strokeWidth=\"1.5\"\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                    />\n                  </svg>\n                </span>\n              )}\n\n              {/* Chevron */}\n              <span className={styles.chevron} data-open={isOpen} aria-hidden=\"true\">\n                <svg\n                  width=\"20\"\n                  height=\"20\"\n                  viewBox=\"0 0 20 20\"\n                  fill=\"none\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                >\n                  <path\n                    d=\"M5 7.5L10 12.5L15 7.5\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"1.5\"\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                  />\n                </svg>\n              </span>\n            </div>\n          </button>\n\n          {/* Dropdown */}\n          <div\n            className={styles.dropdown}\n            data-open={isOpen}\n            role=\"presentation\"\n          >\n            {/* Search input */}\n            {searchable && (\n              <div className={styles.searchWrapper}>\n                <input\n                  ref={searchInputRef}\n                  type=\"text\"\n                  className={styles.searchInput}\n                  placeholder={searchPlaceholder}\n                  value={searchQuery}\n                  onChange={(e) => setSearchQuery(e.target.value)}\n                  onKeyDown={handleKeyDown}\n                  aria-label=\"Search options\"\n                  data-testid={testId && `${testId}-search`}\n                />\n              </div>\n            )}\n\n            {/* Bulk actions */}\n            {showBulkActions && (\n              <div className={styles.bulkActions}>\n                <Button\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  fontWeight=\"normal\"\n                  className={styles.bulkActionButton}\n                  onClick={handleSelectAll}\n                  disabled={allSelected}\n                  dataTestId={testId ? `${testId}-select-all` : undefined}\n                >\n                  {selectAllLabel}\n                </Button>\n                <span className={styles.bulkActionDivider}>|</span>\n                <Button\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  fontWeight=\"normal\"\n                  className={styles.bulkActionButton}\n                  onClick={handleBulkClearAll}\n                  disabled={value.length === 0}\n                  dataTestId={testId ? `${testId}-clear-all` : undefined}\n                >\n                  {clearAllLabel}\n                </Button>\n              </div>\n            )}\n\n            {/* Options list */}\n            <ul\n              ref={optionsRef}\n              id={`${componentId}-listbox`}\n              className={styles.optionsList}\n              role=\"listbox\"\n              aria-multiselectable=\"true\"\n              aria-labelledby={label ? `${componentId}-label` : undefined}\n              tabIndex={-1}\n            >\n              {filteredOptions.length === 0 ? (\n                <li className={styles.noResults}>No options found</li>\n              ) : (\n                filteredOptions.map((option, index) => {\n                  const isSelected = value.includes(option.value);\n                  const isHighlighted = index === highlightedIndex;\n\n                  return (\n                    <li\n                      key={option.value}\n                      role=\"option\"\n                      className={styles.option}\n                      onClick={() => handleOptionClick(option.value, option.disabled)}\n                      onMouseEnter={() => setHighlightedIndex(index)}\n                      data-highlighted={isHighlighted}\n                      data-disabled={option.disabled}\n                      aria-selected={isSelected}\n                      aria-disabled={option.disabled}\n                      data-testid={testId && `${testId}-option-${option.value}`}\n                      style={{ fontSize: resolvedOptionFontSize }}\n                    >\n                      {/* Checkbox */}\n                      <span\n                        className={styles.checkbox}\n                        data-checked={isSelected}\n                        aria-hidden=\"true\"\n                      >\n                        {isSelected && (\n                          <svg\n                            width=\"12\"\n                            height=\"12\"\n                            viewBox=\"0 0 12 12\"\n                            fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\"\n                            className={styles.checkIcon}\n                          >\n                            <path\n                              d=\"M10 3L4.5 8.5L2 6\"\n                              stroke=\"currentColor\"\n                              strokeWidth=\"2\"\n                              strokeLinecap=\"round\"\n                              strokeLinejoin=\"round\"\n                            />\n                          </svg>\n                        )}\n                      </span>\n\n                      {/* Option icon */}\n                      {option.icon && (\n                        <span className={styles.optionIcon} aria-hidden=\"true\">\n                          {option.icon}\n                        </span>\n                      )}\n\n                      {/* Option label */}\n                      <span className={styles.optionLabel}>{option.label}</span>\n                    </li>\n                  );\n                })\n              )}\n            </ul>\n          </div>\n        </div>\n\n        {/* Error message */}\n        {error && errorMessage && (\n          <Message variant=\"error\" size=\"sm\" dataTestId={testId ? `${testId}-error` : undefined}>\n            {errorMessage}\n          </Message>\n        )}\n      </div>\n    );\n  }\n);\n\nMultiselect.displayName = 'Multiselect';\n\nexport default Multiselect;","import { forwardRef, useState, useEffect, useId } from 'react';\nimport styled from '@emotion/styled';\n\nimport { Message } from '../Message';\n\nimport type { SwitchProps } from './Switch.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Size configurations for the switch\n */\nconst sizeConfig = {\n  sm: {\n    width: 32,\n    height: 16,\n    thumbSize: 12,\n    thumbMargin: 2,\n    thumbOffset: 18, // width - thumbSize - thumbMargin\n  },\n  md: {\n    width: 40,\n    height: 20,\n    thumbSize: 16,\n    thumbMargin: 2,\n    thumbOffset: 22, // width - thumbSize - thumbMargin\n  },\n  lg: {\n    width: 48,\n    height: 24,\n    thumbSize: 20,\n    thumbMargin: 2,\n    thumbOffset: 26, // width - thumbSize - thumbMargin\n  },\n} as const;\n\n/**\n * Wrapper container for the switch\n */\nconst SwitchWrapper = styled.div<{ disabled?: boolean }>`\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  overflow: visible;\n`;\n\n/**\n * Container for switch and label\n */\nconst SwitchContainer = styled.div<{\n  disabled?: boolean;\n  labelPosition: 'left' | 'right';\n}>`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-direction: ${({ labelPosition }) =>\n    labelPosition === 'left' ? 'row-reverse' : 'row'};\n  cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n`;\n\n/**\n * Hidden checkbox input for accessibility\n */\nconst HiddenInput = styled.input`\n  opacity: 0;\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0 0 0 0);\n  white-space: nowrap;\n  border: 0;\n`;\n\n/**\n * Visual track of the switch\n */\nconst SwitchTrack = styled.span<{\n  theme?: Theme;\n  $checked: boolean;\n  $disabled: boolean;\n  $size: 'sm' | 'md' | 'lg';\n  $accentColor?: string;\n}>`\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  width: ${({ $size }) => sizeConfig[$size].width}px;\n  height: ${({ $size }) => sizeConfig[$size].height}px;\n  border-radius: ${({ $size }) => sizeConfig[$size].height / 2}px;\n  background-color: ${({ theme, $checked, $accentColor }) =>\n    $checked\n      ? ($accentColor || theme.colors.highlight)\n      : theme.colors.grey[500]};\n  transition: background-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;\n  flex-shrink: 0;\n\n  ${({ $disabled }) =>\n    $disabled &&\n    `\n    opacity: 0.5;\n    cursor: not-allowed;\n  `}\n\n  /* Hover effect */\n  ${({ $disabled, theme }) =>\n    !$disabled &&\n    `\n    &:hover {\n      box-shadow: 0 0 0 2px ${theme.colors.transparent.black20};\n    }\n  `}\n`;\n\n/**\n * Thumb/toggle of the switch\n */\nconst SwitchThumb = styled.span<{\n  theme?: Theme;\n  $checked: boolean;\n  $size: 'sm' | 'md' | 'lg';\n}>`\n  position: absolute;\n  width: ${({ $size }) => sizeConfig[$size].thumbSize}px;\n  height: ${({ $size }) => sizeConfig[$size].thumbSize}px;\n  border-radius: 50%;\n  background-color: ${({ theme }) => theme.colors.white};\n  margin-left: ${({ $checked, $size }) =>\n    $checked\n      ? `${sizeConfig[$size].thumbOffset}px`\n      : `${sizeConfig[$size].thumbMargin}px`};\n  transition: margin-left 0.2s ease-in-out;\n`;\n\n/**\n * Label text for the switch\n */\nconst SwitchLabel = styled.label<{\n  theme?: Theme;\n  $disabled?: boolean;\n}>`\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme }) => theme.typography.fontSize.sm};\n  line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n  color: ${({ theme, $disabled }) =>\n    $disabled ? theme.colors.grey[400] : theme.colors.grey[700]};\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  user-select: none;\n`;\n\n/**\n * Icon container for left/right icons\n */\nconst IconContainer = styled.span<{\n  theme?: Theme;\n  $disabled?: boolean;\n  $size: 'sm' | 'md' | 'lg';\n}>`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: ${({ theme, $disabled }) =>\n    $disabled ? theme.colors.grey[400] : theme.colors.grey[600]};\n  \n  /* Size-based icon sizing */\n  font-size: ${({ $size }) => {\n    switch ($size) {\n      case 'sm': return '14px';\n      case 'lg': return '20px';\n      default: return '16px';\n    }\n  }};\n\n  svg {\n    width: 1em;\n    height: 1em;\n  }\n`;\n\n/**\n * Container for messages\n */\nconst MessageContainer = styled.div`\n  margin-top: 4px;\n`;\n\n/**\n * Switch - A toggle switch component for boolean values\n *\n * Supports controlled and uncontrolled modes, with optional label and messages.\n * Uses the theme's feature color for the checked state.\n *\n * @example\n * ```tsx\n * // Controlled\n * <Switch\n *   checked={isEnabled}\n *   onChange={(checked) => setIsEnabled(checked)}\n *   label=\"Enable notifications\"\n * />\n *\n * // Uncontrolled\n * <Switch\n *   defaultChecked={true}\n *   label=\"Dark mode\"\n * />\n *\n * // With error message\n * <Switch\n *   checked={false}\n *   errorMessage=\"This setting is required\"\n * />\n * ```\n */\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n  (\n    {\n      checked: controlledChecked,\n      defaultChecked = false,\n      onChange,\n      disabled = false,\n      label,\n      labelPosition = 'right',\n      size = 'md',\n      name,\n      id: providedId,\n      'aria-label': ariaLabel,\n      errorMessage,\n      assistiveMessage,\n      leftIcon,\n      rightIcon,\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      accentColor,\n    },\n    ref\n  ) => {\n    const generatedId = useId();\n    const switchId = providedId || generatedId;\n\n    // Determine if controlled or uncontrolled\n    const isControlled = controlledChecked !== undefined;\n    const [internalChecked, setInternalChecked] = useState(defaultChecked);\n\n    const isChecked = isControlled ? controlledChecked : internalChecked;\n\n    // Sync internal state with controlled value\n    useEffect(() => {\n      if (isControlled) {\n        setInternalChecked(controlledChecked);\n      }\n    }, [isControlled, controlledChecked]);\n\n    const handleToggle = (\n      event: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>\n    ) => {\n      if (disabled) return;\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      const newChecked = !isChecked;\n\n      if (!isControlled) {\n        setInternalChecked(newChecked);\n      }\n\n      onChange?.(newChecked, event);\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n      if (disabled) return;\n\n      if (event.key === ' ' || event.key === 'Enter') {\n        handleToggle(event);\n      }\n    };\n\n    return (\n      <SwitchWrapper className={className} data-testid={dataTestId || testId} data-id={dataId}>\n        <SwitchContainer\n          onClick={handleToggle}\n          onKeyDown={handleKeyDown}\n          disabled={disabled}\n          labelPosition={labelPosition}\n          role=\"switch\"\n          aria-checked={isChecked}\n          aria-label={!label ? ariaLabel || 'Toggle switch' : undefined}\n          aria-disabled={disabled}\n          tabIndex={disabled ? -1 : 0}\n        >\n          <HiddenInput\n            ref={ref}\n            type=\"checkbox\"\n            id={switchId}\n            name={name}\n            checked={isChecked}\n            disabled={disabled}\n            readOnly\n            tabIndex={-1}\n            aria-hidden=\"true\"\n          />\n          {leftIcon && (\n            <IconContainer $disabled={disabled} $size={size} aria-hidden=\"true\">\n              {leftIcon}\n            </IconContainer>\n          )}\n          <SwitchTrack\n            $checked={isChecked}\n            $disabled={disabled}\n            $size={size}\n            $accentColor={accentColor}\n            data-testid={testId && `${testId}-track`}\n          >\n            <SwitchThumb $checked={isChecked} $size={size} />\n          </SwitchTrack>\n          {rightIcon && (\n            <IconContainer $disabled={disabled} $size={size} aria-hidden=\"true\">\n              {rightIcon}\n            </IconContainer>\n          )}\n          {label && (\n            <SwitchLabel htmlFor={switchId} $disabled={disabled}>\n              {label}\n            </SwitchLabel>\n          )}\n        </SwitchContainer>\n        {errorMessage && (\n          <MessageContainer>\n            <Message variant=\"error\">{errorMessage}</Message>\n          </MessageContainer>\n        )}\n        {assistiveMessage && !errorMessage && (\n          <MessageContainer>\n            <Message variant=\"assistive\">{assistiveMessage}</Message>\n          </MessageContainer>\n        )}\n      </SwitchWrapper>\n    );\n  }\n);\n\nSwitch.displayName = 'Switch';\n\nexport default Switch;\n","import { memo } from 'react';\nimport styled from '@emotion/styled';\nimport { keyframes } from '@emotion/react';\n\nimport type { EmptyStateProps, EmptyStateSize } from './EmptyState.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Fade-in animation for smooth appearance\n */\nconst fadeIn = keyframes`\n  from {\n    opacity: 0;\n    transform: translateY(10px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n`;\n\n/**\n * Size configuration for padding and spacing\n */\nconst sizeConfig: Record<EmptyStateSize, { padding: string; gap: string; iconSize: string }> = {\n  sm: { padding: '24px 16px', gap: '8px', iconSize: '32px' },\n  md: { padding: '48px 24px', gap: '12px', iconSize: '48px' },\n  lg: { padding: '64px 32px', gap: '16px', iconSize: '64px' },\n};\n\n/**\n * Container for the empty state\n */\nconst EmptyStateContainer = styled.div<{\n  theme?: Theme;\n  $size: EmptyStateSize;\n}>`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: ${({ $size }) => sizeConfig[$size].padding};\n  text-align: center;\n  flex: 1;\n  animation: ${fadeIn} 0.3s ease-out;\n`;\n\n/**\n * Icon container\n */\nconst IconContainer = styled.div<{\n  theme?: Theme;\n  $size: EmptyStateSize;\n}>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: ${({ $size }) => sizeConfig[$size].gap};\n  color: ${({ theme }) => theme.colors.text.secondary};\n  \n  /* Scale icon if it's an SVG or img */\n  & > svg,\n  & > img {\n    width: ${({ $size }) => sizeConfig[$size].iconSize};\n    height: ${({ $size }) => sizeConfig[$size].iconSize};\n  }\n`;\n\n/**\n * Title text\n */\nconst Title = styled.h3<{\n  theme?: Theme;\n  $size: EmptyStateSize;\n}>`\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $size }) =>\n    $size === 'lg'\n      ? theme.typography.fontSize.lg\n      : $size === 'md'\n      ? theme.typography.fontSize.md\n      : theme.typography.fontSize.sm};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.semibold};\n  color: ${({ theme }) => theme.colors.text.primary};\n  margin: 0;\n  margin-bottom: ${({ theme }) => theme.spacing[2]};\n`;\n\n/**\n * Description text - always uses xs font size for consistency\n */\nconst Description = styled.p<{\n  theme?: Theme;\n  $size: EmptyStateSize;\n}>`\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme }) => theme.typography.fontSize.xs};\n  line-height: ${({ theme }) => theme.typography.lineHeight.relaxed};\n  color: ${({ theme }) => theme.colors.text.secondary};\n  margin: 0;\n  margin-bottom: ${({ theme }) => theme.spacing[5]};\n  max-width: 280px;\n`;\n\n/**\n * Action container\n */\nconst ActionContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 12px;\n`;\n\n/**\n * EmptyState - A component for displaying empty state messages\n *\n * Use when there's no content to show - search results, lists, etc.\n * Provides a centered layout with optional icon, title, description, and action.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <EmptyState\n *   title=\"No results found\"\n *   description=\"Try adjusting your search or filters\"\n * />\n *\n * // With icon and action\n * <EmptyState\n *   icon={<Icon name=\"search\" size=\"lg\" />}\n *   title=\"No reviews yet\"\n *   description=\"Submit a file for review to see results here\"\n *   action={<Button variant=\"primary\">Create Review</Button>}\n * />\n *\n * // Different sizes\n * <EmptyState\n *   title=\"Empty\"\n *   size=\"sm\"\n * />\n * ```\n */\nconst EmptyStateComponent = ({\n  icon,\n  title,\n  description,\n  action,\n  size = 'md',\n  className,\n  'data-testid': testId,\n}: EmptyStateProps) => {\n  return (\n    <EmptyStateContainer\n      className={className}\n      $size={size}\n      data-testid={testId}\n    >\n      {icon && (\n        <IconContainer $size={size} data-testid={testId && `${testId}-icon`}>\n          {icon}\n        </IconContainer>\n      )}\n      <Title $size={size} data-testid={testId && `${testId}-title`}>\n        {title}\n      </Title>\n      {description && (\n        <Description $size={size} data-testid={testId && `${testId}-description`}>\n          {description}\n        </Description>\n      )}\n      {action && (\n        <ActionContainer data-testid={testId && `${testId}-action`}>\n          {action}\n        </ActionContainer>\n      )}\n    </EmptyStateContainer>\n  );\n};\n\nEmptyStateComponent.displayName = 'EmptyState';\n\nexport const EmptyState = memo(EmptyStateComponent);\n\nexport default EmptyState;\n","import { memo } from 'react';\nimport styled from '@emotion/styled';\n\nimport type { DividerProps, DividerVariant } from './Divider.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Horizontal divider with optional text\n */\nconst HorizontalDivider = styled.div<{\n  theme?: Theme;\n  $variant: DividerVariant;\n  $hasChildren: boolean;\n}>`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing[3]};\n  width: 100%;\n  \n  &::before,\n  &::after {\n    content: '';\n    flex: 1;\n    height: 1px;\n    background-color: ${({ theme }) => theme.colors.border.light};\n    ${({ $variant }) =>\n      $variant === 'dashed' &&\n      `\n      background-color: transparent;\n      background-image: linear-gradient(\n        to right,\n        currentColor 50%,\n        transparent 50%\n      );\n      background-size: 8px 1px;\n      color: inherit;\n    `}\n  }\n  \n  /* Hide pseudo-elements when no children (simple line) */\n  ${({ $hasChildren }) =>\n    !$hasChildren &&\n    `\n    &::after {\n      display: none;\n    }\n    &::before {\n      flex: none;\n      width: 100%;\n    }\n  `}\n`;\n\n/**\n * Divider text content\n */\nconst DividerText = styled.span<{\n  theme?: Theme;\n}>`\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme }) => theme.typography.fontSize.tn};\n  color: ${({ theme }) => theme.colors.text.muted};\n  text-transform: uppercase;\n  white-space: nowrap;\n  letter-spacing: 0.5px;\n`;\n\n/**\n * Vertical divider\n */\nconst VerticalDivider = styled.div<{\n  theme?: Theme;\n  $variant: DividerVariant;\n}>`\n  display: inline-flex;\n  flex-direction: column;\n  align-items: center;\n  align-self: stretch;\n  min-height: 100%;\n  width: 1px;\n  background-color: ${({ theme, $variant }) =>\n    $variant === 'solid' ? theme.colors.border.light : 'transparent'};\n  \n  ${({ $variant, theme }) =>\n    $variant === 'dashed' &&\n    `\n    background-image: linear-gradient(\n      to bottom,\n      ${theme.colors.border.light} 50%,\n      transparent 50%\n    );\n    background-size: 1px 8px;\n  `}\n`;\n\n/**\n * Divider - A horizontal or vertical divider with optional text\n *\n * Use to separate content sections visually. Supports text in the middle\n * for horizontal orientation (e.g., \"or\", \"and\").\n *\n * @example\n * ```tsx\n * // Simple horizontal line\n * <Divider />\n *\n * // Horizontal divider with text\n * <Divider>or</Divider>\n *\n * // Dashed variant\n * <Divider variant=\"dashed\">section</Divider>\n *\n * // Vertical divider (typically in flex row containers)\n * <div style={{ display: 'flex', gap: 16, height: 100 }}>\n *   <span>Left</span>\n *   <Divider orientation=\"vertical\" />\n *   <span>Right</span>\n * </div>\n * ```\n */\nconst DividerComponent = ({\n  children,\n  orientation = 'horizontal',\n  variant = 'solid',\n  className,\n  'data-testid': testId,\n}: DividerProps) => {\n  if (orientation === 'vertical') {\n    return (\n      <VerticalDivider\n        className={className}\n        $variant={variant}\n        role=\"separator\"\n        aria-orientation=\"vertical\"\n        data-testid={testId}\n      />\n    );\n  }\n\n  const hasChildren = Boolean(children);\n\n  return (\n    <HorizontalDivider\n      className={className}\n      $variant={variant}\n      $hasChildren={hasChildren}\n      role=\"separator\"\n      aria-orientation=\"horizontal\"\n      data-testid={testId}\n    >\n      {hasChildren && <DividerText>{children}</DividerText>}\n    </HorizontalDivider>\n  );\n};\n\nDividerComponent.displayName = 'Divider';\n\nexport const Divider = memo(DividerComponent);\n\nexport default Divider;\n","import { forwardRef, useId, useState, useEffect, useRef, useLayoutEffect } from 'react';\nimport styled from '@emotion/styled';\n\nimport { FieldLabel } from '../FieldLabel';\nimport { Message } from '../Message';\n\nimport type { TextAreaProps, TextAreaResize, TextAreaFontSize } from './TextArea.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Wrapper container for the entire component\n */\nconst Wrapper = styled.div<{ $fullWidth: boolean }>`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  ${({ $fullWidth }) => $fullWidth && 'width: 100%;'}\n`;\n\n/**\n * Container for the textarea with border styling\n */\nconst TextAreaContainer = styled.div<{\n  theme?: Theme;\n  $disabled: boolean;\n  $error: boolean;\n  $noBorder: boolean;\n  $focused: boolean;\n  $focusColor?: string;\n}>`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  border: ${({ $noBorder }) => ($noBorder ? 'none' : '1px solid')};\n  border-color: ${({ theme, $error, $focused, $disabled, $focusColor }) => {\n    if ($disabled) return theme.colors.grey[200];\n    if ($error) return theme.colors.semantic.red.base;\n    if ($focused) return $focusColor || theme.colors.grey[900];\n    return theme.colors.grey[300];\n  }};\n  box-sizing: border-box;\n  border-radius: 4px;\n  overflow: hidden;\n  transition: border-color 0.1s ease, box-shadow 0.1s ease;\n  background-color: ${({ theme, $disabled }) =>\n    $disabled ? theme.colors.grey[100] : theme.colors.white};\n\n  /* Hover effect */\n  ${({ $disabled, $noBorder, theme, $error, $focusColor }) =>\n    !$disabled &&\n    !$noBorder &&\n    `\n    &:hover {\n      border-color: ${$error ? theme.colors.semantic.red.base : ($focusColor || theme.colors.grey[400])};\n    }\n  `}\n\n  /* Focus effect */\n  ${({ $focused, $noBorder, theme, $error, $focusColor }) =>\n    $focused &&\n    !$noBorder &&\n    `\n    border-color: ${$error ? theme.colors.semantic.red.base : ($focusColor || theme.colors.grey[900])} !important;\n    ${$focusColor && !$error ? `box-shadow: 0 0 0 2px ${$focusColor}20;` : ''}\n  `}\n`;\n\n/**\n * Character count display below the textarea\n */\nconst CharacterCount = styled.div<{\n  theme?: Theme;\n}>`\n  display: flex;\n  justify-content: flex-end;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme }) => theme.typography.fontSize.tn};\n  color: ${({ theme }) => theme.colors.text.muted};\n  margin-top: 4px;\n`;\n\n/**\n * The actual textarea element\n */\nconst StyledTextArea = styled.textarea<{\n  theme?: Theme;\n  $resize: TextAreaResize;\n  $disabled: boolean;\n  $fontSize?: TextAreaFontSize;\n}>`\n  width: 100%;\n  border: none;\n  padding: 8px 12px;\n  box-sizing: border-box;\n  overflow: auto;\n  min-height: 34px;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-size: ${({ theme, $fontSize }) => theme.typography.fontSize[$fontSize || 'sm']};\n  line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n  color: ${({ theme }) => theme.colors.text.primary};\n  background: transparent;\n\n  /* Resize behavior */\n  resize: ${({ $resize }) => $resize};\n\n  &::placeholder {\n    color: ${({ theme, $disabled }) =>\n      $disabled ? theme.colors.grey[300] : theme.colors.grey[400]};\n    opacity: 1;\n  }\n\n  &:disabled {\n    cursor: not-allowed;\n    background-color: transparent;\n  }\n\n  &:focus {\n    outline: none;\n  }\n`;\n\n/**\n * TextArea - A multi-line text input component\n *\n * Supports draggable resize, auto-expansion, and integration with form messages.\n * Can be controlled or uncontrolled.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <TextArea\n *   label=\"Description\"\n *   placeholder=\"Enter a description...\"\n * />\n *\n * // With auto-expansion\n * <TextArea\n *   label=\"Comments\"\n *   rows={3}\n *   maxRows={10}\n *   resize=\"none\"\n * />\n *\n * // With error state\n * <TextArea\n *   label=\"Bio\"\n *   error\n *   errorMessage=\"Bio is required\"\n * />\n *\n * // Draggable resize\n * <TextArea\n *   label=\"Notes\"\n *   resize=\"vertical\"\n *   rows={4}\n * />\n * ```\n */\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n  (\n    {\n      value: controlledValue,\n      defaultValue = '',\n      onChange,\n      placeholder,\n      label,\n      rows = 3,\n      maxRows,\n      disabled = false,\n      readOnly = false,\n      required = false,\n      error = false,\n      errorMessage,\n      assistiveMessage,\n      resize = 'vertical',\n      noBorder = false,\n      name,\n      id: providedId,\n      'aria-label': ariaLabel,\n      className,\n      fullWidth = true,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n      maxLength,\n      showCharCount = false,\n      onFocus,\n      onBlur,\n      onKeyDown,\n      focusColor,\n      fontSize,\n    },\n    ref\n  ) => {\n    const generatedId = useId();\n    const textareaId = providedId || generatedId;\n    const errorId = `${textareaId}-error`;\n    const assistiveId = `${textareaId}-assistive`;\n\n    const internalRef = useRef<HTMLTextAreaElement>(null);\n    const textareaRef = (ref as React.RefObject<HTMLTextAreaElement>) || internalRef;\n\n    // Determine if controlled or uncontrolled\n    const isControlled = controlledValue !== undefined;\n    const [internalValue, setInternalValue] = useState(defaultValue);\n    const currentValue = isControlled ? controlledValue : internalValue;\n\n    const [isFocused, setIsFocused] = useState(false);\n    const [currentRows, setCurrentRows] = useState(rows);\n\n    // Sync internal state with controlled value\n    useEffect(() => {\n      if (isControlled) {\n        setInternalValue(controlledValue);\n      }\n    }, [isControlled, controlledValue]);\n\n    // Auto-adjust rows based on content\n    const adjustRows = () => {\n      const textarea = textareaRef.current;\n      if (!textarea || !maxRows) return;\n\n      // Reset to minimum rows to get accurate scrollHeight\n      textarea.rows = 1;\n\n      const computedStyles = window.getComputedStyle(textarea);\n      const lineHeight = parseInt(computedStyles.lineHeight.replace(/\\D/g, ''), 10) || 20;\n      const calculatedRows = Math.floor(textarea.scrollHeight / lineHeight);\n\n      const newRows = Math.min(Math.max(calculatedRows, rows), maxRows);\n      textarea.rows = newRows;\n      setCurrentRows(newRows);\n    };\n\n    // Adjust rows on mount and when value changes\n    useLayoutEffect(() => {\n      if (maxRows) {\n        adjustRows();\n      }\n    }, [currentValue, maxRows]); // eslint-disable-line react-hooks/exhaustive-deps\n\n    const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n      if (!isControlled) {\n        setInternalValue(event.target.value);\n      }\n\n      if (maxRows) {\n        adjustRows();\n      }\n\n      onChange?.(event);\n    };\n\n    const handleFocus = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n      setIsFocused(true);\n      onFocus?.(event);\n    };\n\n    const handleBlur = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n      setIsFocused(false);\n      onBlur?.(event);\n    };\n\n    // Build aria-describedby\n    const describedBy = [\n      error && errorMessage ? errorId : undefined,\n      !error && assistiveMessage ? assistiveId : undefined,\n    ]\n      .filter(Boolean)\n      .join(' ');\n\n    return (\n      <Wrapper className={className} $fullWidth={fullWidth} data-testid={dataTestId || testId} data-id={dataId}>\n        {label && (\n          <FieldLabel\n            label={typeof label === 'string' ? label : ''}\n            htmlFor={textareaId}\n            required={required}\n          />\n        )}\n        <TextAreaContainer\n          $disabled={disabled}\n          $error={error}\n          $noBorder={noBorder}\n          $focused={isFocused}\n          $focusColor={focusColor}\n          data-testid={testId && `${testId}-container`}\n        >\n          <StyledTextArea\n              ref={textareaRef}\n              id={textareaId}\n              name={name}\n              value={currentValue}\n              onChange={handleChange}\n              onFocus={handleFocus}\n              onBlur={handleBlur}\n              onKeyDown={onKeyDown}\n              placeholder={placeholder}\n              rows={maxRows ? currentRows : rows}\n              disabled={disabled}\n              readOnly={readOnly}\n              required={required}\n              maxLength={maxLength}\n              aria-label={!label ? ariaLabel : undefined}\n              aria-invalid={error}\n              aria-describedby={describedBy || undefined}\n              aria-required={required}\n              $resize={maxRows ? 'none' : resize}\n              $disabled={disabled}\n              $fontSize={fontSize}\n              data-testid={testId && `${testId}-input`}\n            />\n        </TextAreaContainer>\n        {error && errorMessage ? (\n          <Message variant=\"error\" size=\"sm\" dataTestId={testId ? `${testId}-error` : undefined}>\n            {errorMessage}\n          </Message>\n        ) : assistiveMessage ? (\n          <Message variant=\"assistive\" size=\"sm\" dataTestId={testId ? `${testId}-assistive` : undefined}>\n            {assistiveMessage}\n          </Message>\n        ) : null}\n        {showCharCount && (\n          <CharacterCount data-testid={testId ? `${testId}-char-count` : undefined}>\n            {maxLength\n              ? `${(currentValue as string).length.toLocaleString()} / ${maxLength.toLocaleString()} characters`\n              : `${(currentValue as string).length.toLocaleString()} characters`}\n          </CharacterCount>\n        )}\n      </Wrapper>\n    );\n  }\n);\n\nTextArea.displayName = 'TextArea';\n\nexport default TextArea;\n","import { cloneElement, useId } from 'react';\nimport styled from '@emotion/styled';\n\nimport { FieldLabel } from '../FieldLabel';\nimport { Message } from '../Message';\n\nimport type { FormControlProps } from './FormControl.types';\nimport type { Theme } from '../../theme';\n\n/**\n * Container for the entire form control\n */\nconst FormControlContainer = styled.div<{\n  theme?: Theme;\n  $fullWidth: boolean;\n}>`\n  display: flex;\n  flex-direction: column;\n  ${({ $fullWidth }) => $fullWidth && 'width: 100%;'}\n  align-items: flex-start;\n  gap: 4px;\n`;\n\n/**\n * Container for the label row (label + optional right adornment)\n */\nconst LabelRow = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n`;\n\n/**\n * Container for the label and any additional elements\n */\nconst LabelContainer = styled.div`\n  display: flex;\n  gap: 4px;\n  align-items: center;\n`;\n\n/**\n * FormControl - A wrapper component that provides layout for form fields\n *\n * Combines label, input, and message components into a consistent form field layout.\n * Uses FieldLabel, ErrorMessage, and AssistiveMessage components internally.\n *\n * @example\n * ```tsx\n * // Basic usage with label\n * <FormControl label=\"Username\" required>\n *   <Input placeholder=\"Enter username...\" />\n * </FormControl>\n *\n * // With error state\n * <FormControl\n *   label=\"Email\"\n *   error\n *   errorMessage=\"Please enter a valid email\"\n * >\n *   <Input type=\"email\" />\n * </FormControl>\n *\n * // With assistive text\n * <FormControl\n *   label=\"Password\"\n *   assistiveText=\"Must be at least 8 characters\"\n * >\n *   <Input type=\"password\" />\n * </FormControl>\n *\n * // With right adornment\n * <FormControl\n *   label=\"API Key\"\n *   labelRightAdornment={<Button size=\"sm\">Generate</Button>}\n * >\n *   <Input />\n * </FormControl>\n * ```\n */\nexport const FormControl: React.FC<FormControlProps> = ({\n  children,\n  label,\n  labelFor,\n  required = false,\n  error = false,\n  errorMessage,\n  assistiveText,\n  id,\n  className,\n  fullWidth = true,\n  'data-testid': testId,\n  dataTestId,\n  dataId,\n  labelRightAdornment,\n  disabled = false,\n}) => {\n  const generatedId = useId();\n  const controlId = labelFor || generatedId;\n\n  // Get the child element's existing props safely\n  const childProps = children.props as Record<string, unknown>;\n  const childId = childProps.id as string | undefined;\n  const childDisabled = childProps.disabled as boolean | undefined;\n\n  // Clone the child element with additional props\n  const enhancedChild = cloneElement(children, {\n    id: childId || controlId,\n    'aria-invalid': error || undefined,\n    'aria-required': required || undefined,\n    disabled: disabled || childDisabled,\n  } as Record<string, unknown>);\n\n  // If no label, just render the control with messages\n  if (!label) {\n    return (\n      <FormControlContainer\n        id={id}\n        className={className}\n        $fullWidth={fullWidth}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {enhancedChild}\n        {error && errorMessage ? (\n          <Message variant=\"error\" size=\"sm\" dataTestId={testId ? `${testId}-error` : undefined}>\n            {errorMessage}\n          </Message>\n        ) : assistiveText ? (\n          <Message variant=\"assistive\" size=\"sm\" dataTestId={testId ? `${testId}-assistive` : undefined}>\n            {assistiveText}\n          </Message>\n        ) : null}\n      </FormControlContainer>\n    );\n  }\n\n  return (\n    <FormControlContainer\n      id={id}\n      className={className}\n      $fullWidth={fullWidth}\n      data-testid={dataTestId || testId}\n      data-id={dataId}\n    >\n      {labelRightAdornment ? (\n        <LabelRow>\n          <LabelContainer>\n            <FieldLabel\n              label={typeof label === 'string' ? label : ''}\n              htmlFor={controlId}\n              required={required}\n              data-testid={testId ? `${testId}-label` : undefined}\n            />\n          </LabelContainer>\n          {labelRightAdornment}\n        </LabelRow>\n      ) : (\n        <LabelContainer>\n          <FieldLabel\n            label={typeof label === 'string' ? label : ''}\n            htmlFor={controlId}\n            required={required}\n            data-testid={testId ? `${testId}-label` : undefined}\n          />\n        </LabelContainer>\n      )}\n      {enhancedChild}\n      {error && errorMessage ? (\n        <Message variant=\"error\" size=\"sm\" dataTestId={testId ? `${testId}-error` : undefined}>\n          {errorMessage}\n        </Message>\n      ) : assistiveText ? (\n        <Message variant=\"assistive\" size=\"sm\" dataTestId={testId ? `${testId}-assistive` : undefined}>\n          {assistiveText}\n        </Message>\n      ) : null}\n    </FormControlContainer>\n  );\n};\n\nFormControl.displayName = 'FormControl';\n\nexport default FormControl;\n","import type { ReactNode, CSSProperties, HTMLAttributes } from 'react';\n\n/**\n * Typography variant defines the semantic purpose and default styling\n */\nexport type TypographyVariant = 'heading' | 'label' | 'caption' | 'body' | 'error';\n\n/**\n * Typography size using theme typography size tokens\n * Includes '2xl' for larger headings (not in base theme, calculated as 1.5x base)\n */\nexport type TypographySize = 'tn' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/**\n * Font weight options matching theme.typography.fontWeight\n */\nexport type TypographyWeight = 'regular' | 'medium' | 'semibold' | 'bold';\n\n/**\n * Color options using semantic naming\n * Maps to theme.colors.text.* and theme.colors.status.* paths\n */\nexport type TypographyColor =\n  | 'primary'      // theme.colors.text.primary\n  | 'secondary'    // theme.colors.text.secondary\n  | 'muted'        // theme.colors.text.muted\n  | 'inverse'      // theme.colors.text.inverse\n  | 'error'        // theme.colors.status.error\n  | 'success'      // theme.colors.status.success\n  | 'warning'      // theme.colors.status.warning\n  | 'info'         // theme.colors.status.info\n  | 'highlight'    // theme.colors.highlight (tenant brand color)\n  | 'inherit';     // inherit from parent\n\n/**\n * HTML element to render the typography as\n */\nexport type TypographyAs = 'span' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'div' | 'label';\n\n/**\n * Typography props interface\n */\nexport interface TypographyProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {\n  /**\n   * The content to display\n   */\n  children: ReactNode;\n\n  /**\n   * Typography variant that determines default styling\n   * - heading: semibold, primary color, larger size (lg)\n   * - label: medium weight, muted color, uppercase, smaller size (xs)\n   * - caption: muted color, smaller size (xs)\n   * - body: regular weight, primary color, base size (sm)\n   * - error: error color, base size (sm)\n   * @default 'body'\n   */\n  variant?: TypographyVariant;\n\n  /**\n   * Font size using theme typography tokens\n   * Overrides the default size for the variant\n   */\n  size?: TypographySize;\n\n  /**\n   * Font weight override\n   * Overrides the default weight for the variant\n   */\n  weight?: TypographyWeight;\n\n  /**\n   * Text color using semantic color names\n   * Overrides the default color for the variant\n   */\n  color?: TypographyColor;\n\n  /**\n   * Whether to uppercase the text\n   * Default is true for 'label' variant, false for others\n   */\n  uppercase?: boolean;\n\n  /**\n   * Enable text truncation with ellipsis\n   * When true, text will be truncated with \"...\" and a Tooltip will show the full text on hover\n   * @default false\n   */\n  truncate?: boolean;\n\n  /**\n   * Number of lines before truncation (multi-line truncation)\n   * Only applies when truncate is true\n   * @default 1\n   */\n  lines?: number;\n\n  /**\n   * Custom tooltip content to show when truncated\n   * If not provided, the children text content will be used\n   */\n  tooltipContent?: ReactNode;\n\n  /**\n   * Whether to disable the tooltip when truncated\n   * @default false\n   */\n  disableTooltip?: boolean;\n\n  /**\n   * HTML element to render as\n   * Defaults based on variant:\n   * - heading: 'h2'\n   * - label: 'span'\n   * - caption: 'span'\n   * - body: 'p'\n   * - error: 'span'\n   */\n  as?: TypographyAs;\n\n  /**\n   * Text alignment\n   */\n  align?: 'left' | 'center' | 'right';\n\n  /**\n   * Whether to prevent text wrapping\n   * @default false (only true when truncate is enabled)\n   */\n  noWrap?: boolean;\n\n  /**\n   * Additional inline styles\n   */\n  style?: CSSProperties;\n\n  /**\n   * Additional CSS class name\n   */\n  className?: string;\n\n  /**\n   * Test identifier for automated testing\n   */\n  dataTestId?: string;\n\n  /**\n   * Data identifier for ib-ui compatibility\n   */\n  dataId?: string;\n}\n\n/**\n * Default element for each variant\n */\nexport const VARIANT_DEFAULT_ELEMENTS: Record<TypographyVariant, TypographyAs> = {\n  heading: 'h2',\n  label: 'span',\n  caption: 'span',\n  body: 'p',\n  error: 'span',\n};\n\n/**\n * Default size for each variant\n */\nexport const VARIANT_DEFAULT_SIZES: Record<TypographyVariant, TypographySize> = {\n  heading: 'lg',\n  label: 'xs',\n  caption: 'xs',\n  body: 'sm',\n  error: 'sm',\n};\n\n/**\n * Default weight for each variant\n */\nexport const VARIANT_DEFAULT_WEIGHTS: Record<TypographyVariant, TypographyWeight> = {\n  heading: 'semibold',\n  label: 'medium',\n  caption: 'regular',\n  body: 'regular',\n  error: 'regular',\n};\n\n/**\n * Default color for each variant\n */\nexport const VARIANT_DEFAULT_COLORS: Record<TypographyVariant, TypographyColor> = {\n  heading: 'primary',\n  label: 'muted',\n  caption: 'muted',\n  body: 'primary',\n  error: 'error',\n};\n\n/**\n * Default uppercase for each variant\n */\nexport const VARIANT_DEFAULT_UPPERCASE: Record<TypographyVariant, boolean> = {\n  heading: false,\n  label: true,\n  caption: false,\n  body: false,\n  error: false,\n};\n","import { forwardRef, isValidElement } from 'react';\nimport styled from '@emotion/styled';\nimport { css, useTheme } from '@emotion/react';\n\nimport { Tooltip } from '../Tooltip';\nimport type { Theme } from '../../theme';\nimport type { TypographyProps, TypographySize, TypographyWeight, TypographyColor } from './Typography.types';\nimport {\n  VARIANT_DEFAULT_ELEMENTS,\n  VARIANT_DEFAULT_SIZES,\n  VARIANT_DEFAULT_WEIGHTS,\n  VARIANT_DEFAULT_COLORS,\n  VARIANT_DEFAULT_UPPERCASE,\n} from './Typography.types';\n\n/**\n * Get font size from theme, including the custom '2xl' size\n */\nfunction getFontSize(size: TypographySize, theme: Theme): string {\n  if (size === '2xl') {\n    // Calculate 2xl as 1.5x the base font size (21px at default 14px base)\n    const baseFontSize = theme.typography.baseFontSize;\n    return `${Math.round(baseFontSize * 1.5)}px`;\n  }\n  return theme.typography.fontSize[size];\n}\n\n/**\n * Get color value from theme based on semantic color name\n */\nfunction getColorValue(color: TypographyColor, theme: Theme): string {\n  switch (color) {\n    case 'primary':\n      return theme.colors.text.primary;\n    case 'secondary':\n      return theme.colors.text.secondary;\n    case 'muted':\n      return theme.colors.text.muted;\n    case 'inverse':\n      return theme.colors.text.inverse;\n    case 'error':\n      return theme.colors.status.error;\n    case 'success':\n      return theme.colors.status.success;\n    case 'warning':\n      return theme.colors.status.warning;\n    case 'info':\n      return theme.colors.status.info;\n    case 'highlight':\n      return theme.colors.highlight;\n    case 'inherit':\n      return 'inherit';\n    default:\n      return theme.colors.text.primary;\n  }\n}\n\n/**\n * Get font weight from theme\n */\nfunction getFontWeight(weight: TypographyWeight, theme: Theme): number {\n  return theme.typography.fontWeight[weight];\n}\n\n// Styled component for the text element\ninterface StyledTextProps {\n  $fontSize: string;\n  $fontWeight: number;\n  $color: string;\n  $uppercase: boolean;\n  $truncate: boolean;\n  $lines: number;\n  $noWrap: boolean;\n  $align?: 'left' | 'center' | 'right';\n}\n\nconst StyledText = styled.span<StyledTextProps>`\n  font-family: ${({ theme }) => (theme as Theme).typography.fontFamily};\n  font-size: ${({ $fontSize }) => $fontSize};\n  font-weight: ${({ $fontWeight }) => $fontWeight};\n  color: ${({ $color }) => $color};\n  text-transform: ${({ $uppercase }) => ($uppercase ? 'uppercase' : 'none')};\n  text-align: ${({ $align }) => $align || 'inherit'};\n  line-height: ${({ theme }) => (theme as Theme).typography.lineHeight.normal};\n  margin: 0;\n  padding: 0;\n\n  ${({ $truncate, $lines, $noWrap }) =>\n    $truncate\n      ? $lines === 1\n        ? css`\n            display: block;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n          `\n        : css`\n            display: -webkit-box;\n            -webkit-line-clamp: ${$lines};\n            -webkit-box-orient: vertical;\n            overflow: hidden;\n            text-overflow: ellipsis;\n          `\n      : $noWrap\n        ? css`\n            white-space: nowrap;\n          `\n        : null}\n`;\n\n/**\n * Extract text content from ReactNode for tooltip\n */\nfunction getTextContent(children: React.ReactNode): string {\n  if (typeof children === 'string') {\n    return children;\n  }\n  if (typeof children === 'number') {\n    return String(children);\n  }\n  if (Array.isArray(children)) {\n    return children.map(getTextContent).join('');\n  }\n  if (isValidElement(children) && children.props) {\n    const props = children.props as { children?: React.ReactNode };\n    return getTextContent(props.children);\n  }\n  return '';\n}\n\n/**\n * Typography component for consistent text styling across the application.\n *\n * Supports pre-defined variants with automatic styling:\n * - `heading`: Page/section titles (semibold, primary, lg)\n * - `label`: Labels and uppercase text (medium, muted, uppercase, xs)\n * - `caption`: Small helper text (muted, xs)\n * - `body`: Default paragraph text (regular, primary, sm)\n * - `error`: Error messages (error color, sm)\n *\n * Features:\n * - Size, weight, and color overrides\n * - Text truncation with automatic Tooltip\n * - Multi-line truncation support\n * - Semantic HTML elements\n *\n * @example\n * ```tsx\n * // Basic variants\n * <Typography variant=\"heading\">Page Title</Typography>\n * <Typography variant=\"label\">Field Label</Typography>\n * <Typography variant=\"caption\">Helper text</Typography>\n * <Typography variant=\"body\">Paragraph text</Typography>\n * <Typography variant=\"error\">Error message</Typography>\n *\n * // Size and weight overrides\n * <Typography variant=\"heading\" size=\"xl\">Large Title</Typography>\n * <Typography variant=\"body\" weight=\"semibold\">Bold text</Typography>\n *\n * // Truncation with automatic tooltip\n * <Typography truncate>Very long text that will be truncated...</Typography>\n *\n * // Multi-line truncation\n * <Typography truncate lines={2}>\n *   Long text that spans multiple lines before being truncated...\n * </Typography>\n *\n * // Custom element\n * <Typography as=\"h1\" variant=\"heading\" size=\"2xl\">Main Heading</Typography>\n * ```\n */\nexport const Typography = forwardRef<HTMLElement, TypographyProps>(\n  (\n    {\n      children,\n      variant = 'body',\n      size,\n      weight,\n      color,\n      uppercase,\n      truncate = false,\n      lines = 1,\n      tooltipContent,\n      disableTooltip = false,\n      as,\n      align,\n      noWrap = false,\n      style,\n      className,\n      dataTestId,\n      dataId,\n      ...rest\n    },\n    ref\n  ) => {\n    const theme = useTheme() as Theme;\n\n    // Resolve effective values using variant defaults and overrides\n    const effectiveSize = size ?? VARIANT_DEFAULT_SIZES[variant];\n    const effectiveWeight = weight ?? VARIANT_DEFAULT_WEIGHTS[variant];\n    const effectiveColor = color ?? VARIANT_DEFAULT_COLORS[variant];\n    const effectiveUppercase = uppercase ?? VARIANT_DEFAULT_UPPERCASE[variant];\n    const effectiveElement = as ?? VARIANT_DEFAULT_ELEMENTS[variant];\n\n    // Get theme values\n    const fontSize = getFontSize(effectiveSize, theme);\n    const fontWeight = getFontWeight(effectiveWeight, theme);\n    const colorValue = getColorValue(effectiveColor, theme);\n\n    // Create the text element\n    const textElement = (\n      <StyledText\n        as={effectiveElement as unknown as undefined}\n        ref={ref as React.Ref<HTMLSpanElement>}\n        $fontSize={fontSize}\n        $fontWeight={fontWeight}\n        $color={colorValue}\n        $uppercase={effectiveUppercase}\n        $truncate={truncate}\n        $lines={lines}\n        $noWrap={noWrap || truncate}\n        $align={align}\n        style={style}\n        className={className}\n        data-testid={dataTestId}\n        data-id={dataId}\n        {...rest}\n      >\n        {children}\n      </StyledText>\n    );\n\n    // If truncation is enabled and tooltip is not disabled, wrap with Tooltip\n    if (truncate && !disableTooltip) {\n      const tooltipText = tooltipContent ?? getTextContent(children);\n      \n      return (\n        <Tooltip\n          content={tooltipText}\n          onlyWhenOverflow\n          position=\"bottom\"\n          maxWidth={400}\n        >\n          {textElement}\n        </Tooltip>\n      );\n    }\n\n    return textElement;\n  }\n);\n\nTypography.displayName = 'Typography';\n\nexport default Typography;\n","import styled from '@emotion/styled';\nimport { css } from '@emotion/react';\nimport { forwardRef } from 'react';\nimport type { ChipProps, ChipVariant, ChipColor, ChipSize } from './Chip.types';\nimport type { Theme } from '../../theme';\n\nconst getSizeStyles = (size: ChipSize) => {\n  switch (size) {\n    case 'small':\n      return css`\n        height: 24px;\n        font-size: 12px;\n        padding: 0 8px;\n        \n        .chip-icon, .chip-avatar {\n          width: 16px;\n          height: 16px;\n          margin-left: -4px;\n          margin-right: 4px;\n        }\n        \n        .chip-delete {\n          width: 16px;\n          height: 16px;\n          margin-left: 4px;\n          margin-right: -4px;\n        }\n      `;\n    case 'large':\n      return css`\n        height: 36px;\n        font-size: 14px;\n        padding: 0 14px;\n        \n        .chip-icon, .chip-avatar {\n          width: 22px;\n          height: 22px;\n          margin-left: -6px;\n          margin-right: 8px;\n        }\n        \n        .chip-delete {\n          width: 20px;\n          height: 20px;\n          margin-left: 8px;\n          margin-right: -6px;\n        }\n      `;\n    case 'medium':\n    default:\n      return css`\n        height: 32px;\n        font-size: 13px;\n        padding: 0 12px;\n        \n        .chip-icon, .chip-avatar {\n          width: 18px;\n          height: 18px;\n          margin-left: -4px;\n          margin-right: 6px;\n        }\n        \n        .chip-delete {\n          width: 18px;\n          height: 18px;\n          margin-left: 6px;\n          margin-right: -4px;\n        }\n      `;\n  }\n};\n\nconst getFilledColorStyles = (color: ChipColor, theme: Theme) => {\n  switch (color) {\n    case 'primary':\n      return css`\n        background-color: ${theme.colors.highlight};\n        color: ${theme.colors.highlightText};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          filter: brightness(0.9);\n        }\n        \n        .chip-delete:hover {\n          background-color: rgba(255, 255, 255, 0.2);\n        }\n      `;\n    case 'success':\n      return css`\n        background-color: ${theme.colors.semantic.green.base};\n        color: ${theme.colors.white};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.semantic.green.dark};\n        }\n        \n        .chip-delete:hover {\n          background-color: rgba(255, 255, 255, 0.2);\n        }\n      `;\n    case 'error':\n      return css`\n        background-color: ${theme.colors.semantic.red.base};\n        color: ${theme.colors.white};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.semantic.red.dark};\n        }\n        \n        .chip-delete:hover {\n          background-color: rgba(255, 255, 255, 0.2);\n        }\n      `;\n    case 'warning':\n      return css`\n        background-color: ${theme.colors.semantic.orange.base};\n        color: ${theme.colors.white};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.semantic.orange.dark};\n        }\n        \n        .chip-delete:hover {\n          background-color: rgba(255, 255, 255, 0.2);\n        }\n      `;\n    case 'info':\n      return css`\n        background-color: ${theme.colors.semantic.blue.lighter};\n        color: ${theme.colors.semantic.blue.dark};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.semantic.blue.light};\n        }\n        \n        .chip-delete:hover {\n          background-color: rgba(0, 0, 0, 0.1);\n        }\n      `;\n    case 'default':\n    default:\n      return css`\n        background-color: ${theme.colors.grey[200]};\n        color: ${theme.colors.grey[800]};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.grey[300]};\n        }\n        \n        .chip-delete:hover {\n          background-color: rgba(0, 0, 0, 0.1);\n        }\n      `;\n  }\n};\n\nconst getOutlinedColorStyles = (color: ChipColor, theme: Theme) => {\n  switch (color) {\n    case 'primary':\n      return css`\n        border-color: ${theme.colors.highlight};\n        color: ${theme.colors.highlight};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.highlight}10;\n        }\n        \n        .chip-delete:hover {\n          background-color: ${theme.colors.highlight}20;\n        }\n      `;\n    case 'success':\n      return css`\n        border-color: ${theme.colors.semantic.green.base};\n        color: ${theme.colors.semantic.green.dark};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.semantic.green.lighter};\n        }\n        \n        .chip-delete:hover {\n          background-color: ${theme.colors.semantic.green.lighter};\n        }\n      `;\n    case 'error':\n      return css`\n        border-color: ${theme.colors.semantic.red.base};\n        color: ${theme.colors.semantic.red.dark};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.semantic.red.lighter};\n        }\n        \n        .chip-delete:hover {\n          background-color: ${theme.colors.semantic.red.lighter};\n        }\n      `;\n    case 'warning':\n      return css`\n        border-color: ${theme.colors.semantic.orange.base};\n        color: ${theme.colors.semantic.orange.dark};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.semantic.orange.lighter};\n        }\n        \n        .chip-delete:hover {\n          background-color: ${theme.colors.semantic.orange.lighter};\n        }\n      `;\n    case 'info':\n      return css`\n        border-color: ${theme.colors.semantic.blue.light};\n        color: ${theme.colors.semantic.blue.dark};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.semantic.blue.lighter};\n        }\n        \n        .chip-delete:hover {\n          background-color: ${theme.colors.semantic.blue.lighter};\n        }\n      `;\n    case 'default':\n    default:\n      return css`\n        border-color: ${theme.colors.grey[300]};\n        color: ${theme.colors.grey[700]};\n        \n        &:hover:not([aria-disabled=\"true\"]) {\n          background-color: ${theme.colors.grey[100]};\n        }\n        \n        .chip-delete:hover {\n          background-color: ${theme.colors.grey[200]};\n        }\n      `;\n  }\n};\n\ninterface ChipContainerProps {\n  variant: ChipVariant;\n  color: ChipColor;\n  size: ChipSize;\n  clickable: boolean;\n  hasDelete: boolean;\n  isDisabled: boolean;\n  $fontSize?: string;\n}\n\nconst ChipContainer = styled.div<ChipContainerProps>`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 16px;\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1;\n  white-space: nowrap;\n  transition: background-color 0.2s, border-color 0.2s, box-shadow 0.2s;\n  box-sizing: border-box;\n  max-width: 100%;\n  \n  ${props => getSizeStyles(props.size)}\n  \n  ${props => props.variant === 'outlined'\n    ? css`\n        background-color: transparent;\n        border: 1px solid;\n        ${getOutlinedColorStyles(props.color, props.theme as Theme)}\n      `\n    : css`\n        border: none;\n        ${getFilledColorStyles(props.color, props.theme as Theme)}\n      `\n  }\n  \n  ${props => props.clickable && css`\n    cursor: pointer;\n    \n    &:focus-visible {\n      outline: none;\n      box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);\n    }\n  `}\n  \n  ${props => props.isDisabled && css`\n    opacity: 0.5;\n    cursor: not-allowed;\n    pointer-events: none;\n  `}\n  \n  ${props => props.$fontSize && css`\n    font-size: ${props.$fontSize};\n  `}\n`;\n\nconst IconWrapper = styled.span`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n`;\n\nconst AvatarWrapper = styled.span`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  border-radius: 50%;\n  overflow: hidden;\n  \n  img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n`;\n\nconst Label = styled.span`\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n`;\n\nconst DeleteButton = styled.button`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: none;\n  border: none;\n  padding: 0;\n  cursor: pointer;\n  border-radius: 50%;\n  color: inherit;\n  opacity: 0.7;\n  transition: opacity 0.2s, background-color 0.2s;\n  flex-shrink: 0;\n  \n  &:hover {\n    opacity: 1;\n  }\n  \n  &:focus-visible {\n    outline: none;\n    opacity: 1;\n  }\n  \n  svg {\n    width: 100%;\n    height: 100%;\n  }\n`;\n\nconst CloseIcon = () => (\n  <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M12 4L4 12M4 4L12 12\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nexport const Chip = forwardRef<HTMLDivElement, ChipProps>(\n  (\n    {\n      label,\n      onDelete,\n      variant = 'filled',\n      color = 'default',\n      size = 'medium',\n      fontSize,\n      icon,\n      avatar,\n      disabled = false,\n      clickable = false,\n      onClick,\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const isClickable = clickable || !!onClick;\n    const hasDelete = !!onDelete;\n\n    const handleClick = () => {\n      if (!disabled && onClick) {\n        onClick();\n      }\n    };\n\n    const handleDelete = (e: React.MouseEvent) => {\n      e.stopPropagation();\n      if (!disabled && onDelete) {\n        onDelete();\n      }\n    };\n\n    const handleKeyDown = (e: React.KeyboardEvent) => {\n      if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault();\n        handleClick();\n      }\n    };\n\n    return (\n      <ChipContainer\n        ref={ref}\n        variant={variant}\n        color={color}\n        size={size}\n        $fontSize={fontSize}\n        clickable={isClickable}\n        hasDelete={hasDelete}\n        isDisabled={disabled}\n        className={className}\n        onClick={handleClick}\n        onKeyDown={isClickable ? handleKeyDown : undefined}\n        tabIndex={isClickable && !disabled ? 0 : undefined}\n        role={isClickable ? 'button' : undefined}\n        aria-disabled={disabled || undefined}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {avatar && (\n          <AvatarWrapper className=\"chip-avatar\" aria-hidden=\"true\">\n            {avatar}\n          </AvatarWrapper>\n        )}\n        {!avatar && icon && (\n          <IconWrapper className=\"chip-icon\" aria-hidden=\"true\">\n            {icon}\n          </IconWrapper>\n        )}\n        <Label>{label}</Label>\n        {onDelete && (\n          <DeleteButton\n            className=\"chip-delete\"\n            onClick={handleDelete}\n            type=\"button\"\n            aria-label=\"Remove\"\n            disabled={disabled}\n          >\n            <CloseIcon />\n          </DeleteButton>\n        )}\n      </ChipContainer>\n    );\n  }\n);\n\nChip.displayName = 'Chip';\n","import styled from '@emotion/styled';\nimport { css, keyframes } from '@emotion/react';\nimport { forwardRef } from 'react';\nimport type { StatusProps, StatusType, StatusSize, StatusVariant } from './Status.types';\nimport type { Theme } from '../../theme';\n\nconst pulse = keyframes`\n  0%, 100% {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0.5;\n  }\n`;\n\nconst getTypeColors = (type: StatusType, theme: Theme) => {\n  switch (type) {\n    case 'success':\n      return {\n        bg: theme.colors.semantic.green.base,\n        bgLight: theme.colors.semantic.green.lighter,\n        text: theme.colors.semantic.green.dark,\n        border: theme.colors.semantic.green.base,\n      };\n    case 'error':\n      return {\n        bg: theme.colors.semantic.red.base,\n        bgLight: theme.colors.semantic.red.lighter,\n        text: theme.colors.semantic.red.dark,\n        border: theme.colors.semantic.red.base,\n      };\n    case 'warning':\n      return {\n        bg: theme.colors.semantic.orange.base,\n        bgLight: theme.colors.semantic.orange.lighter,\n        text: theme.colors.semantic.orange.dark,\n        border: theme.colors.semantic.orange.base,\n      };\n    case 'pending':\n      return {\n        bg: theme.colors.semantic.orange.light,\n        bgLight: theme.colors.semantic.orange.lighter2,\n        text: theme.colors.semantic.orange.dark,\n        border: theme.colors.semantic.orange.light,\n      };\n    case 'info':\n      return {\n        bg: theme.colors.semantic.blue.base,\n        bgLight: theme.colors.semantic.blue.lighter,\n        text: theme.colors.semantic.blue.dark,\n        border: theme.colors.semantic.blue.base,\n      };\n    case 'neutral':\n    default:\n      return {\n        bg: theme.colors.grey[500],\n        bgLight: theme.colors.grey[100],\n        text: theme.colors.grey[700],\n        border: theme.colors.grey[500],\n      };\n  }\n};\n\nconst getSizeStyles = (size: StatusSize, variant: StatusVariant) => {\n  if (variant === 'dot') {\n    switch (size) {\n      case 'small':\n        return css`\n          .status-dot {\n            width: 6px;\n            height: 6px;\n          }\n          font-size: 12px;\n          gap: 6px;\n        `;\n      case 'large':\n        return css`\n          .status-dot {\n            width: 10px;\n            height: 10px;\n          }\n          font-size: 14px;\n          gap: 10px;\n        `;\n      case 'medium':\n      default:\n        return css`\n          .status-dot {\n            width: 8px;\n            height: 8px;\n          }\n          font-size: 13px;\n          gap: 8px;\n        `;\n    }\n  }\n\n  switch (size) {\n    case 'small':\n      return css`\n        height: 20px;\n        font-size: 11px;\n        padding: 0 6px;\n        gap: 4px;\n        \n        .status-icon {\n          width: 12px;\n          height: 12px;\n        }\n      `;\n    case 'large':\n      return css`\n        height: 28px;\n        font-size: 14px;\n        padding: 0 10px;\n        gap: 6px;\n        \n        .status-icon {\n          width: 18px;\n          height: 18px;\n        }\n      `;\n    case 'medium':\n    default:\n      return css`\n        height: 24px;\n        font-size: 12px;\n        padding: 0 8px;\n        gap: 5px;\n        \n        .status-icon {\n          width: 14px;\n          height: 14px;\n        }\n      `;\n  }\n};\n\nconst getVariantStyles = (type: StatusType, variant: StatusVariant, theme: Theme) => {\n  const colors = getTypeColors(type, theme);\n\n  switch (variant) {\n    case 'outlined':\n      return css`\n        background-color: transparent;\n        border: 1px solid ${colors.border};\n        color: ${colors.text};\n        \n        .status-icon {\n          color: ${colors.bg};\n        }\n      `;\n    case 'dot':\n      return css`\n        background-color: transparent;\n        border: none;\n        color: ${colors.text};\n        padding: 0;\n        height: auto;\n        \n        .status-dot {\n          background-color: ${colors.bg};\n        }\n      `;\n    case 'filled':\n    default:\n      return css`\n        background-color: ${colors.bgLight};\n        border: none;\n        color: ${colors.text};\n        \n        .status-icon {\n          color: ${colors.bg};\n        }\n      `;\n  }\n};\n\ninterface StatusContainerProps {\n  theme?: Theme;\n  type: StatusType;\n  size: StatusSize;\n  variant: StatusVariant;\n  isPulsing: boolean;\n}\n\nconst StatusContainer = styled.span<StatusContainerProps>`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 12px;\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1;\n  white-space: nowrap;\n  box-sizing: border-box;\n  \n  ${props => getSizeStyles(props.size, props.variant)}\n  ${props => getVariantStyles(props.type, props.variant, props.theme as Theme)}\n  \n  ${props => props.isPulsing && css`\n    animation: ${pulse} 2s ease-in-out infinite;\n  `}\n`;\n\nconst Dot = styled.span`\n  border-radius: 50%;\n  flex-shrink: 0;\n`;\n\nconst IconWrapper = styled.span`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n`;\n\nconst Label = styled.span`\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n`;\n\nconst SuccessIcon = () => (\n  <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M13.5 4.5L6.5 11.5L3 8\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst ErrorIcon = () => (\n  <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M12 4L4 12M4 4L12 12\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst WarningIcon = () => (\n  <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M8 5.5V8.5M8 11H8.01\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n    <path\n      d=\"M6.86 2.57L1.21 12.29C1.07 12.54 1 12.82 1 13.12C1 13.41 1.07 13.69 1.21 13.94C1.35 14.19 1.55 14.41 1.79 14.56C2.03 14.72 2.31 14.8 2.6 14.8H13.4C13.69 14.8 13.97 14.72 14.21 14.56C14.45 14.41 14.65 14.19 14.79 13.94C14.93 13.69 15 13.41 15 13.12C15 12.82 14.93 12.54 14.79 12.29L9.14 2.57C9 2.32 8.8 2.12 8.56 1.98C8.32 1.84 8.05 1.77 7.77 1.77C7.49 1.77 7.22 1.84 6.98 1.98C6.74 2.12 6.54 2.32 6.4 2.57H6.86Z\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst PendingIcon = () => (\n  <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"2\" />\n    <path\n      d=\"M8 4V8L10.5 10.5\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst InfoIcon = () => (\n  <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"2\" />\n    <path\n      d=\"M8 7V11M8 5H8.01\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst NeutralIcon = () => (\n  <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"2\" />\n    <path\n      d=\"M5 8H11\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n    />\n  </svg>\n);\n\nconst getDefaultIcon = (type: StatusType) => {\n  switch (type) {\n    case 'success':\n      return <SuccessIcon />;\n    case 'error':\n      return <ErrorIcon />;\n    case 'warning':\n      return <WarningIcon />;\n    case 'pending':\n      return <PendingIcon />;\n    case 'info':\n      return <InfoIcon />;\n    case 'neutral':\n    default:\n      return <NeutralIcon />;\n  }\n};\n\nexport const Status = forwardRef<HTMLSpanElement, StatusProps>(\n  (\n    {\n      type,\n      label,\n      size = 'medium',\n      variant = 'filled',\n      icon,\n      showIcon = true,\n      pulse = false,\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const displayIcon = icon !== undefined ? icon : getDefaultIcon(type);\n    const shouldPulse = pulse || type === 'pending';\n\n    return (\n      <StatusContainer\n        ref={ref}\n        type={type}\n        size={size}\n        variant={variant}\n        isPulsing={shouldPulse && variant !== 'dot'}\n        className={className}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {variant === 'dot' ? (\n          <Dot className=\"status-dot\" />\n        ) : (\n          showIcon && displayIcon && (\n            <IconWrapper className=\"status-icon\" aria-hidden=\"true\">\n              {displayIcon}\n            </IconWrapper>\n          )\n        )}\n        {label && <Label>{label}</Label>}\n      </StatusContainer>\n    );\n  }\n);\n\nStatus.displayName = 'Status';\n","import styled from '@emotion/styled';\nimport { css, keyframes } from '@emotion/react';\nimport { forwardRef } from 'react';\nimport type { LinearLoadingProps, LinearLoadingVariant, LinearLoadingColor, LinearLoadingSize } from './LinearLoading.types';\n\nconst indeterminateAnimation = keyframes`\n  0% {\n    left: -40%;\n    right: 100%;\n  }\n  60% {\n    left: 100%;\n    right: -90%;\n  }\n  100% {\n    left: 100%;\n    right: -90%;\n  }\n`;\n\nconst indeterminateAnimation2 = keyframes`\n  0% {\n    left: -200%;\n    right: 100%;\n  }\n  60% {\n    left: 107%;\n    right: -8%;\n  }\n  100% {\n    left: 107%;\n    right: -8%;\n  }\n`;\n\nconst bufferAnimation = keyframes`\n  0% {\n    opacity: 1;\n    background-position: 0 -23px;\n  }\n  60% {\n    opacity: 0;\n    background-position: 0 -23px;\n  }\n  100% {\n    opacity: 1;\n    background-position: -200px -23px;\n  }\n`;\n\nconst getColorValue = (color: LinearLoadingColor) => {\n  switch (color) {\n    case 'success':\n      return 'var(--ib-color-green-500, #22c55e)';\n    case 'error':\n      return 'var(--ib-color-red-500, #ef4444)';\n    case 'warning':\n      return 'var(--ib-color-orange-500, #f97316)';\n    case 'info':\n      return 'var(--ib-color-blue-400, #60a5fa)';\n    case 'primary':\n    default:\n      return 'var(--color-highlight, #F4770B)';\n  }\n};\n\nconst getBackgroundColor = (color: LinearLoadingColor) => {\n  switch (color) {\n    case 'success':\n      return 'var(--ib-color-green-100, #dcfce7)';\n    case 'error':\n      return 'var(--ib-color-red-100, #fee2e2)';\n    case 'warning':\n      return 'var(--ib-color-orange-100, #ffedd5)';\n    case 'info':\n      return 'var(--ib-color-blue-100, #dbeafe)';\n    case 'primary':\n    default:\n      return 'var(--ib-color-orange-100, #FFEEDD)';\n  }\n};\n\nconst getSizeStyles = (size: LinearLoadingSize) => {\n  switch (size) {\n    case 'small':\n      return css`\n        height: 4px;\n      `;\n    case 'large':\n      return css`\n        height: 12px;\n      `;\n    case 'medium':\n    default:\n      return css`\n        height: 8px;\n      `;\n  }\n};\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  width: 100%;\n`;\n\ninterface ProgressContainerProps {\n  size: LinearLoadingSize;\n  bgColor: string;\n}\n\nconst ProgressContainer = styled.div<ProgressContainerProps>`\n  position: relative;\n  overflow: hidden;\n  border-radius: 0;\n  width: 100%;\n  background-color: ${props => props.bgColor};\n  \n  ${props => getSizeStyles(props.size)}\n`;\n\ninterface ProgressBarProps {\n  variant: LinearLoadingVariant;\n  progressColor: string;\n  value: number;\n}\n\nconst ProgressBar = styled.div<ProgressBarProps>`\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  background-color: ${props => props.progressColor};\n  border-radius: 0;\n  transition: width 0.3s ease;\n  \n  ${props => props.variant === 'determinate' \n    ? css`\n        width: ${Math.min(100, Math.max(0, props.value))}%;\n      `\n    : css`\n        width: 50%;\n        animation: ${indeterminateAnimation} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n      `\n  }\n`;\n\ninterface SecondaryBarProps {\n  progressColor: string;\n}\n\nconst SecondaryBar = styled.div<SecondaryBarProps>`\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 50%;\n  background-color: ${props => props.progressColor};\n  border-radius: 0;\n  opacity: 0.4;\n  animation: ${indeterminateAnimation2} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite;\n`;\n\ninterface BufferBarProps {\n  bgColor: string;\n  bufferValue: number;\n}\n\nconst BufferBar = styled.div<BufferBarProps>`\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: ${props => props.bufferValue}%;\n  background-color: ${props => props.bgColor};\n  border-radius: 0;\n  animation: ${bufferAnimation} 3s infinite linear;\n`;\n\nconst LabelContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n`;\n\nconst LabelText = styled.span`\n  font-size: 12px;\n  color: var(--ib-color-grey-600, #4b5563);\n`;\n\nconst PercentageText = styled.span`\n  font-size: 12px;\n  font-weight: 500;\n  color: var(--ib-color-grey-700, #374151);\n`;\n\nexport const LinearLoading = forwardRef<HTMLDivElement, LinearLoadingProps>(\n  (\n    {\n      value = 0,\n      variant = 'indeterminate',\n      color = 'primary',\n      size = 'medium',\n      showLabel = false,\n      label,\n      buffer,\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const progressColor = getColorValue(color);\n    const bgColor = getBackgroundColor(color);\n    const clampedValue = Math.min(100, Math.max(0, value));\n    const hasBuffer = buffer !== undefined && variant === 'determinate';\n\n    return (\n      <Container ref={ref} className={className} data-testid={dataTestId || testId} data-id={dataId}>\n        {showLabel && (\n          <LabelContainer>\n            <LabelText>{label}</LabelText>\n            {variant === 'determinate' && (\n              <PercentageText>{Math.round(clampedValue)}%</PercentageText>\n            )}\n          </LabelContainer>\n        )}\n        <ProgressContainer\n          size={size}\n          bgColor={bgColor}\n          role=\"progressbar\"\n          aria-valuenow={variant === 'determinate' ? clampedValue : undefined}\n          aria-valuemin={0}\n          aria-valuemax={100}\n        >\n          {hasBuffer && (\n            <BufferBar bgColor={bgColor} bufferValue={Math.min(100, Math.max(0, buffer))} />\n          )}\n          <ProgressBar\n            variant={variant}\n            progressColor={progressColor}\n            value={clampedValue}\n          />\n          {variant === 'indeterminate' && (\n            <SecondaryBar progressColor={progressColor} />\n          )}\n        </ProgressContainer>\n      </Container>\n    );\n  }\n);\n\nLinearLoading.displayName = 'LinearLoading';\n","import type { ReactNode } from 'react';\n\n/**\n * Individual dropdown menu item configuration\n */\nexport interface DropdownMenuItem {\n  /** Unique identifier for the menu item */\n  id: string;\n  \n  /** Display text/content for the menu item */\n  displayText: ReactNode;\n  \n  /** Optional icon to display before the text */\n  icon?: ReactNode;\n  \n  /** Click handler for the menu item */\n  onClick?: (value?: unknown) => void;\n  \n  /** Whether the menu item is disabled */\n  disabled?: boolean;\n  \n  /** Whether the menu item is currently selected */\n  selected?: boolean;\n  \n  /** Optional value passed to onClick handler */\n  value?: unknown;\n  \n  /** Whether to show a divider after this item */\n  divider?: boolean;\n  \n  /** Whether the display text should be bold */\n  isBold?: boolean;\n  \n  /**\n   * An invalid item appears disabled but remains hoverable for tooltip\n   * Unlike disabled, which prevents hover interactions\n   */\n  isInvalid?: boolean;\n  \n  /** Tooltip to show for invalid items */\n  invalidTooltip?: ReactNode;\n}\n\n/**\n * Dropdown menu header item (non-interactive section label)\n */\nexport interface DropdownMenuHeader {\n  /** Unique identifier */\n  id: string;\n  \n  /** Header display text */\n  displayText: ReactNode;\n  \n  /** Marks this as a header item */\n  isHeader: true;\n}\n\n/**\n * Dropdown menu divider\n */\nexport interface DropdownMenuDivider {\n  /** Marks this as a divider */\n  type: 'divider';\n}\n\n/**\n * Union type for all item types\n */\nexport type DropdownMenuItemOrDivider = DropdownMenuItem | DropdownMenuHeader | DropdownMenuDivider;\n\n/**\n * Menu type affects hover behavior styling\n */\nexport type DropdownMenuType = 'selection' | 'action' | 'display';\n\n/**\n * Placement options for the dropdown menu\n */\nexport type DropdownMenuPlacement =\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'top-start'\n  | 'top-end';\n\n/**\n * Size variants for the trigger button\n */\nexport type DropdownMenuButtonSize = 'xs' | 'sm' | 'md';\n\n/**\n * Font size variants for menu items\n */\nexport type DropdownMenuFontSize = 'xs' | 'sm' | 'md';\n\n/**\n * Props for the DropdownMenu component\n */\nexport interface DropdownMenuProps {\n  /** Array of menu items, headers, and dividers */\n  items: DropdownMenuItemOrDivider[];\n  \n  /** Custom trigger element (defaults to vertical dots icon button) */\n  trigger?: ReactNode;\n  \n  /** Controlled open state */\n  open?: boolean;\n  \n  /** Callback when open state changes */\n  onOpenChange?: (open: boolean) => void;\n  \n  /** Menu placement relative to trigger */\n  placement?: DropdownMenuPlacement;\n  \n  /** Whether the trigger is disabled */\n  disabled?: boolean;\n  \n  /** Menu type affects hover styling */\n  type?: DropdownMenuType;\n  \n  /** Optional title shown at top of menu */\n  title?: string;\n  \n  /** Size of the default trigger button */\n  buttonSize?: DropdownMenuButtonSize;\n  \n  /** Whether to use inverse (light on dark) styling */\n  inverse?: boolean;\n  \n  /** Width of the menu list */\n  menuListWidth?: string;\n  \n  /** Max height of the menu list (for scrolling) */\n  menuListHeight?: string;\n  \n  /** Height of individual menu items */\n  menuItemHeight?: string;\n  \n  /** Whether menu should match trigger width */\n  useContainerWidth?: boolean;\n  \n  /** Tab index for the trigger button */\n  buttonTabIndex?: number;\n  \n  /** Callback when menu opens */\n  onOpen?: () => void;\n  \n  /** Callback when menu closes */\n  onClose?: () => void;\n  \n  /** Additional CSS class */\n  className?: string;\n  \n  /** Test identifier for automated testing */\n  dataTestId?: string;\n  \n  /** Data identifier for ib-ui compatibility */\n  dataId?: string;\n  \n  /** Font size for menu items */\n  fontSize?: DropdownMenuFontSize;\n  \n  /** ARIA label for the menu */\n  'aria-label'?: string;\n}\n\n/**\n * Type guard to check if item is a divider\n */\nexport function isDivider(item: DropdownMenuItemOrDivider): item is DropdownMenuDivider {\n  return 'type' in item && item.type === 'divider';\n}\n\n/**\n * Type guard to check if item is a header\n */\nexport function isHeader(item: DropdownMenuItemOrDivider): item is DropdownMenuHeader {\n  return 'isHeader' in item && item.isHeader === true;\n}\n\n/**\n * Type guard to check if item is a regular menu item\n */\nexport function isMenuItem(item: DropdownMenuItemOrDivider): item is DropdownMenuItem {\n  return !isDivider(item) && !isHeader(item);\n}\n","import {\n  forwardRef,\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  cloneElement,\n  isValidElement,\n} from 'react';\nimport styled from '@emotion/styled';\nimport type {\n  DropdownMenuProps,\n  DropdownMenuPlacement,\n  DropdownMenuType,\n  DropdownMenuFontSize,\n  DropdownMenuItem,\n} from './DropdownMenu.types';\nimport { isDivider, isHeader, isMenuItem } from './DropdownMenu.types';\n\n/**\n * Container for dropdown menu\n */\nconst Container = styled.div`\n  position: relative;\n  display: inline-block;\n`;\n\n/**\n * Trigger wrapper for consistent styling\n */\nconst TriggerWrapper = styled.div`\n  display: inline-flex;\n`;\n\n/**\n * Default trigger button (vertical dots icon)\n */\nconst DefaultTriggerButton = styled.button<{\n  $inverse: boolean;\n  $disabled: boolean;\n  $size: 'xs' | 'sm' | 'md';\n}>`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  background: transparent;\n  border: none;\n  cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};\n  opacity: ${({ $disabled }) => ($disabled ? 0.5 : 1)};\n  padding: ${({ $size }) => {\n    switch ($size) {\n      case 'xs': return '4px';\n      case 'sm': return '6px';\n      case 'md': default: return '8px';\n    }\n  }};\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  color: ${({ $inverse, theme }) => ($inverse ? theme.colors.white : theme.colors.text.secondary)};\n  transition: ${({ theme }) => theme.transitions.fast};\n\n  &:hover:not(:disabled) {\n    background-color: ${({ theme }) => theme.colors.background.hover};\n  }\n\n  &:focus {\n    outline: none;\n  }\n\n  &:focus-visible {\n    outline: 2px solid ${({ theme }) => theme.colors.highlight};\n    outline-offset: 2px;\n  }\n`;\n\n/**\n * Three dots icon for default trigger\n */\nconst MoreVertIcon = () => (\n  <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n    <circle cx=\"12\" cy=\"5\" r=\"2\" />\n    <circle cx=\"12\" cy=\"12\" r=\"2\" />\n    <circle cx=\"12\" cy=\"19\" r=\"2\" />\n  </svg>\n);\n\n/**\n * Get placement styles for the menu panel\n */\nconst getPlacementStyles = (placement: DropdownMenuPlacement) => {\n  switch (placement) {\n    case 'bottom-end':\n      return `\n        top: 100%;\n        right: 0;\n        margin-top: 4px;\n      `;\n    case 'top-start':\n      return `\n        bottom: 100%;\n        left: 0;\n        margin-bottom: 4px;\n      `;\n    case 'top-end':\n      return `\n        bottom: 100%;\n        right: 0;\n        margin-bottom: 4px;\n      `;\n    case 'bottom-start':\n    default:\n      return `\n        top: 100%;\n        left: 0;\n        margin-top: 4px;\n      `;\n  }\n};\n\n/**\n * Menu panel that appears on trigger click\n */\nconst MenuPanel = styled.div<{\n  $placement: DropdownMenuPlacement;\n  $isOpen: boolean;\n  $width?: string;\n}>`\n  position: absolute;\n  z-index: 1500;\n  ${({ $placement }) => getPlacementStyles($placement)}\n  \n  min-width: 136px;\n  ${({ $width }) => $width && `width: ${$width};`}\n  \n  background-color: ${({ theme }) => theme.colors.background.default};\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  box-shadow: ${({ theme }) => theme.shadows.menu};\n  \n  opacity: ${({ $isOpen }) => ($isOpen ? 1 : 0)};\n  visibility: ${({ $isOpen }) => ($isOpen ? 'visible' : 'hidden')};\n  transform: ${({ $isOpen }) => ($isOpen ? 'translateY(0)' : 'translateY(-4px)')};\n  transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;\n  \n  overflow: hidden;\n`;\n\n/**\n * Menu title header\n */\nconst MenuTitleWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  background: ${({ theme }) => theme.colors.grey[100]};\n  height: 32px;\n  padding-left: 12px;\n  border-top-left-radius: ${({ theme }) => theme.borders.radius.sm};\n  border-top-right-radius: ${({ theme }) => theme.borders.radius.sm};\n`;\n\n/**\n * Section header wrapper\n */\nconst SectionHeaderWrapper = styled.div<{ $first: boolean }>`\n  display: flex;\n  align-items: center;\n  background: ${({ theme }) => theme.colors.grey[100]};\n  padding: 8px 16px;\n  ${({ $first }) => $first && 'margin-top: -4px;'}\n`;\n\n/**\n * Header/title text\n */\nconst HeaderText = styled.span`\n  font-size: ${({ theme }) => theme.typography.fontSize.sm};\n  color: ${({ theme }) => theme.colors.text.secondary};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n`;\n\n/**\n * Menu list container\n */\nconst MenuList = styled.ul<{ $width?: string; $height?: string }>`\n  list-style: none;\n  margin: 0;\n  padding: 4px 0;\n  ${({ $width }) => $width && `width: ${$width};`}\n  ${({ $height }) => $height && `max-height: ${$height}; overflow-y: auto;`}\n`;\n\n/**\n * Get font size value based on size option\n */\nconst getFontSize = (size: DropdownMenuFontSize, theme: any) => {\n  switch (size) {\n    case 'xs': return theme.typography.fontSize.xs;\n    case 'sm': return theme.typography.fontSize.sm;\n    case 'md': return theme.typography.fontSize.md;\n    default: return theme.typography.fontSize.sm;\n  }\n};\n\n/**\n * Individual menu item\n */\nconst MenuItemButton = styled.li<{\n  $type: DropdownMenuType;\n  $disabled: boolean;\n  $selected: boolean;\n  $isInvalid: boolean;\n  $isBold: boolean;\n  $isFocused: boolean;\n  $itemHeight?: string;\n  $fontSize: DropdownMenuFontSize;\n}>`\n  display: flex;\n  align-items: center;\n  width: 100%;\n  height: ${({ $itemHeight }) => $itemHeight || '36px'};\n  padding: 0 12px;\n  font-size: ${({ $fontSize, theme }) => getFontSize($fontSize, theme)};\n  font-weight: ${({ $isBold, theme }) => \n    $isBold ? theme.typography.fontWeight.semibold : theme.typography.fontWeight.regular};\n  color: ${({ $disabled, $isInvalid, theme }) =>\n    $disabled || $isInvalid ? theme.colors.text.muted : theme.colors.text.primary};\n  cursor: ${({ $disabled, $isInvalid }) =>\n    $disabled || $isInvalid ? 'not-allowed' : 'pointer'};\n  background-color: ${({ $selected, theme }) =>\n    $selected ? `${theme.colors.highlight}30` : 'transparent'};\n  transition: ${({ theme }) => theme.transitions.fast};\n  \n  /* Focused state (keyboard navigation) */\n  ${({ $isFocused, theme }) =>\n    $isFocused &&\n    `\n    outline: 2px solid ${theme.colors.highlight};\n    outline-offset: -2px;\n  `}\n  \n  /* Hover state based on type */\n  &:hover {\n    ${({ $disabled, $isInvalid, $type, theme }) => {\n      if ($disabled || $isInvalid) {\n        return 'background-color: transparent;';\n      }\n      \n      switch ($type) {\n        case 'selection':\n          return `\n            background-color: ${theme.colors.highlight};\n            color: ${theme.colors.highlightText};\n            \n            /* Also change icon color on hover */\n            span {\n              color: ${theme.colors.highlightText};\n            }\n          `;\n        case 'action':\n          return `\n            background-color: ${theme.colors.background.hover};\n          `;\n        case 'display':\n        default:\n          return '';\n      }\n    }}\n  }\n`;\n\n/**\n * Icon wrapper for menu items\n */\nconst IconWrapper = styled.span`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: ${({ theme }) => theme.colors.text.secondary};\n  margin-right: 8px;\n  \n  svg {\n    width: 16px;\n    height: 16px;\n  }\n`;\n\n/**\n * Divider between sections\n */\nconst Divider = styled.li`\n  height: 1px;\n  margin: 4px 0;\n  background-color: ${({ theme }) => theme.colors.border.light};\n`;\n\n/**\n * DropdownMenu component - A flexible dropdown menu with keyboard navigation\n *\n * @example\n * ```tsx\n * // Basic usage with custom trigger\n * <DropdownMenu\n *   trigger={<Button>Actions</Button>}\n *   items={[\n *     { id: 'edit', displayText: 'Edit', onClick: handleEdit },\n *     { id: 'delete', displayText: 'Delete', onClick: handleDelete },\n *   ]}\n * />\n *\n * // With icons and dividers\n * <DropdownMenu\n *   items={[\n *     { id: 'copy', displayText: 'Copy', icon: <CopyIcon /> },\n *     { type: 'divider' },\n *     { id: 'delete', displayText: 'Delete', disabled: true },\n *   ]}\n *   placement=\"bottom-end\"\n * />\n * ```\n */\nexport const DropdownMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(\n  (\n    {\n      items,\n      trigger,\n      open: controlledOpen,\n      onOpenChange,\n      placement = 'bottom-end',\n      disabled = false,\n      type = 'action',\n      title,\n      buttonSize = 'md',\n      inverse = false,\n      menuListWidth,\n      menuListHeight,\n      menuItemHeight,\n      useContainerWidth = false,\n      buttonTabIndex,\n      onOpen,\n      onClose,\n      className,\n      dataTestId,\n      dataId,\n      fontSize = 'sm',\n      'aria-label': ariaLabel = 'Menu',\n    },\n    ref\n  ) => {\n    const [internalOpen, setInternalOpen] = useState(false);\n    const [focusedIndex, setFocusedIndex] = useState(-1);\n    const [isKeyboardNav, setIsKeyboardNav] = useState(false);\n    \n    const isControlled = controlledOpen !== undefined;\n    const isOpen = isControlled ? controlledOpen : internalOpen;\n    \n    const containerRef = useRef<HTMLDivElement>(null);\n    const triggerRef = useRef<HTMLButtonElement>(null);\n    const menuRef = useRef<HTMLUListElement>(null);\n    const itemRefs = useRef<Map<number, HTMLLIElement>>(new Map());\n    \n    // Get only interactive menu items (not headers or dividers)\n    const menuItems = items.filter(isMenuItem) as DropdownMenuItem[];\n    const enabledItems = menuItems.filter(item => !item.disabled && !item.isInvalid);\n    \n    const setIsOpen = useCallback(\n      (open: boolean) => {\n        if (!isControlled) {\n          setInternalOpen(open);\n        }\n        onOpenChange?.(open);\n        \n        if (open) {\n          onOpen?.();\n        } else {\n          onClose?.();\n          setFocusedIndex(-1);\n          setIsKeyboardNav(false);\n        }\n      },\n      [isControlled, onOpenChange, onOpen, onClose]\n    );\n    \n    const handleTriggerClick = useCallback(\n      (event: React.MouseEvent) => {\n        event.preventDefault();\n        event.stopPropagation();\n        if (!disabled) {\n          setIsOpen(!isOpen);\n        }\n      },\n      [disabled, isOpen, setIsOpen]\n    );\n    \n    const handleTriggerKeyDown = useCallback(\n      (event: React.KeyboardEvent) => {\n        if (event.key === 'Enter' || event.key === ' ') {\n          event.preventDefault();\n          if (!disabled) {\n            setIsKeyboardNav(true);\n            setIsOpen(!isOpen);\n          }\n        } else if (event.key === 'Escape' && isOpen) {\n          event.preventDefault();\n          setIsOpen(false);\n          triggerRef.current?.focus();\n        }\n      },\n      [disabled, isOpen, setIsOpen]\n    );\n    \n    const handleItemClick = useCallback(\n      (item: DropdownMenuItem) => {\n        if (item.disabled || item.isInvalid) return;\n        \n        item.onClick?.(item.value);\n        setIsOpen(false);\n        setTimeout(() => triggerRef.current?.focus(), 0);\n      },\n      [setIsOpen]\n    );\n    \n    const handleItemKeyDown = useCallback(\n      (event: React.KeyboardEvent, item: DropdownMenuItem) => {\n        if (event.key === 'Enter' || event.key === ' ') {\n          event.preventDefault();\n          event.stopPropagation();\n          if (!item.disabled && !item.isInvalid) {\n            handleItemClick(item);\n          }\n        }\n      },\n      [handleItemClick]\n    );\n    \n    // Click outside to close\n    useEffect(() => {\n      if (!isOpen) return;\n      \n      const handleClickOutside = (event: MouseEvent) => {\n        if (\n          containerRef.current &&\n          !containerRef.current.contains(event.target as Node)\n        ) {\n          setIsOpen(false);\n        }\n      };\n      \n      document.addEventListener('mousedown', handleClickOutside);\n      return () => document.removeEventListener('mousedown', handleClickOutside);\n    }, [isOpen, setIsOpen]);\n    \n    // Keyboard navigation for menu\n    useEffect(() => {\n      if (!isOpen) return;\n      \n      const handleKeyDown = (event: KeyboardEvent) => {\n        switch (event.key) {\n          case 'Escape':\n            event.preventDefault();\n            setIsOpen(false);\n            triggerRef.current?.focus();\n            break;\n            \n          case 'ArrowDown':\n            event.preventDefault();\n            setIsKeyboardNav(true);\n            setFocusedIndex(prev => {\n              const enabledIndices = menuItems\n                .map((item, idx) => ({ item, idx }))\n                .filter(({ item }) => !item.disabled && !item.isInvalid)\n                .map(({ idx }) => idx);\n              \n              if (enabledIndices.length === 0) return -1;\n              \n              const currentPos = enabledIndices.indexOf(prev);\n              const nextPos = currentPos === -1 || currentPos === enabledIndices.length - 1\n                ? 0\n                : currentPos + 1;\n              \n              return enabledIndices[nextPos] ?? -1;\n            });\n            break;\n            \n          case 'ArrowUp':\n            event.preventDefault();\n            setIsKeyboardNav(true);\n            setFocusedIndex(prev => {\n              const enabledIndices = menuItems\n                .map((item, idx) => ({ item, idx }))\n                .filter(({ item }) => !item.disabled && !item.isInvalid)\n                .map(({ idx }) => idx);\n              \n              if (enabledIndices.length === 0) return -1;\n              \n              const currentPos = enabledIndices.indexOf(prev);\n              const nextPos = currentPos === -1 || currentPos === 0\n                ? enabledIndices.length - 1\n                : currentPos - 1;\n              \n              return enabledIndices[nextPos] ?? -1;\n            });\n            break;\n            \n          case 'Home':\n            event.preventDefault();\n            setIsKeyboardNav(true);\n            {\n              const firstEnabled = menuItems.findIndex(item => !item.disabled && !item.isInvalid);\n              if (firstEnabled !== -1) setFocusedIndex(firstEnabled);\n            }\n            break;\n            \n          case 'End':\n            event.preventDefault();\n            setIsKeyboardNav(true);\n            {\n              const lastEnabled = [...menuItems].reverse().findIndex(item => !item.disabled && !item.isInvalid);\n              if (lastEnabled !== -1) setFocusedIndex(menuItems.length - 1 - lastEnabled);\n            }\n            break;\n        }\n      };\n      \n      document.addEventListener('keydown', handleKeyDown);\n      return () => document.removeEventListener('keydown', handleKeyDown);\n    }, [isOpen, menuItems, setIsOpen]);\n    \n    // Focus menu item when index changes via keyboard\n    useEffect(() => {\n      if (isOpen && isKeyboardNav && focusedIndex >= 0) {\n        const element = itemRefs.current.get(focusedIndex);\n        element?.focus();\n      }\n    }, [isOpen, isKeyboardNav, focusedIndex]);\n    \n    // Focus first item when opened via keyboard\n    useEffect(() => {\n      if (isOpen && isKeyboardNav && focusedIndex === -1 && enabledItems.length > 0) {\n        const firstEnabledIndex = menuItems.findIndex(item => !item.disabled && !item.isInvalid);\n        if (firstEnabledIndex !== -1) {\n          setFocusedIndex(firstEnabledIndex);\n        }\n      }\n    }, [isOpen, isKeyboardNav, focusedIndex, menuItems, enabledItems.length]);\n    \n    const setItemRef = useCallback(\n      (index: number, element: HTMLLIElement | null) => {\n        if (element) {\n          itemRefs.current.set(index, element);\n        } else {\n          itemRefs.current.delete(index);\n        }\n      },\n      []\n    );\n    \n    // Build trigger element\n    const triggerElement = trigger ? (\n      isValidElement(trigger) ? (\n        cloneElement(trigger as React.ReactElement<any>, {\n          onClick: (e: React.MouseEvent) => {\n            (trigger as React.ReactElement<any>).props?.onClick?.(e);\n            handleTriggerClick(e);\n          },\n          onKeyDown: (e: React.KeyboardEvent) => {\n            (trigger as React.ReactElement<any>).props?.onKeyDown?.(e);\n            handleTriggerKeyDown(e);\n          },\n          ref: triggerRef,\n          'aria-haspopup': 'menu',\n          'aria-expanded': isOpen,\n          disabled: disabled,\n          tabIndex: buttonTabIndex,\n        })\n      ) : trigger\n    ) : (\n      <DefaultTriggerButton\n        ref={triggerRef}\n        onClick={handleTriggerClick}\n        onKeyDown={handleTriggerKeyDown}\n        disabled={disabled}\n        $inverse={inverse}\n        $disabled={disabled}\n        $size={buttonSize}\n        aria-haspopup=\"menu\"\n        aria-expanded={isOpen}\n        aria-label=\"Open menu\"\n        tabIndex={buttonTabIndex}\n      >\n        <MoreVertIcon />\n      </DefaultTriggerButton>\n    );\n    \n    // Track menu item index\n    let menuItemIndex = 0;\n    \n    return (\n      <Container\n        ref={(node) => {\n          (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n          if (typeof ref === 'function') {\n            ref(node);\n          } else if (ref) {\n            ref.current = node;\n          }\n        }}\n        className={className}\n        data-testid={dataTestId}\n        data-id={dataId}\n      >\n        <TriggerWrapper>{triggerElement}</TriggerWrapper>\n        \n        <MenuPanel\n          role=\"menu\"\n          aria-label={ariaLabel}\n          $placement={placement}\n          $isOpen={isOpen}\n          $width={useContainerWidth && triggerRef.current ? `${triggerRef.current.clientWidth}px` : undefined}\n        >\n          {title && (\n            <MenuTitleWrapper>\n              <HeaderText>{title}</HeaderText>\n            </MenuTitleWrapper>\n          )}\n          \n          <MenuList\n            ref={menuRef}\n            $width={menuListWidth}\n            $height={menuListHeight}\n          >\n            {items.map((item, index) => {\n              // Divider\n              if (isDivider(item)) {\n                return (\n                  <Divider\n                    key={`divider-${index}`}\n                    role=\"separator\"\n                    aria-orientation=\"horizontal\"\n                  />\n                );\n              }\n              \n              // Header\n              if (isHeader(item)) {\n                return (\n                  <SectionHeaderWrapper\n                    key={`header-${item.id}`}\n                    $first={index === 0}\n                  >\n                    <HeaderText>{item.displayText}</HeaderText>\n                  </SectionHeaderWrapper>\n                );\n              }\n              \n              // Regular menu item\n              const currentIndex = menuItemIndex++;\n              const isFocused = currentIndex === focusedIndex && isKeyboardNav;\n              \n              return (\n                <MenuItemButton\n                  key={item.id}\n                  ref={(el) => setItemRef(currentIndex, el)}\n                  role=\"menuitem\"\n                  tabIndex={isFocused ? 0 : -1}\n                  aria-disabled={item.disabled || item.isInvalid}\n                  onClick={() => handleItemClick(item)}\n                  onKeyDown={(e) => handleItemKeyDown(e, item)}\n                  onMouseEnter={() => {\n                    setIsKeyboardNav(false);\n                    setFocusedIndex(currentIndex);\n                  }}\n                  $type={type}\n                  $disabled={item.disabled ?? false}\n                  $selected={item.selected ?? false}\n                  $isInvalid={item.isInvalid ?? false}\n                  $isBold={item.isBold ?? false}\n                  $isFocused={isFocused}\n                  $itemHeight={menuItemHeight}\n                  $fontSize={fontSize}\n                >\n                  {item.icon && <IconWrapper>{item.icon}</IconWrapper>}\n                  {item.displayText}\n                </MenuItemButton>\n              );\n            })}\n          </MenuList>\n        </MenuPanel>\n      </Container>\n    );\n  }\n);\n\nDropdownMenu.displayName = 'DropdownMenu';\n\nexport default DropdownMenu;\n","import styled from '@emotion/styled';\nimport { cloneElement, isValidElement, useMemo } from 'react';\n\nimport { Button } from '../Button';\nimport { DropdownMenu } from '../DropdownMenu';\nimport type { DropdownMenuItemOrDivider } from '../DropdownMenu';\nimport type { Action, ActionMenuButtonsProps, ActionMenuGapSize } from './ActionMenuButtons.types';\n\n/**\n * Container for action menu buttons with configurable gap\n * Matches ib-ui MenuButtonsContainer styled component\n */\nconst MenuButtonsContainer = styled.div<{ $gapSize: ActionMenuGapSize }>`\n  display: flex;\n  align-items: center;\n\n  .action-button {\n    display: flex;\n  }\n\n  .dropdown-menu {\n    display: flex;\n    align-items: center;\n  }\n\n  ${({ $gapSize }) => {\n    switch ($gapSize) {\n      case 'xs':\n        return `gap: 8px;`;\n      case 'sm':\n        return `gap: 12px;`;\n      case 'lg':\n        return `gap: 18px;`;\n      case 'md':\n      default:\n        return `gap: 16px;`;\n    }\n  }}\n`;\n\n/**\n * Grey color for dropdown icons (matches ib-ui grey600)\n */\nconst GREY_600 = '#6b7280';\n\n/**\n * Format aria-label from various input types\n * Matches ib-ui formatAriaLabel function\n */\nfunction formatAriaLabel(ariaLabel: unknown, displayText: unknown): string {\n  const ariaToUse = ariaLabel || displayText;\n\n  if (typeof ariaToUse === 'string') {\n    return ariaToUse;\n  }\n\n  return 'Action Menu Button';\n}\n\n/**\n * ActionMenuButtons displays a row of primary action buttons with an optional\n * dropdown menu for secondary actions.\n *\n * This component matches the ib-ui ActionMenuButtons API exactly.\n *\n * Primary actions are rendered as icon-only buttons.\n * Secondary actions appear in a dropdown menu.\n *\n * @example\n * ```tsx\n * <ActionMenuButtons\n *   actions={[\n *     { id: 'download', displayText: 'Download', icon: <DownloadIcon />, onClick: handleDownload },\n *     { id: 'add', displayText: 'Add', icon: <AddIcon />, onClick: handleAdd },\n *     { id: 'delete', displayText: 'Delete', icon: <DeleteIcon />, onClick: handleDelete },\n *   ]}\n *   primaryActions={['download', 'add']}\n * />\n * ```\n */\nexport function ActionMenuButtons({\n  actions = [],\n  dropdownMenuType,\n  menuDataId,\n  menuDisabled,\n  primaryActions = [],\n  showDropdownActionIcon = false,\n  gapSize = 'sm',\n  buttonSize = 'md',\n  inverse = false,\n  menuIcon,\n  buttonVariant = 'ghost',\n  buttonTabIndex,\n  ...props\n}: ActionMenuButtonsProps) {\n  // Separate actions into primary (buttons) and secondary (dropdown)\n  const { primaryMenuButtons, secondaryMenuButtons } = useMemo(() => {\n    const primary = actions.filter(({ id }) => primaryActions.includes(id));\n    const secondary = actions.filter(({ id }) => !primaryActions.includes(id));\n    return { primaryMenuButtons: primary, secondaryMenuButtons: secondary };\n  }, [primaryActions, actions]);\n\n  // Convert secondary actions to dropdown menu items\n  const dropdownItems: DropdownMenuItemOrDivider[] = useMemo(() => {\n    return secondaryMenuButtons.map((item) => {\n      // Clone icon with grey color if showDropdownActionIcon is true\n      let iconToUse = undefined;\n      if (showDropdownActionIcon && item.icon && isValidElement(item.icon)) {\n        iconToUse = cloneElement(item.icon as React.ReactElement<{ color?: string }>, {\n          color: GREY_600,\n        });\n      } else if (showDropdownActionIcon && item.icon) {\n        iconToUse = item.icon;\n      }\n\n      return {\n        id: item.id,\n        displayText: item.displayText,\n        icon: iconToUse,\n        onClick: item.onClick,\n        disabled: item.disabled,\n        selected: item.selected,\n        value: item.value,\n        divider: item.divider,\n        'data-testid': item.dataTestId,\n      };\n    });\n  }, [secondaryMenuButtons, showDropdownActionIcon]);\n\n  // Create custom trigger if menuIcon is provided\n  const customTrigger = useMemo(() => {\n    if (!menuIcon) return undefined;\n\n    return (\n      <Button\n        icon={menuIcon}\n        variant={inverse ? 'ghostInverse' : 'ghost'}\n        size={buttonSize}\n        disabled={menuDisabled}\n        aria-label=\"Toggle menu\"\n        tabIndex={buttonTabIndex}\n      />\n    );\n  }, [menuIcon, inverse, buttonSize, menuDisabled, buttonTabIndex]);\n\n  // Return null if no actions\n  if (actions.length === 0) {\n    return null;\n  }\n\n  return (\n    <MenuButtonsContainer data-testid=\"primary-actions\" $gapSize={gapSize} {...props}>\n      {/* Primary action buttons - icon only */}\n      {primaryMenuButtons.map(\n        (\n          { icon, dataId, disabled, onClick, tooltip, ariaLabel, dataTestId, displayText }: Action,\n          index: number,\n        ) => (\n          <Button\n            key={`${dataId}-${index}`}\n            disabled={disabled || menuDisabled}\n            icon={icon}\n            variant={buttonVariant}\n            data-id={dataId}\n            data-testid={dataTestId}\n            tooltip={tooltip}\n            onClick={onClick as React.MouseEventHandler<HTMLButtonElement>}\n            size={buttonSize}\n            aria-label={formatAriaLabel(ariaLabel, displayText)}\n            tabIndex={buttonTabIndex}\n          />\n        ),\n      )}\n\n      {/* Secondary actions dropdown */}\n      {secondaryMenuButtons.length > 0 && (\n        <DropdownMenu\n          className=\"dropdown-menu\"\n          disabled={menuDisabled}\n          menuButtonDataId={menuDataId}\n          inverse={inverse}\n          buttonSize={buttonSize}\n          buttonTabIndex={buttonTabIndex}\n          items={dropdownItems}\n          type={dropdownMenuType}\n          trigger={customTrigger}\n        />\n      )}\n    </MenuButtonsContainer>\n  );\n}\n\nexport default ActionMenuButtons;\n","import type { ButtonVariant } from '../Button';\nimport type { ReactNode } from 'react';\n\n/**\n * Individual action configuration\n * Matches ib-ui Action interface exactly\n */\nexport interface Action {\n  /** Whether the action is disabled */\n  disabled?: boolean;\n  /** Display text for the action button or menu item */\n  displayText: ReactNode;\n  /** Show divider after this action in dropdown */\n  divider?: boolean;\n  /** Optional icon to display */\n  icon?: ReactNode;\n  /** Unique identifier for the action */\n  id: string;\n  /** Click handler */\n  onClick?: (_props: unknown) => void;\n  /** Whether the action is currently selected */\n  selected?: boolean;\n  /** Tooltip content */\n  tooltip?: ReactNode;\n  /** Optional value passed to onClick handler */\n  value?: unknown;\n  /** Data attribute for testing/tracking */\n  dataId?: string;\n  /** Test ID for testing */\n  dataTestId?: string;\n  /** Aria label for accessibility */\n  ariaLabel?: string;\n}\n\n/**\n * Gap size options between action buttons\n */\nexport type ActionMenuGapSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/**\n * Props for the ActionMenuButtons component\n * Matches ib-ui ActionMenuButtonProps interface exactly\n */\nexport interface ActionMenuButtonsProps {\n  /** Array of all actions */\n  actions?: Action[];\n  /** Type of dropdown menu (affects hover styling) */\n  dropdownMenuType?: 'selection' | 'action';\n  /** Data attribute for the dropdown menu button */\n  menuDataId?: string;\n  /** IDs of actions to show as primary buttons (not in dropdown) */\n  primaryActions?: string[];\n  /** Whether to show icons in the dropdown menu items */\n  showDropdownActionIcon?: boolean;\n  /** Gap size between buttons */\n  gapSize?: ActionMenuGapSize;\n  /** Size of buttons (xs, sm, md) */\n  buttonSize?: 'xs' | 'sm' | 'md';\n  /** Whether to use inverse styling (light on dark) */\n  inverse?: boolean;\n  /** Whether the entire menu is disabled */\n  menuDisabled?: boolean;\n  /** Custom icon for the dropdown menu */\n  menuIcon?: ReactNode;\n  /** Whether primary actions should be outlined (not implemented) */\n  outlinedPrimaryActions?: boolean;\n  /** Variant of primary action buttons */\n  buttonVariant?: ButtonVariant;\n  /**\n   * Tab index for action buttons. Use -1 to remove from tab order.\n   * Useful when implementing keyboard navigation patterns like roving tabindex.\n   */\n  buttonTabIndex?: number;\n}\n\n/**\n * Gap size to pixel mapping\n */\nexport const gapSizeMap: Record<ActionMenuGapSize, number> = {\n  xs: 8,\n  sm: 12,\n  md: 16,\n  lg: 18,\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport styled from '@emotion/styled';\nimport { css } from '@emotion/react';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport type {\n  DataContainerCardProps,\n  DataContainerCardBorderRadius,\n  DataContainerCardShadow,\n  DataContainerCardContentPadding,\n} from './DataContainerCard.types';\n\n/**\n * Maps border radius prop to CSS value\n */\nconst getBorderRadius = (radius: DataContainerCardBorderRadius, theme: Record<string, unknown>): string => {\n  const themeRadius = theme.borders as { radius: { sm: string; md: string; lg: string } };\n  switch (radius) {\n    case 'none':\n      return '0';\n    case 'sm':\n      return themeRadius.radius.sm;\n    case 'md':\n      return themeRadius.radius.md;\n    case 'lg':\n      return '12px';\n    default:\n      return '0';\n  }\n};\n\n/**\n * Maps shadow prop to CSS value\n */\nconst getShadow = (shadow: DataContainerCardShadow): string => {\n  switch (shadow) {\n    case 'none':\n      return 'none';\n    case 'sm':\n      return '0 1px 3px rgba(0, 0, 0, 0.08)';\n    case 'md':\n      return '0 2px 8px rgba(0, 0, 0, 0.12)';\n    case 'lg':\n      return '0 4px 16px rgba(0, 0, 0, 0.16)';\n    default:\n      return 'none';\n  }\n};\n\n/**\n * Maps content padding prop to CSS value\n */\nconst getContentPadding = (padding: DataContainerCardContentPadding, isChild: boolean): string => {\n  if (isChild) {\n    switch (padding) {\n      case 'none':\n        return '0';\n      case 'sm':\n        return '8px 8px 8px 8px';\n      case 'md':\n        return '12px 10px 10px 10px';\n      default:\n        return '12px 10px 10px 10px';\n    }\n  }\n  switch (padding) {\n    case 'none':\n      return '0';\n    case 'sm':\n      return '8px 8px 8px 8px';\n    case 'md':\n      return '16px 12px 12px 12px';\n    default:\n      return '16px 12px 12px 12px';\n  }\n};\n\ninterface ContainerStyleProps {\n  $borderRadius: DataContainerCardBorderRadius;\n  $shadow: DataContainerCardShadow;\n  $showBorder?: boolean;\n  $borderColor?: string;\n  $isChild?: boolean;\n  $isOpen?: boolean;\n  $collapsible?: boolean;\n}\n\n/**\n * Main container for the DataContainerCard component\n */\nconst Container = styled.div<ContainerStyleProps>`\n  ${({ theme, $borderRadius, $shadow, $showBorder, $borderColor, $isChild, $isOpen, $collapsible }) => {\n    const radius = getBorderRadius($borderRadius, theme as unknown as Record<string, unknown>);\n    const shadow = getShadow($shadow);\n    // For non-collapsible cards or when open, allow overflow for dropdowns\n    // Keep overflow hidden only during collapse animation\n    const overflow = !$collapsible ? 'visible' : ($isOpen ? 'visible' : 'hidden');\n\n    return css`\n      border-radius: ${radius};\n      box-shadow: ${shadow};\n      overflow: ${overflow};\n      background-color: ${theme.colors.white};\n      border: 1px solid ${$showBorder ? ($borderColor || theme.colors.border.light) : 'transparent'};\n\n      &:focus {\n        border-color: ${theme.colors.border.light};\n      }\n\n      ${$isChild &&\n      css`\n        &:not(:last-child) {\n          margin-bottom: 12px;\n        }\n      `}\n    `;\n  }}\n`;\n\ninterface HeaderStyleProps {\n  $isOpen: boolean;\n  $height?: number;\n  $isChild?: boolean;\n  $showHeaderBorderBottom?: boolean;\n  $stickyHeader?: boolean;\n  $collapsible?: boolean;\n}\n\n/**\n * Header component of the DataContainerCard\n */\nconst Header = styled.div<HeaderStyleProps>`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: ${({ $isChild }) => ($isChild ? '0 12px 0 10px' : '0 16px 0 12px')};\n  cursor: ${({ $collapsible }) => ($collapsible ? 'pointer' : 'default')};\n  background-color: ${({ theme }) => theme.colors.background.default};\n  height: ${({ $height, $isChild }) => {\n    if ($height === 0) return 'unset';\n    if ($height !== undefined) return `${$height}px`;\n    return $isChild ? '32px' : '36px';\n  }};\n  user-select: none;\n  transition: background-color 0.3s ease;\n  border-bottom: ${({ $isOpen, $showHeaderBorderBottom, theme }) =>\n    $showHeaderBorderBottom && $isOpen ? `1px solid ${theme.colors.border.light}` : '1px solid transparent'};\n  gap: 8px;\n\n  ${({ $stickyHeader }) =>\n    $stickyHeader &&\n    css`\n      position: sticky;\n      top: 0;\n      z-index: 1;\n    `}\n\n  ${({ $collapsible, theme }) =>\n    $collapsible &&\n    css`\n      &:hover {\n        background-color: ${theme.colors.grey[100]};\n      }\n    `}\n`;\n\ninterface ContentStyleProps {\n  $isOpen: boolean;\n  $isChild: boolean;\n  $hasContent: boolean;\n  $contentPadding: DataContainerCardContentPadding;\n  $collapsible: boolean;\n}\n\n/**\n * Content area of the DataContainerCard\n */\nconst Content = styled.div<ContentStyleProps>`\n  transition:\n    max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1),\n    opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1),\n    padding 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n  padding: ${({ $isOpen, $hasContent, $contentPadding, $isChild }) =>\n    $isOpen && $hasContent ? getContentPadding($contentPadding, $isChild) : '0 12px'};\n  opacity: ${({ $isOpen, $hasContent }) => ($isOpen && $hasContent ? 1 : 0)};\n  background-color: ${({ $isChild, theme }) => ($isChild ? theme.colors.grey[100] : theme.colors.white)};\n`;\n\n/**\n * Styled component for the nested header title (smaller)\n */\nconst NestedHeaderTitle = styled.h3`\n  font-size: ${({ theme }) => theme.typography.fontSize.xs};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.semibold};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  margin: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  color: ${({ theme }) => theme.colors.text.primary};\n`;\n\n/**\n * Styled component for the header title\n */\nconst HeaderTitle = styled.h2`\n  font-size: ${({ theme }) => theme.typography.fontSize.sm};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.semibold};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  margin: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  color: ${({ theme }) => theme.colors.text.primary};\n`;\n\n/**\n * Left section of the header\n */\nconst LeftSection = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  min-width: 0;\n  flex-grow: 1;\n\n  > svg {\n    flex-shrink: 0;\n  }\n`;\n\n/**\n * Right section of the header\n */\nconst RightSection = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-shrink: 0;\n`;\n\n/**\n * DataContainerCard is a generic container component for displaying data sections\n * with consistent styling. It supports both collapsible (accordion) and static\n * display modes, nested containers, and customizable visual styling.\n *\n * @example\n * ```tsx\n * // Basic non-collapsible usage\n * <DataContainerCard title=\"Review Details\" collapsible={false}>\n *   <MetadataDetails name=\"Status\" value=\"Complete\" />\n * </DataContainerCard>\n *\n * // Collapsible usage\n * <DataContainerCard title=\"Select Files\" collapsible defaultOpen>\n *   <FileInputSection />\n * </DataContainerCard>\n *\n * // Nested containers\n * <DataContainerCard title=\"Review Results\" collapsible defaultOpen>\n *   <DataContainerCard title=\"High Severity\" isChild collapsible defaultOpen>\n *     <FindingCard severity=\"high\" />\n *   </DataContainerCard>\n * </DataContainerCard>\n *\n * // With visual styling\n * <DataContainerCard\n *   title=\"Summary\"\n *   borderRadius=\"md\"\n *   shadow=\"md\"\n *   showBorder\n * >\n *   <ResultsSummary />\n * </DataContainerCard>\n * ```\n */\nexport const DataContainerCard: React.FC<DataContainerCardProps> = ({\n  title,\n  customTitleComponent,\n  children,\n  collapsible = false,\n  defaultOpen = true,\n  open,\n  onOpenChange,\n  isChild = false,\n  rightSection,\n  borderRadius = 'none',\n  shadow = 'none',\n  borderColor,\n  showBorder = false,\n  showHeaderBorderBottom = true,\n  headerHeight,\n  stickyHeader = false,\n  contentPadding = 'md',\n  id,\n  dataId,\n  dataTestId,\n  className,\n  style,\n}) => {\n  // Use controlled state if `open` prop is provided, otherwise use internal state\n  const isControlled = open !== undefined;\n  const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n  const isOpen = isControlled ? open : internalOpen;\n\n  useEffect(() => {\n    if (!isControlled) {\n      setInternalOpen(defaultOpen);\n    }\n  }, [isControlled, defaultOpen]);\n\n  const handleToggle = useCallback(\n    (e: React.MouseEvent | React.KeyboardEvent) => {\n      if (!collapsible) return;\n\n      e.stopPropagation();\n      e.preventDefault();\n\n      const newOpenState = !isOpen;\n\n      if (!isControlled) {\n        setInternalOpen(newOpenState);\n      }\n\n      if (onOpenChange) {\n        onOpenChange(newOpenState);\n      }\n    },\n    [collapsible, isOpen, isControlled, onOpenChange]\n  );\n\n  const renderTitle = () => {\n    if (customTitleComponent) {\n      return customTitleComponent;\n    }\n\n    if (title) {\n      return isChild ? (\n        <NestedHeaderTitle>{title}</NestedHeaderTitle>\n      ) : (\n        <HeaderTitle>{title}</HeaderTitle>\n      );\n    }\n\n    return null;\n  };\n\n  const hasContent = !!(\n    (typeof children === 'string' && children.trim().length > 0) ||\n    (Array.isArray(children) && children.length > 0) ||\n    React.isValidElement(children)\n  );\n\n  // For non-collapsible mode, always show content\n  const showContent = collapsible ? isOpen : true;\n\n  const headerExpandLessId = `datacontainercard-header-expand-less-${id || dataId || 'header-expand-less'}`;\n  const headerExpandMoreId = `datacontainercard-header-expand-more-${id || dataId || 'header-expand-more'}`;\n  const contentId = `datacontainercard-content-${id || dataId || 'content'}`;\n\n  return (\n    <Container\n      $borderRadius={borderRadius}\n      $shadow={shadow}\n      $showBorder={showBorder}\n      $borderColor={borderColor}\n      $isChild={isChild}\n      $isOpen={showContent}\n      $collapsible={collapsible}\n      data-id={dataId}\n      data-testid={dataTestId}\n      className={className}\n      style={style}\n    >\n      <Header\n        $isOpen={showContent}\n        $isChild={isChild}\n        $height={headerHeight}\n        $showHeaderBorderBottom={showHeaderBorderBottom}\n        $stickyHeader={stickyHeader}\n        $collapsible={collapsible}\n        onClick={collapsible ? handleToggle : undefined}\n        data-id={dataId ? `${dataId}-header` : undefined}\n      >\n        <LeftSection>\n          {collapsible && (\n            <>\n              {isOpen ? (\n                <Button\n                  id={headerExpandLessId}\n                  aria-label=\"Collapse section button\"\n                  aria-expanded={isOpen}\n                  aria-controls={contentId}\n                  icon={<Icon name=\"keyboard_arrow_up\" size=\"md\" />}\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    handleToggle(e as unknown as React.MouseEvent);\n                  }}\n                />\n              ) : (\n                <Button\n                  id={headerExpandMoreId}\n                  aria-label=\"Expand section button\"\n                  aria-expanded={isOpen}\n                  aria-controls={contentId}\n                  icon={<Icon name=\"keyboard_arrow_down\" size=\"md\" />}\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    handleToggle(e as unknown as React.MouseEvent);\n                  }}\n                />\n              )}\n            </>\n          )}\n\n          {renderTitle()}\n        </LeftSection>\n        {rightSection && <RightSection>{rightSection}</RightSection>}\n      </Header>\n\n      {hasContent && (\n        <Content\n          $isOpen={showContent}\n          $isChild={isChild}\n          $hasContent={hasContent}\n          $contentPadding={contentPadding}\n          $collapsible={collapsible}\n          role=\"region\"\n          aria-labelledby={isOpen ? headerExpandLessId : headerExpandMoreId}\n          id={contentId}\n        >\n          {showContent && children}\n        </Content>\n      )}\n    </Container>\n  );\n};\n\nDataContainerCard.displayName = 'DataContainerCard';\n\nexport default DataContainerCard;\n","import React from 'react';\nimport styled from '@emotion/styled';\nimport { css } from '@emotion/react';\nimport type {\n  StickyFooterProps,\n  StickyFooterPadding,\n  StickyFooterBorderRadius,\n  StickyFooterShadow,\n} from './StickyFooter.types';\n\n/**\n * Maps padding prop to CSS value\n */\nconst getPadding = (padding: StickyFooterPadding): string => {\n  switch (padding) {\n    case 'none':\n      return '0';\n    case 'sm':\n      return '8px';\n    case 'md':\n      return '10px';\n    case 'lg':\n      return '16px';\n    default:\n      return '10px';\n  }\n};\n\n/**\n * Maps border radius prop to CSS value\n */\nconst getBorderRadius = (radius: StickyFooterBorderRadius): string => {\n  switch (radius) {\n    case 'none':\n      return '0';\n    case 'sm':\n      return '4px';\n    case 'md':\n      return '8px';\n    case 'lg':\n      return '12px';\n    default:\n      return '8px';\n  }\n};\n\n/**\n * Maps shadow prop to CSS value (shadow appears above the footer)\n */\nconst getShadow = (shadow: StickyFooterShadow): string => {\n  switch (shadow) {\n    case 'none':\n      return 'none';\n    case 'sm':\n      return '0 -2px 8px rgba(0, 0, 0, 0.08)';\n    case 'md':\n      return '0 -4px 12px rgba(0, 0, 0, 0.12)';\n    case 'lg':\n      return '0 -6px 16px rgba(0, 0, 0, 0.16)';\n    default:\n      return '0 -2px 8px rgba(0, 0, 0, 0.08)';\n  }\n};\n\ninterface FooterContainerProps {\n  $padding: StickyFooterPadding;\n  $borderRadius: StickyFooterBorderRadius;\n  $shadow: StickyFooterShadow;\n  $showBorder?: boolean;\n  $borderColor?: string;\n  $backgroundColor?: string;\n}\n\nconst FooterContainer = styled.div<FooterContainerProps>`\n  ${({ theme, $padding, $borderRadius, $shadow, $showBorder, $borderColor, $backgroundColor }) => {\n    const padding = getPadding($padding);\n    const borderRadius = getBorderRadius($borderRadius);\n    const shadow = getShadow($shadow);\n\n    return css`\n      position: fixed;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      width: 100%;\n      z-index: 10;\n      padding: ${padding};\n      border-radius: ${borderRadius} ${borderRadius} 0 0;\n      box-shadow: ${shadow};\n      background-color: ${$backgroundColor || theme.colors.white};\n      border-top: ${$showBorder ? `1px solid ${$borderColor || theme.colors.border.light}` : 'none'};\n      box-sizing: border-box;\n    `;\n  }}\n`;\n\n/**\n * StickyFooter is a container component that is fixed to the bottom of the viewport,\n * providing a consistent area for action buttons and controls. Content scrolls behind\n * the footer while it remains always visible at the bottom.\n *\n * Key features:\n * - Fixed positioning at the bottom of the viewport (100% width)\n * - Configurable padding, border radius, and shadow\n * - Optional border for visual separation\n * - Accepts any children (buttons, forms, etc.)\n *\n * Note: When using this component, ensure the parent container has appropriate\n * bottom padding to prevent content from being hidden behind the fixed footer.\n *\n * @example\n * ```tsx\n * // Basic usage with a single button\n * <StickyFooter>\n *   <Button variant=\"primary\" fullWidth>Submit</Button>\n * </StickyFooter>\n *\n * // With custom styling\n * <StickyFooter padding=\"lg\" shadow=\"md\" borderRadius=\"lg\">\n *   <Button variant=\"primary\" fullWidth>Send to IntelligenceBank</Button>\n * </StickyFooter>\n *\n * // Multiple buttons\n * <StickyFooter>\n *   <div style={{ display: 'flex', gap: '8px' }}>\n *     <Button variant=\"secondary\" style={{ flex: 1 }}>Cancel</Button>\n *     <Button variant=\"primary\" style={{ flex: 1 }}>Submit</Button>\n *   </div>\n * </StickyFooter>\n * ```\n */\nexport const StickyFooter: React.FC<StickyFooterProps> = ({\n  children,\n  padding = 'md',\n  borderRadius = 'none',\n  shadow = 'sm',\n  showBorder = true,\n  borderColor,\n  backgroundColor,\n  dataId,\n  dataTestId,\n  className,\n  style,\n}) => {\n  return (\n    <FooterContainer\n      $padding={padding}\n      $borderRadius={borderRadius}\n      $shadow={shadow}\n      $showBorder={showBorder}\n      $borderColor={borderColor}\n      $backgroundColor={backgroundColor}\n      data-id={dataId}\n      data-testid={dataTestId}\n      className={className}\n      style={style}\n    >\n      {children}\n    </FooterContainer>\n  );\n};\n\nStickyFooter.displayName = 'StickyFooter';\n\nexport default StickyFooter;\n","import styled from '@emotion/styled';\nimport { forwardRef } from 'react';\n\nimport { theme } from '../../theme';\nimport type { MetadataDetailsProps, FontSizeVariant, MetadataLayout } from './MetadataDetails.types';\n\n/**\n * Map font size variants to actual pixel values from theme\n */\nconst fontSizeMap: Record<FontSizeVariant, string> = {\n  xs: theme.typography.fontSize.xs,\n  sm: theme.typography.fontSize.sm,\n  base: theme.typography.fontSize.base,\n  md: theme.typography.fontSize.md,\n  lg: theme.typography.fontSize.lg,\n  xl: theme.typography.fontSize.xl,\n};\n\ninterface MetadataContainerProps {\n  layout: MetadataLayout;\n}\n\nconst MetadataContainer = styled.div<MetadataContainerProps>`\n  display: flex;\n  padding-bottom: 16px;\n  flex-wrap: wrap;\n  flex-direction: ${props => props.layout === 'stacked' ? 'column' : 'row'};\n`;\n\ninterface NameFieldProps {\n  fieldColor: string;\n  fieldMinWidth: string | number;\n  fieldFontSize?: string;\n  layout: MetadataLayout;\n}\n\nconst NameField = styled.div<NameFieldProps>`\n  color: ${props => props.fieldColor};\n  min-width: ${props =>\n    props.layout === 'stacked' \n      ? 'auto'\n      : typeof props.fieldMinWidth === 'number'\n        ? `${props.fieldMinWidth}px`\n        : props.fieldMinWidth};\n  font-style: normal;\n  font-weight: 400;\n  font-size: ${props => props.fieldFontSize || '11px'};\n  line-height: 20px;\n  text-transform: uppercase;\n  margin-right: ${props => props.layout === 'stacked' ? '0' : '10px'};\n  margin-bottom: ${props => props.layout === 'stacked' ? '4px' : '0'};\n`;\n\nconst ChipDataContainer = styled.div`\n  display: inline-flex;\n  background: var(--ib-color-grey-100, #f7f7f7);\n  border-radius: 7px;\n  padding: 6px 15px;\n  flex-direction: column;\n  margin-right: 8px;\n  margin-bottom: 16px;\n`;\n\ninterface ChipNameFieldProps {\n  fieldFontSize?: string;\n}\n\nconst ChipNameField = styled.div<ChipNameFieldProps>`\n  font-style: normal;\n  font-weight: 400;\n  font-size: ${props => props.fieldFontSize || '11px'};\n  line-height: 20px;\n  text-transform: uppercase;\n  color: var(--ib-color-grey-500, #737373);\n`;\n\ninterface ChipValueFieldProps {\n  fieldFontSize?: string;\n}\n\nconst ChipValueField = styled.div<ChipValueFieldProps>`\n  font-style: normal;\n  font-weight: 400;\n  font-size: ${props => props.fieldFontSize || '14px'};\n  line-height: 20px;\n  color: var(--ib-color-grey-900, #191919);\n`;\n\ninterface BodyWrapperProps {\n  fieldFontSize?: string;\n}\n\nconst BodyWrapper = styled.span<BodyWrapperProps>`\n  max-width: 100%;\n  word-break: break-word;\n  white-space: pre-wrap;\n  font-style: normal;\n  font-weight: 400;\n  font-size: ${props => props.fieldFontSize || '14px'};\n  line-height: 20px;\n  color: var(--ib-color-text-primary, #4a4a4a);\n`;\n\ninterface SemiLabelWrapperProps {\n  fieldFontSize?: string;\n}\n\nconst SemiLabelWrapper = styled.span<SemiLabelWrapperProps>`\n  max-width: 100%;\n  word-break: break-word;\n  font-style: normal;\n  font-weight: 500;\n  font-size: ${props => props.fieldFontSize || '14px'};\n  line-height: 20px;\n  color: var(--ib-color-text-primary, #4a4a4a);\n`;\n\nconst CustomContainer = styled.div`\n  max-width: 100%;\n`;\n\n/**\n * MetadataDetails displays a labeled data field in various formats.\n *\n * Supports four display types:\n * - Normal: Standard label-value pair\n * - Bold: Label with emphasized (semi-bold) value\n * - Chip: Compact chip-style display with background\n * - Custom: Label with custom component as value\n *\n * Layout options:\n * - inline: Label on the left, value on the right (default)\n * - stacked: Label above, value below\n *\n * Font sizes can be customized using theme-aligned variants:\n * - labelFontSize: Controls the label text size\n * - valueFontSize: Controls the value text size\n *\n * @example\n * // Normal usage\n * <MetadataDetails name=\"Name\" value=\"John Doe\" />\n *\n * @example\n * // Stacked layout with custom font sizes\n * <MetadataDetails\n *   name=\"Status\"\n *   value=\"Active\"\n *   layout=\"stacked\"\n *   valueFontSize=\"xs\"\n * />\n *\n * @example\n * // Bold type\n * <MetadataDetails name=\"Title\" value=\"Project Manager\" type=\"Bold\" />\n *\n * @example\n * // Chip type (always stacked internally)\n * <MetadataDetails name=\"Status\" value=\"Active\" type=\"Chip\" />\n *\n * @example\n * // Custom component\n * <MetadataDetails\n *   name=\"Link\"\n *   type=\"Custom\"\n *   component={<a href=\"#\">View Details</a>}\n * />\n */\nexport const MetadataDetails = forwardRef<HTMLDivElement, MetadataDetailsProps>(\n  (\n    {\n      name = '',\n      value = '',\n      type = 'Normal',\n      layout = 'inline',\n      component,\n      color,\n      minWidth = '140px',\n      labelFontSize,\n      valueFontSize,\n      className,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const defaultColor = 'var(--ib-color-grey-500, #737373)';\n    const fieldColor = color || defaultColor;\n    const labelSize = labelFontSize ? fontSizeMap[labelFontSize] : undefined;\n    const valueSize = valueFontSize ? fontSizeMap[valueFontSize] : undefined;\n\n    if (type === 'Chip') {\n      return (\n        <ChipDataContainer\n          ref={ref}\n          className={className}\n          data-testid={dataTestId}\n          data-id={dataId}\n        >\n          <ChipNameField fieldFontSize={labelSize}>{name}</ChipNameField>\n          <ChipValueField fieldFontSize={valueSize}>{value}</ChipValueField>\n        </ChipDataContainer>\n      );\n    }\n\n    const ValueField = type === 'Bold' ? SemiLabelWrapper : BodyWrapper;\n\n    return (\n      <MetadataContainer\n        ref={ref}\n        className={className}\n        layout={layout}\n        data-testid={dataTestId}\n        data-id={dataId}\n      >\n        <NameField \n          fieldColor={fieldColor} \n          fieldMinWidth={minWidth} \n          fieldFontSize={labelSize}\n          layout={layout}\n        >\n          {name}\n        </NameField>\n\n        {type === 'Custom' ? (\n          <CustomContainer>{component}</CustomContainer>\n        ) : (\n          <ValueField fieldFontSize={valueSize}>{value}</ValueField>\n        )}\n      </MetadataContainer>\n    );\n  }\n);\n\nMetadataDetails.displayName = 'MetadataDetails';\n","import styled from '@emotion/styled';\nimport { css } from '@emotion/react';\nimport React from 'react';\n\nimport { Button } from '../Button';\nimport { Status } from '../Status';\n\nimport type { ConnectedAppCardProps, ConnectedAppCardColorMode, ConnectedAppStatus } from './ConnectedAppCard.types';\n\n/**\n * Generates a light tint of a color (10% opacity)\n */\nconst getLightTint = (hexColor: string): string => {\n  return `${hexColor}14`; // 14 in hex = ~8% opacity\n};\n\n/**\n * Get status badge configuration based on connection status\n */\nconst getStatusConfig = (status: ConnectedAppStatus, customText?: string) => {\n  switch (status) {\n    case 'connected':\n      return {\n        type: 'success' as const,\n        label: customText || 'Connected',\n      };\n    case 'available':\n      return {\n        type: 'neutral' as const,\n        label: customText || 'Not configured',\n      };\n    case 'addon':\n      return {\n        type: 'info' as const,\n        label: customText || 'Request Access',\n      };\n    case 'comingSoon':\n      return {\n        type: 'neutral' as const,\n        label: customText || 'Coming Soon',\n      };\n    default:\n      return {\n        type: 'neutral' as const,\n        label: customText || 'Unknown',\n      };\n  }\n};\n\ninterface ContainerStyleProps {\n  $cardColorMode: ConnectedAppCardColorMode;\n  $appColor: string;\n  $dimmed: boolean;\n}\n\n/**\n * Main container for the card\n */\nconst Container = styled.div<ContainerStyleProps>`\n  ${({ theme, $cardColorMode, $appColor, $dimmed }) => {\n    const backgroundColor = $cardColorMode === 'app' ? getLightTint($appColor) : theme.colors.white;\n\n    return css`\n      display: flex;\n      align-items: center;\n      gap: 16px;\n      padding: 16px;\n      background: ${backgroundColor};\n      border: 1px solid ${theme.colors.border.light};\n      border-radius: 8px;\n      transition: background-color 0.2s ease, opacity 0.2s ease;\n      opacity: ${$dimmed ? 0.6 : 1};\n      cursor: ${$dimmed ? 'not-allowed' : 'default'};\n    `;\n  }}\n`;\n\ninterface LogoStyleProps {\n  $grayscale: boolean;\n}\n\n/**\n * Logo container\n */\nconst Logo = styled.img<LogoStyleProps>`\n  width: 48px;\n  height: 48px;\n  border-radius: 6px;\n  object-fit: contain;\n  flex-shrink: 0;\n  transition: filter 0.2s ease;\n  filter: ${({ $grayscale }) => ($grayscale ? 'grayscale(50%)' : 'none')};\n`;\n\n/**\n * Info section containing name and status\n */\nconst Info = styled.div`\n  flex: 1;\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 4px;\n`;\n\ninterface NameStyleProps {\n  $titleColorMode: ConnectedAppCardColorMode;\n  $appColor: string;\n}\n\n/**\n * App name/title\n */\nconst Name = styled.h3<NameStyleProps>`\n  ${({ theme, $titleColorMode, $appColor }) => {\n    const textColor = $titleColorMode === 'app' ? $appColor : theme.colors.text.primary;\n\n    return css`\n      font-size: 16px;\n      font-weight: 600;\n      font-family: ${theme.typography.fontFamily};\n      color: ${textColor};\n      margin: 0;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    `;\n  }}\n`;\n\n/**\n * Right section for actions\n */\nconst RightSection = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-shrink: 0;\n`;\n\ninterface BadgeStyleProps {\n  $dimmed: boolean;\n}\n\n/**\n * Static badge for non-clickable actions (e.g., Coming Soon)\n */\nconst StaticBadge = styled.span<BadgeStyleProps>`\n  ${({ theme, $dimmed }) => css`\n    display: inline-flex;\n    align-items: center;\n    padding: 4px 10px;\n    font-size: 12px;\n    font-weight: 500;\n    font-family: ${theme.typography.fontFamily};\n    border-radius: 12px;\n    white-space: nowrap;\n    border: none;\n    color: ${$dimmed ? theme.colors.text.muted : theme.colors.text.primary};\n    background: ${$dimmed ? '#F5F5F5' : '#E8E8E8'};\n    cursor: ${$dimmed ? 'not-allowed' : 'default'};\n  `}\n`;\n\nexport const ConnectedAppCard: React.FC<ConnectedAppCardProps> = ({\n  name,\n  logoPath,\n  color,\n  cardColorMode = 'standard',\n  titleColorMode = 'app',\n  status = 'available',\n  primaryAction,\n  rightSection,\n  showStatus,\n  statusText,\n  dimmed,\n  grayscaleLogo,\n  logoAlt,\n  id,\n  dataId,\n  dataTestId,\n  className,\n  style,\n}) => {\n  const statusConfig = getStatusConfig(status, statusText);\n\n  // Determine dimmed state: explicit prop > default based on status\n  const isDimmed = dimmed ?? status === 'comingSoon';\n  \n  // Determine grayscale state: explicit prop > default based on status\n  const isGrayscale = grayscaleLogo ?? status === 'comingSoon';\n  \n  // Determine if status badge should be shown: explicit prop > default based on status\n  const shouldShowStatus = showStatus ?? (status !== 'comingSoon' && status !== 'addon');\n\n  // Determine action rendering: button if onClick provided, static badge otherwise\n  const renderAction = () => {\n    if (!primaryAction) return null;\n\n    const { label, onClick, useAppColor, disabled, size = 'xs' } = primaryAction;\n\n    // If no onClick, render as static badge\n    if (!onClick) {\n      return <StaticBadge $dimmed={isDimmed}>{label}</StaticBadge>;\n    }\n\n    // Determine button styling based on useAppColor prop\n    const shouldUseAppColor = useAppColor ?? (status === 'connected' || status === 'available');\n\n    if (shouldUseAppColor) {\n      // Solid button with app color background\n      return (\n        <Button\n          variant=\"primary\"\n          backgroundColor={color}\n          textColor=\"#FFFFFF\"\n          size={size}\n          onClick={onClick}\n          disabled={disabled}\n        >\n          {label}\n        </Button>\n      );\n    } else {\n      // Outline button with app color\n      return (\n        <Button\n          variant=\"outlineSecondary\"\n          outlineColor={color}\n          size={size}\n          onClick={onClick}\n          disabled={disabled}\n        >\n          {label}\n        </Button>\n      );\n    }\n  };\n\n  return (\n    <Container\n      $cardColorMode={cardColorMode}\n      $appColor={color}\n      $dimmed={isDimmed}\n      id={id}\n      data-id={dataId}\n      data-testid={dataTestId}\n      className={className}\n      style={style}\n    >\n      <Logo src={logoPath} alt={logoAlt || name} $grayscale={isGrayscale} />\n      <Info>\n        <Name $titleColorMode={titleColorMode} $appColor={color}>\n          {name}\n        </Name>\n        {shouldShowStatus && (\n          <Status\n            type={statusConfig.type}\n            label={statusConfig.label}\n            size=\"small\"\n            variant=\"filled\"\n            showIcon={false}\n          />\n        )}\n      </Info>\n      {(primaryAction || rightSection) && (\n        <RightSection>\n          {rightSection}\n          {renderAction()}\n        </RightSection>\n      )}\n    </Container>\n  );\n};\n\nConnectedAppCard.displayName = 'ConnectedAppCard';\n\nexport default ConnectedAppCard;\n","/**\n * File format detection and utilities\n * Extracted from web-app for reusability across integrations\n */\n\n/**\n * Image file extensions that support presets/transformations\n */\nexport const PRESET_SUPPORTED_FORMATS = [\n  'gif',\n  'png',\n  'jpg',\n  'jp2',\n  'jps',\n  'jpeg',\n  'bmp',\n  'tiff',\n  'tif',\n  'svg',\n  'eps',\n  'ai',\n  'ico',\n  'psd',\n  'arw',\n  'crw',\n  'nrw',\n  'cr2',\n  'dcr',\n  'dng',\n  'mrw',\n  'nef',\n  'orf',\n  'pef',\n  'raf',\n  'indt',\n  'indd',\n  'idml',\n  'webp',\n  'pam',\n  'pbm',\n  'xbm',\n  '3fr',\n  'mos',\n  'ppm',\n  'erf',\n  'x3f',\n  'kdc',\n  'sr2',\n  'mef',\n] as const;\n\n/**\n * Image formats that support drag-and-drop embedding\n */\nexport const DRAG_DROP_SUPPORTED_FORMATS = [\n  'jpg',\n  'jpeg',\n  'png',\n  'gif',\n  'webp',\n  'svg',\n  'avif',\n  'apng',\n  'bmp',\n  'ico',\n] as const;\n\n/**\n * Common image formats\n */\nexport const IMAGE_FORMATS = [\n  'jpg',\n  'jpeg',\n  'png',\n  'gif',\n  'webp',\n  'svg',\n  'bmp',\n  'ico',\n  'tiff',\n  'tif',\n  'avif',\n  'apng',\n] as const;\n\n/**\n * Common video formats\n */\nexport const VIDEO_FORMATS = [\n  'mp4',\n  'mov',\n  'avi',\n  'wmv',\n  'flv',\n  'webm',\n  'mkv',\n  'm4v',\n  'mpg',\n  'mpeg',\n] as const;\n\n/**\n * Common document formats\n */\nexport const DOCUMENT_FORMATS = [\n  'pdf',\n  'doc',\n  'docx',\n  'xls',\n  'xlsx',\n  'ppt',\n  'pptx',\n  'txt',\n  'rtf',\n  'odt',\n  'ods',\n  'odp',\n] as const;\n\n/**\n * Get file extension from filename\n */\nexport function getFileExtension(filename: string): string {\n  return filename.split('.').pop()?.toLowerCase() || '';\n}\n\n/**\n * Check if file supports image presets/transformations\n */\nexport function supportsPresets(filename: string, mimetype?: string): boolean {\n  const ext = getFileExtension(filename);\n  const mimeStr = (mimetype || '').toLowerCase();\n  \n  return PRESET_SUPPORTED_FORMATS.some(\n    (format) => ext === format || mimeStr.includes(format)\n  );\n}\n\n/**\n * Check if file supports drag-and-drop embedding\n */\nexport function supportsDragDrop(filename: string): boolean {\n  const ext = getFileExtension(filename);\n  return DRAG_DROP_SUPPORTED_FORMATS.includes(ext as any);\n}\n\n/**\n * Check if file is an image\n */\nexport function isImageFile(filename: string): boolean {\n  const ext = getFileExtension(filename);\n  return IMAGE_FORMATS.includes(ext as any);\n}\n\n/**\n * Check if file is a video\n */\nexport function isVideoFile(filename: string): boolean {\n  const ext = getFileExtension(filename);\n  return VIDEO_FORMATS.includes(ext as any);\n}\n\n/**\n * Check if file is a document\n */\nexport function isDocumentFile(filename: string): boolean {\n  const ext = getFileExtension(filename);\n  return DOCUMENT_FORMATS.includes(ext as any);\n}\n\n/**\n * Get MIME type from filename\n */\nexport function getMimeType(filename: string): string {\n  const ext = getFileExtension(filename);\n  \n  // Image types\n  if (ext === 'jpg' || ext === 'jpeg') return 'image/jpeg';\n  if (ext === 'png') return 'image/png';\n  if (ext === 'gif') return 'image/gif';\n  if (ext === 'webp') return 'image/webp';\n  if (ext === 'svg') return 'image/svg+xml';\n  if (ext === 'bmp') return 'image/bmp';\n  if (ext === 'ico') return 'image/x-icon';\n  if (ext === 'tiff' || ext === 'tif') return 'image/tiff';\n  \n  // Video types\n  if (ext === 'mp4') return 'video/mp4';\n  if (ext === 'mov') return 'video/quicktime';\n  if (ext === 'avi') return 'video/x-msvideo';\n  if (ext === 'webm') return 'video/webm';\n  \n  // Document types\n  if (ext === 'pdf') return 'application/pdf';\n  if (ext === 'doc') return 'application/msword';\n  if (ext === 'docx') return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n  if (ext === 'xls') return 'application/vnd.ms-excel';\n  if (ext === 'xlsx') return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n  if (ext === 'ppt') return 'application/vnd.ms-powerpoint';\n  if (ext === 'pptx') return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n  if (ext === 'txt') return 'text/plain';\n  \n  return 'application/octet-stream';\n}\n\n/**\n * Get file type icon name (Material Symbols)\n */\nexport function getFileTypeIcon(filename: string): string {\n  if (isImageFile(filename)) return 'image';\n  if (isVideoFile(filename)) return 'videocam';\n  if (isDocumentFile(filename)) return 'description';\n  \n  const ext = getFileExtension(filename);\n  \n  // Audio\n  if (['mp3', 'wav', 'ogg', 'flac', 'm4a'].includes(ext)) return 'audiotrack';\n  \n  // Archive\n  if (['zip', 'rar', '7z', 'tar', 'gz'].includes(ext)) return 'folder_zip';\n  \n  // Code\n  if (['js', 'ts', 'jsx', 'tsx', 'html', 'css', 'json', 'xml'].includes(ext)) return 'code';\n  \n  return 'insert_drive_file';\n}","/**\n * Data formatting utilities\n * Extracted from web-app for reusability across integrations\n */\n\n/**\n * Format file size in bytes to human-readable format\n * @param bytes - File size in bytes\n * @param decimals - Number of decimal places (default: 1)\n * @returns Formatted file size string (e.g., \"1.5 MB\")\n */\nexport function formatFileSize(bytes: number, decimals: number = 1): string {\n  if (bytes === 0) return '0 Bytes';\n  \n  const k = 1024;\n  const dm = decimals < 0 ? 0 : decimals;\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  \n  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n}\n\n/**\n * Format date to human-readable format\n * @param date - Date object or ISO string\n * @param options - Intl.DateTimeFormat options\n * @returns Formatted date string\n */\nexport function formatDate(\n  date: Date | string,\n  options?: Intl.DateTimeFormatOptions\n): string {\n  const dateObj = typeof date === 'string' ? new Date(date) : date;\n  \n  const defaultOptions: Intl.DateTimeFormatOptions = {\n    year: 'numeric',\n    month: 'short',\n    day: 'numeric',\n    ...options,\n  };\n  \n  return new Intl.DateTimeFormat('en-US', defaultOptions).format(dateObj);\n}\n\n/**\n * Format date to relative time (e.g., \"2 hours ago\")\n * @param date - Date object or ISO string\n * @returns Relative time string\n */\nexport function formatRelativeTime(date: Date | string): string {\n  const dateObj = typeof date === 'string' ? new Date(date) : date;\n  const now = new Date();\n  const diffMs = now.getTime() - dateObj.getTime();\n  const diffSec = Math.floor(diffMs / 1000);\n  const diffMin = Math.floor(diffSec / 60);\n  const diffHour = Math.floor(diffMin / 60);\n  const diffDay = Math.floor(diffHour / 24);\n  const diffWeek = Math.floor(diffDay / 7);\n  const diffMonth = Math.floor(diffDay / 30);\n  const diffYear = Math.floor(diffDay / 365);\n  \n  if (diffSec < 60) return 'just now';\n  if (diffMin < 60) return `${diffMin} minute${diffMin !== 1 ? 's' : ''} ago`;\n  if (diffHour < 24) return `${diffHour} hour${diffHour !== 1 ? 's' : ''} ago`;\n  if (diffDay < 7) return `${diffDay} day${diffDay !== 1 ? 's' : ''} ago`;\n  if (diffWeek < 4) return `${diffWeek} week${diffWeek !== 1 ? 's' : ''} ago`;\n  if (diffMonth < 12) return `${diffMonth} month${diffMonth !== 1 ? 's' : ''} ago`;\n  return `${diffYear} year${diffYear !== 1 ? 's' : ''} ago`;\n}\n\n/**\n * Truncate filename to specified length, preserving extension\n * @param filename - Full filename with extension\n * @param maxLength - Maximum length of truncated filename\n * @returns Truncated filename\n */\nexport function truncateFilename(filename: string, maxLength: number = 30): string {\n  if (filename.length <= maxLength) return filename;\n  \n  const parts = filename.split('.');\n  const extension = parts.length > 1 ? parts.pop() : '';\n  const name = parts.join('.');\n  \n  if (!extension) {\n    return name.substring(0, maxLength - 3) + '...';\n  }\n  \n  const availableLength = maxLength - extension.length - 4; // -4 for \"...\" and \".\"\n  if (availableLength < 1) {\n    return filename.substring(0, maxLength - 3) + '...';\n  }\n  \n  return name.substring(0, availableLength) + '...' + '.' + extension;\n}\n\n/**\n * Truncate text to specified length\n * @param text - Text to truncate\n * @param maxLength - Maximum length\n * @param suffix - Suffix to append (default: \"...\")\n * @returns Truncated text\n */\nexport function truncateText(text: string, maxLength: number, suffix: string = '...'): string {\n  if (text.length <= maxLength) return text;\n  return text.substring(0, maxLength - suffix.length) + suffix;\n}\n\n/**\n * Format dimensions (width x height)\n * @param width - Width in pixels\n * @param height - Height in pixels\n * @returns Formatted dimensions string (e.g., \"1920 × 1080\")\n */\nexport function formatDimensions(width?: number, height?: number): string {\n  if (!width || !height) return '';\n  return `${width} × ${height}`;\n}\n\n/**\n * Format number with thousands separator\n * @param num - Number to format\n * @returns Formatted number string\n */\nexport function formatNumber(num: number): string {\n  return new Intl.NumberFormat('en-US').format(num);\n}\n\n/**\n * Pluralize a word based on count\n * @param count - Number to check\n * @param singular - Singular form\n * @param plural - Plural form (optional, defaults to singular + 's')\n * @returns Pluralized string with count\n */\nexport function pluralize(count: number, singular: string, plural?: string): string {\n  const word = count === 1 ? singular : (plural || singular + 's');\n  return `${count} ${word}`;\n}","/**\n * Permission helpers for IntelligenceBank assets\n * Handles permission checking and action availability\n */\n\n/**\n * Standard IntelligenceBank permissions\n */\nexport type Permission =\n  | 'resource_download'\n  | 'resource_link'\n  | 'resource_copy'\n  | 'resource_edit'\n  | 'view'\n  | 'download'\n  | 'list';\n\n/**\n * Check if a specific permission is allowed\n * @param allowedActions - Array of allowed action strings from API\n * @param permission - Permission to check\n * @returns True if permission is allowed\n */\nexport function hasPermission(\n  allowedActions: string[],\n  permission: Permission\n): boolean {\n  if (!allowedActions || allowedActions.length === 0) {\n    return false;\n  }\n  \n  return allowedActions.includes(permission);\n}\n\n/**\n * Check if multiple permissions are allowed\n * @param allowedActions - Array of allowed action strings from API\n * @param permissions - Array of permissions to check\n * @returns True if ALL permissions are allowed\n */\nexport function hasAllPermissions(\n  allowedActions: string[],\n  permissions: Permission[]\n): boolean {\n  return permissions.every((permission) => hasPermission(allowedActions, permission));\n}\n\n/**\n * Check if any of the specified permissions are allowed\n * @param allowedActions - Array of allowed action strings from API\n * @param permissions - Array of permissions to check\n * @returns True if ANY permission is allowed\n */\nexport function hasAnyPermission(\n  allowedActions: string[],\n  permissions: Permission[]\n): boolean {\n  return permissions.some((permission) => hasPermission(allowedActions, permission));\n}\n\n/**\n * Get all available actions from allowed actions array\n * @param allowedActions - Array of allowed action strings from API\n * @returns Array of available Permission types\n */\nexport function getAvailableActions(allowedActions: string[]): Permission[] {\n  if (!allowedActions || allowedActions.length === 0) {\n    return [];\n  }\n  \n  const validPermissions: Permission[] = [\n    'resource_download',\n    'resource_link',\n    'resource_copy',\n    'resource_edit',\n    'view',\n    'download',\n    'list',\n  ];\n  \n  return validPermissions.filter((permission) =>\n    allowedActions.includes(permission)\n  );\n}\n\n/**\n * Check if asset is publicly accessible\n * An asset is considered public if it has 'view' permission and is marked as public\n * @param isPublic - Public flag from asset\n * @param allowedActions - Array of allowed action strings from API\n * @returns True if asset is publicly accessible\n */\nexport function isPublicAsset(\n  isPublic: boolean,\n  allowedActions: string[]\n): boolean {\n  return isPublic && hasPermission(allowedActions, 'view');\n}\n\n/**\n * Check if asset is restricted (not public or has limited permissions)\n * @param isPublic - Public flag from asset\n * @param allowedActions - Array of allowed action strings from API\n * @returns True if asset is restricted\n */\nexport function isRestrictedAsset(\n  isPublic: boolean,\n  allowedActions: string[]\n): boolean {\n  // Asset is restricted if:\n  // 1. Not public\n  // 2. Has no allowed actions\n  // 3. Only has 'list' permission\n  return (\n    isPublic === false ||\n    allowedActions.length === 0 ||\n    (allowedActions.length === 1 && allowedActions.includes('list'))\n  );\n}\n\n/**\n * Check if download is available for the asset\n * @param allowedActions - Array of allowed action strings from API\n * @param isWebApp - True if running in web app mode\n * @returns True if download is available\n */\nexport function canDownload(\n  allowedActions: string[],\n  isWebApp: boolean = false\n): boolean {\n  if (isWebApp) {\n    return hasPermission(allowedActions, 'resource_download');\n  }\n  return hasPermission(allowedActions, 'download');\n}\n\n/**\n * Check if public link generation is available\n * @param isPublic - Public flag from asset\n * @param allowedActions - Array of allowed action strings from API\n * @param isWebApp - True if running in web app mode\n * @returns True if public link can be generated\n */\nexport function canGeneratePublicLink(\n  isPublic: boolean,\n  allowedActions: string[],\n  isWebApp: boolean = false\n): boolean {\n  if (isWebApp) {\n    return hasPermission(allowedActions, 'resource_link') && !isRestrictedAsset(isPublic, allowedActions);\n  }\n  return isPublic && hasPermission(allowedActions, 'view');\n}\n\n/**\n * Check if copy to clipboard is available\n * @param allowedActions - Array of allowed action strings from API\n * @returns True if copy is available\n */\nexport function canCopy(allowedActions: string[]): boolean {\n  return hasPermission(allowedActions, 'resource_copy');\n}\n\n/**\n * Check if asset can be edited\n * @param allowedActions - Array of allowed action strings from API\n * @returns True if edit is available\n */\nexport function canEdit(allowedActions: string[]): boolean {\n  return hasPermission(allowedActions, 'resource_edit');\n}\n\n/**\n * Get permission summary for debugging\n * @param allowedActions - Array of allowed action strings from API\n * @param isPublic - Public flag from asset\n * @returns Object with permission flags\n */\nexport function getPermissionSummary(\n  allowedActions: string[],\n  isPublic: boolean = false\n) {\n  return {\n    canDownload: canDownload(allowedActions, false),\n    canGeneratePublicLink: canGeneratePublicLink(isPublic, allowedActions, false),\n    canCopy: canCopy(allowedActions),\n    canEdit: canEdit(allowedActions),\n    isPublic: isPublicAsset(isPublic, allowedActions),\n    isRestricted: isRestrictedAsset(isPublic, allowedActions),\n    availableActions: getAvailableActions(allowedActions),\n  };\n}","import { Fragment, useState, useMemo, useCallback, useId } from 'react';\nimport { Listbox, Transition } from '@headlessui/react';\nimport { Icon, Spinner } from '../';\n\nimport type { PresetSelectorProps, PresetOption } from './PresetSelector.types';\nimport { getFileTypeIcon } from '../../utils/file-formats';\nimport styles from './PresetSelector.module.css';\n\n/**\n * Format preset dimensions for display\n */\nfunction formatDimensions(dimensions?: { width: number; height: number }): string {\n  if (!dimensions) return '';\n  return `${dimensions.width} × ${dimensions.height}`;\n}\n\n/**\n * Format preset details for display\n */\nfunction formatPresetDetails(preset: PresetOption): string {\n  const parts: string[] = [];\n  \n  if (preset.fileType) {\n    parts.push(preset.fileType.toUpperCase());\n  }\n  \n  if (preset.dimensions) {\n    parts.push(formatDimensions(preset.dimensions));\n  }\n  \n  if (preset.fileSize) {\n    parts.push(preset.fileSize);\n  }\n  \n  return parts.join(', ');\n}\n\n/**\n * Get icon name for a preset based on its file type\n */\nfunction getPresetIcon(preset: PresetOption): string {\n  if (preset.isOriginal) {\n    return 'insert_drive_file';\n  }\n  return getFileTypeIcon(`file.${preset.fileType || 'bin'}`);\n}\n\n/**\n * PresetSelector component for selecting download presets/formats\n *\n * @example\n * ```tsx\n * const presets = [\n *   { id: 'original', name: 'Original', fileType: 'jpg', isOriginal: true },\n *   { id: 'thumbnail', name: 'Thumbnail', fileType: 'jpg', dimensions: { width: 150, height: 150 } },\n *   { id: 'large', name: 'Large', fileType: 'png', dimensions: { width: 1920, height: 1080 } }\n * ];\n *\n * <PresetSelector\n *   presets={presets}\n *   value={selectedPreset}\n *   onChange={setSelectedPreset}\n *   showDetails\n *   label=\"Select format\"\n * />\n * ```\n */\nexport function PresetSelector({\n  presets,\n  value,\n  onChange,\n  label,\n  placeholder = 'Select a preset...',\n  showDetails = false,\n  size = 'md',\n  disabled = false,\n  error = false,\n  errorMessage,\n  loading = false,\n  categories,\n  clearable = true,\n  searchable = false,\n  fullWidth = false,\n  className,\n  'data-testid': testId,\n  dataTestId,\n  dataId,\n}: PresetSelectorProps) {\n  const id = useId();\n  const [query, setQuery] = useState('');\n  const [isOpen, setIsOpen] = useState(false);\n\n  // Find selected preset\n  const selectedPreset = useMemo(\n    () => presets.find((p) => p.id === value) || null,\n    [presets, value]\n  );\n\n  // Filter presets based on search query\n  const filteredPresets = useMemo(() => {\n    if (!searchable || !query) {\n      return presets;\n    }\n    const lowerQuery = query.toLowerCase();\n    return presets.filter(\n      (preset) =>\n        preset.name.toLowerCase().includes(lowerQuery) ||\n        (preset.fileType && preset.fileType.toLowerCase().includes(lowerQuery))\n    );\n  }, [presets, query, searchable]);\n\n  // Filter categories based on search query\n  const filteredCategories = useMemo(() => {\n    if (!categories) return null;\n    if (!searchable || !query) return categories;\n\n    const lowerQuery = query.toLowerCase();\n    return categories\n      .map((category) => ({\n        ...category,\n        presets: category.presets.filter(\n          (preset) =>\n            preset.name.toLowerCase().includes(lowerQuery) ||\n            (preset.fileType && preset.fileType.toLowerCase().includes(lowerQuery))\n        ),\n      }))\n      .filter((category) => category.presets.length > 0);\n  }, [categories, query, searchable]);\n\n  // Handle selection change\n  const handleChange = useCallback(\n    (presetId: string) => {\n      onChange(presetId);\n      setQuery('');\n      setIsOpen(false);\n    },\n    [onChange]\n  );\n\n  // Handle clear button click\n  const handleClear = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      // When clearing, select the first original preset or just report empty\n      const originalPreset = presets.find((p) => p.isOriginal);\n      if (originalPreset) {\n        onChange(originalPreset.id);\n      }\n    },\n    [presets, onChange]\n  );\n\n  // Render a single option\n  const renderOption = (preset: PresetOption, isSelected: boolean) => (\n    <button\n      type=\"button\"\n      key={preset.id}\n      className={`${styles.option} ${isSelected ? styles.selected : ''}`}\n      onClick={() => handleChange(preset.id)}\n      data-testid={testId && `${testId}-option-${preset.id}`}\n    >\n      <span className={styles.optionContent}>\n        {showDetails && (\n          <span className={styles.optionIcon}>\n            <Icon name={getPresetIcon(preset)} size=\"sm\" />\n          </span>\n        )}\n        <span className={styles.optionLabel}>\n          <span className={styles.optionName}>{preset.name}</span>\n          {showDetails && (\n            <span className={styles.optionDetails}>\n              {formatPresetDetails(preset)}\n            </span>\n          )}\n        </span>\n      </span>\n      {preset.isOriginal && (\n        <span className={styles.originalBadge}>Original</span>\n      )}\n      {isSelected && (\n        <span className={styles.checkmark}>\n          <Icon name=\"check\" size=\"sm\" />\n        </span>\n      )}\n    </button>\n  );\n\n  // Build container class names\n  const containerClasses = [\n    styles.presetSelector,\n    fullWidth && styles.fullWidth,\n    className,\n  ]\n    .filter(Boolean)\n    .join(' ');\n\n  // Determine what presets to render\n  const hasCategories = filteredCategories && filteredCategories.length > 0;\n  const hasPresets = filteredPresets.length > 0;\n  const showNoResults =\n    !loading && ((searchable && query && !hasPresets && !hasCategories) || (!hasPresets && !hasCategories));\n\n  return (\n    <div\n      className={containerClasses}\n      data-size={size}\n      data-error={error}\n      data-open={isOpen}\n      data-testid={dataTestId || testId}\n      data-id={dataId}\n    >\n      {label && (\n        <label className={styles.label} id={`${id}-label`}>\n          {label}\n        </label>\n      )}\n\n      <Listbox\n        value={value || ''}\n        onChange={handleChange}\n        disabled={disabled || loading}\n      >\n        {({ open }) => {\n          // Sync open state for CSS\n          if (open !== isOpen) {\n            setIsOpen(open);\n          }\n\n          return (\n            <>\n              <Listbox.Button\n                className={styles.trigger}\n                aria-labelledby={label ? `${id}-label` : undefined}\n                data-testid={testId && `${testId}-trigger`}\n              >\n                <span className={styles.triggerContent}>\n                  {selectedPreset && showDetails && (\n                    <span className={styles.triggerIcon}>\n                      <Icon name={getPresetIcon(selectedPreset)} size=\"sm\" />\n                    </span>\n                  )}\n                  <span\n                    className={`${styles.triggerText} ${!selectedPreset ? styles.placeholder : ''}`}\n                  >\n                    {selectedPreset ? selectedPreset.name : placeholder}\n                  </span>\n                </span>\n\n                {clearable && selectedPreset && !selectedPreset.isOriginal && (\n                  <button\n                    type=\"button\"\n                    className={styles.clearButton}\n                    onClick={handleClear}\n                    aria-label=\"Clear selection\"\n                    data-testid={testId && `${testId}-clear`}\n                  >\n                    <Icon name=\"close\" size=\"sm\" />\n                  </button>\n                )}\n\n                <span className={styles.chevron}>\n                  <Icon name=\"keyboard_arrow_down\" size=\"sm\" />\n                </span>\n              </Listbox.Button>\n\n              <Transition\n                as={Fragment}\n                leave={styles.transitionLeave}\n                leaveFrom={styles.transitionLeaveActive}\n                leaveTo={styles.transitionLeaveActive}\n                enter={styles.transitionEnter}\n                enterFrom={styles.transitionEnter}\n                enterTo={styles.transitionEnterActive}\n              >\n                <Listbox.Options\n                  className={styles.dropdown}\n                  data-testid={testId && `${testId}-dropdown`}\n                >\n                  {searchable && (\n                    <div className={styles.searchWrapper}>\n                      <input\n                        type=\"text\"\n                        className={styles.searchInput}\n                        placeholder=\"Search presets...\"\n                        value={query}\n                        onChange={(e) => setQuery(e.target.value)}\n                        onClick={(e) => e.stopPropagation()}\n                        data-testid={testId && `${testId}-search`}\n                      />\n                    </div>\n                  )}\n\n                  {loading ? (\n                    <div\n                      className={styles.loadingWrapper}\n                      data-testid={testId && `${testId}-loading`}\n                    >\n                      <Spinner size=\"sm\" />\n                      <span className={styles.loadingText}>Loading presets...</span>\n                    </div>\n                  ) : showNoResults ? (\n                    <div\n                      className={styles.noResults}\n                      data-testid={testId && `${testId}-no-results`}\n                    >\n                      No presets found\n                    </div>\n                  ) : (\n                    <div className={styles.optionsList}>\n                      {hasCategories ? (\n                        // Render categorized presets\n                        filteredCategories!.map((category) => (\n                          <Fragment key={category.label}>\n                            <div className={styles.categoryLabel}>\n                              {category.label}\n                            </div>\n                            {category.presets.map((preset) =>\n                              renderOption(preset, preset.id === value)\n                            )}\n                          </Fragment>\n                        ))\n                      ) : (\n                        // Render flat presets list\n                        filteredPresets.map((preset) =>\n                          renderOption(preset, preset.id === value)\n                        )\n                      )}\n                    </div>\n                  )}\n                </Listbox.Options>\n              </Transition>\n            </>\n          );\n        }}\n      </Listbox>\n\n      {error && errorMessage && (\n        <p\n          className={styles.errorMessage}\n          role=\"alert\"\n          data-testid={testId && `${testId}-error`}\n        >\n          {errorMessage}\n        </p>\n      )}\n    </div>\n  );\n}\n\nPresetSelector.displayName = 'PresetSelector';\n\nexport default PresetSelector;","import styled from '@emotion/styled';\nimport { Button, Card, Icon } from '../';\nimport type { Theme } from '../../theme';\nimport type { MouseEvent, DragEvent } from 'react';\n\nimport type { Asset, Preset } from '../../types';\nimport {\n  formatFileSize,\n  formatDimensions,\n  truncateFilename,\n  getFileTypeIcon,\n  isRestrictedAsset,\n} from '../../utils';\nimport { PresetSelector } from '../PresetSelector';\nimport type { PresetOption } from '../PresetSelector/PresetSelector.types';\n\nexport interface AssetCardProps {\n  /** Asset data */\n  asset: Asset;\n  /** Whether the asset is selected */\n  selected?: boolean;\n  /** Callback when asset is selected */\n  onSelect?: (id: string) => void;\n  /** Callback for download action */\n  onDownload?: (id: string) => void;\n  /** Callback for insert link action */\n  onInsertLink?: (id: string) => void;\n  /** Callback for copy action (copy URL to clipboard) */\n  onCopy?: (id: string) => void;\n  /** Callback for goto action (navigate to URL-type assets) */\n  onGoto?: (id: string) => void;\n  /** Allowed actions for this asset (overrides asset.allowedActions) */\n  allowedActions?: string[];\n  /** Custom className */\n  className?: string;\n  /** Test ID for testing (deprecated, use dataTestId) */\n  'data-testid'?: string;\n  /** Test identifier for automated testing */\n  dataTestId?: string;\n  /** Data identifier for ib-ui compatibility */\n  dataId?: string;\n  /** Enable drag-and-drop functionality */\n  draggable?: boolean;\n  /** Callback when drag starts */\n  onDragStart?: (asset: Asset, event: DragEvent) => void;\n  /** Callback when drag ends */\n  onDragEnd?: (asset: Asset, event: DragEvent) => void;\n  /** Available presets for this asset */\n  presets?: Preset[];\n  /** Currently selected preset ID */\n  selectedPresetId?: string | null;\n  /** Callback when preset selection changes */\n  onPresetChange?: (presetId: string) => void;\n}\n\nconst MediaContainer = styled.div`\n  position: relative;\n`;\n\nconst SelectedBadge = styled.div`\n  position: absolute;\n  top: ${({ theme }) => (theme as Theme).spacing[3]};\n  right: ${({ theme }) => (theme as Theme).spacing[3]};\n  background-color: ${({ theme }) => (theme as Theme).colors.highlight};\n  color: ${({ theme }) => (theme as Theme).colors.white};\n  border-radius: ${({ theme }) => (theme as Theme).borders.radius.full};\n  padding: ${({ theme }) => (theme as Theme).spacing[1]};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  box-shadow: ${({ theme }) => (theme as Theme).shadows.dropdown};\n`;\n\nconst RestrictedBadge = styled.div`\n  position: absolute;\n  top: ${({ theme }) => (theme as Theme).spacing[3]};\n  left: ${({ theme }) => (theme as Theme).spacing[3]};\n  background-color: ${({ theme }) => (theme as Theme).colors.primary};\n  color: ${({ theme }) => (theme as Theme).colors.white};\n  border-radius: ${({ theme }) => (theme as Theme).borders.radius.full};\n  padding: ${({ theme }) => (theme as Theme).spacing[1]};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  box-shadow: ${({ theme }) => (theme as Theme).shadows.dropdown};\n`;\n\nconst ContentInner = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: ${({ theme }) => (theme as Theme).spacing[3]};\n`;\n\nconst Header = styled.div`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => (theme as Theme).spacing[3]};\n`;\n\nconst Title = styled.h3`\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.base};\n  font-weight: ${({ theme }) => (theme as Theme).typography.fontWeight.bold};\n  color: ${({ theme }) => (theme as Theme).colors.text.secondary};\n  margin: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  flex: 1;\n`;\n\nconst Description = styled.p`\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xs};\n  color: ${({ theme }) => (theme as Theme).colors.text.secondary};\n  margin: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  line-height: ${({ theme }) => (theme as Theme).typography.lineHeight.normal};\n`;\n\nconst Metadata = styled.div`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => (theme as Theme).spacing[3]};\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xs};\n  color: ${({ theme }) => (theme as Theme).colors.text.secondary};\n  flex-wrap: wrap;\n`;\n\nconst FileType = styled.span`\n  font-weight: ${({ theme }) => (theme as Theme).typography.fontWeight.medium};\n  color: ${({ theme }) => (theme as Theme).colors.highlight};\n`;\n\nconst FileSize = styled.span`\n  color: ${({ theme }) => (theme as Theme).colors.text.muted};\n`;\n\nconst Dimensions = styled.span`\n  color: ${({ theme }) => (theme as Theme).colors.text.muted};\n`;\n\nconst ActionsWrapper = styled.div`\n  display: flex;\n  gap: ${({ theme }) => (theme as Theme).spacing[3]};\n  width: 100%;\n  \n  button {\n    flex: 1;\n  }\n`;\n\nconst PresetWrapper = styled.div`\n  padding: ${({ theme }) => (theme as Theme).spacing[3]};\n  padding-top: ${({ theme }) => (theme as Theme).spacing[2]};\n  border-top: 1px solid ${({ theme }) => (theme as Theme).colors.border.dotted};\n`;\n\nconst CardWrapper = styled.div<{ $isDraggable: boolean }>`\n  cursor: ${({ $isDraggable }) => ($isDraggable ? 'grab' : 'pointer')};\n  \n  &:active {\n    cursor: ${({ $isDraggable }) => ($isDraggable ? 'grabbing' : 'pointer')};\n  }\n`;\n\n/**\n * Convert Preset to PresetOption for PresetSelector compatibility\n */\nfunction presetToPresetOption(preset: Preset): PresetOption {\n  return {\n    ...preset,\n    dimensions: preset.customWidth && preset.customHeight\n      ? { width: preset.customWidth, height: preset.customHeight }\n      : undefined,\n  };\n}\n\n/**\n * AssetCard component for displaying DAM assets\n * Uses Card UI primitive from @intelligencebank/ui-primitives\n * Based on IntelligenceBank imagecard.jsx\n */\nexport const AssetCard = ({\n  asset,\n  selected = false,\n  onSelect,\n  onDownload,\n  onInsertLink,\n  onCopy,\n  onGoto,\n  allowedActions,\n  className = '',\n  'data-testid': testId,\n  dataTestId,\n  dataId,\n  draggable = false,\n  onDragStart,\n  onDragEnd,\n  presets,\n  selectedPresetId,\n  onPresetChange,\n}: AssetCardProps) => {\n  const actions = allowedActions || asset.allowedActions || [];\n  const isRestricted = isRestrictedAsset(asset.isPublic ?? false, actions);\n\n  const handleCardClick = () => {\n    if (onSelect && !isRestricted) {\n      onSelect(asset.id);\n    }\n  };\n\n  const handleDownload = (e: MouseEvent) => {\n    e.stopPropagation();\n    if (onDownload && !isRestricted) {\n      onDownload(asset.id);\n    }\n  };\n\n  const handleInsertLink = (e: MouseEvent) => {\n    e.stopPropagation();\n    if (onInsertLink && !isRestricted) {\n      onInsertLink(asset.id);\n    }\n  };\n\n  const handleCopy = (e: MouseEvent) => {\n    e.stopPropagation();\n    if (onCopy && !isRestricted) {\n      onCopy(asset.id);\n    }\n  };\n\n  const handleGoto = (e: MouseEvent) => {\n    e.stopPropagation();\n    if (onGoto && !isRestricted) {\n      onGoto(asset.id);\n    }\n  };\n\n  const handleDragStart = (e: DragEvent<HTMLDivElement>) => {\n    if (!draggable || isRestricted) {\n      e.preventDefault();\n      return;\n    }\n    \n    // Set drag data with asset information\n    e.dataTransfer.setData('application/json', JSON.stringify({\n      assetId: asset.id,\n      assetName: asset.name,\n      assetType: asset.fileType,\n      thumbnail: asset.thumbnail,\n    }));\n    e.dataTransfer.setData('text/plain', asset.name);\n    e.dataTransfer.effectAllowed = 'copy';\n    \n    if (onDragStart) {\n      onDragStart(asset, e);\n    }\n  };\n\n  const handleDragEnd = (e: DragEvent<HTMLDivElement>) => {\n    if (onDragEnd) {\n      onDragEnd(asset, e);\n    }\n  };\n\n  const handlePresetChange = (presetId: string) => {\n    if (onPresetChange) {\n      onPresetChange(presetId);\n    }\n  };\n\n  const showDownload = onDownload && actions.includes('resource_download');\n  const showInsertLink = onInsertLink && actions.includes('resource_link') && !isRestricted;\n  const showCopy = onCopy && actions.includes('copy');\n  const showGoto = onGoto && actions.includes('goto');\n  const showPresets = presets && presets.length > 0 && onPresetChange;\n  const hasActions = showDownload || showInsertLink || showCopy || showGoto;\n\n  // Convert presets to PresetOption format\n  const presetOptions: PresetOption[] = presets\n    ? presets.map(presetToPresetOption)\n    : [];\n\n  return (\n    <CardWrapper\n      $isDraggable={draggable && !isRestricted}\n      draggable={draggable && !isRestricted}\n      onDragStart={handleDragStart}\n      onDragEnd={handleDragEnd}\n    >\n      <Card\n        variant=\"elevated\"\n        interactive\n        selected={selected}\n        disabled={isRestricted}\n        onClick={handleCardClick}\n        className={className}\n        aria-label={`Asset: ${asset.name}`}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n      <MediaContainer>\n        <Card.Media src={asset.thumbnail} alt={asset.name} aspectRatio=\"16:9\" />\n        {selected && (\n          <SelectedBadge>\n            <Icon name=\"check_circle\" size=\"md\" />\n          </SelectedBadge>\n        )}\n        {isRestricted && (\n          <RestrictedBadge>\n            <Icon name=\"lock\" size=\"sm\" />\n          </RestrictedBadge>\n        )}\n      </MediaContainer>\n\n      <Card.Content>\n        <ContentInner>\n          <Header>\n            <Icon name={getFileTypeIcon(asset.filename || asset.name)} size=\"sm\" />\n            <Title title={asset.name}>{truncateFilename(asset.name, 30)}</Title>\n          </Header>\n\n          {asset.description && <Description>{asset.description}</Description>}\n\n          <Metadata>\n            <FileType>{asset.fileType.toUpperCase()}</FileType>\n            <FileSize>{formatFileSize(asset.fileSize)}</FileSize>\n            {asset.width && asset.height && (\n              <Dimensions>{formatDimensions(asset.width, asset.height)}</Dimensions>\n            )}\n          </Metadata>\n        </ContentInner>\n      </Card.Content>\n\n      {hasActions && (\n        <Card.Actions align=\"space-between\">\n          <ActionsWrapper>\n            {showDownload && (\n              <Button\n                variant=\"secondary\"\n                size=\"sm\"\n                onClick={handleDownload}\n                disabled={isRestricted}\n                aria-label=\"Download asset\"\n                data-testid={testId ? `${testId}-download` : undefined}\n              >\n                <Icon name=\"download\" size=\"sm\" />\n                Download\n              </Button>\n            )}\n            {showCopy && (\n              <Button\n                variant=\"secondary\"\n                size=\"sm\"\n                onClick={handleCopy}\n                disabled={isRestricted}\n                aria-label=\"Copy asset URL\"\n                data-testid={testId ? `${testId}-copy` : undefined}\n              >\n                <Icon name=\"content_copy\" size=\"sm\" />\n                Copy\n              </Button>\n            )}\n            {showGoto && (\n              <Button\n                variant=\"secondary\"\n                size=\"sm\"\n                onClick={handleGoto}\n                disabled={isRestricted}\n                aria-label=\"Go to asset\"\n                data-testid={testId ? `${testId}-goto` : undefined}\n              >\n                <Icon name=\"launch\" size=\"sm\" />\n                Go to\n              </Button>\n            )}\n            {showInsertLink && (\n              <Button\n                variant=\"primary\"\n                size=\"sm\"\n                onClick={handleInsertLink}\n                disabled={isRestricted}\n                aria-label=\"Insert link\"\n                data-testid={testId ? `${testId}-insert-link` : undefined}\n              >\n                <Icon name=\"link\" size=\"sm\" />\n                Insert Link\n              </Button>\n            )}\n          </ActionsWrapper>\n        </Card.Actions>\n      )}\n\n        {showPresets && (\n          <PresetWrapper onClick={(e) => e.stopPropagation()}>\n            <PresetSelector\n              presets={presetOptions}\n              value={selectedPresetId ?? null}\n              onChange={handlePresetChange}\n              size=\"sm\"\n              fullWidth\n              showDetails\n              placeholder=\"Select preset...\"\n              data-testid={testId ? `${testId}-preset-selector` : undefined}\n            />\n          </PresetWrapper>\n        )}\n      </Card>\n    </CardWrapper>\n  );\n};\n\nAssetCard.displayName = 'AssetCard';","import styled from '@emotion/styled';\nimport { Card, Icon } from '../';\nimport type { Theme } from '../../theme';\nimport type { Folder } from '../../types/folder';\nimport { isRestrictedAsset } from '../../utils';\n\nexport interface FolderCardProps {\n  /** Folder data */\n  folder: Folder;\n  /** Layout mode */\n  layout?: 'card' | 'list';\n  /** Whether the folder is selected */\n  selected?: boolean;\n  /** Callback when folder is selected */\n  onSelect?: (id: string) => void;\n  /** Callback when folder is clicked */\n  onClick?: (folder: Folder) => void;\n  /** Callback when folder is double-clicked */\n  onDoubleClick?: (folder: Folder) => void;\n  /** Custom className */\n  className?: string;\n  /** Test ID for testing (deprecated, use dataTestId) */\n  'data-testid'?: string;\n  /** Test identifier for automated testing */\n  dataTestId?: string;\n  /** Data identifier for ib-ui compatibility */\n  dataId?: string;\n}\n\nconst ListContainer = styled.div<{ $selected: boolean; $restricted: boolean }>`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => (theme as Theme).spacing[6]};\n  padding: ${({ theme }) => (theme as Theme).spacing[6]};\n  background-color: ${({ theme }) => (theme as Theme).colors.white};\n  border: ${({ theme }) => (theme as Theme).borders.width.medium} solid ${({ $selected, theme }) => ($selected ? (theme as Theme).colors.highlight : 'transparent')};\n  border-radius: ${({ theme }) => (theme as Theme).borders.radius.sm};\n  cursor: ${({ $restricted }) => ($restricted ? 'not-allowed' : 'pointer')};\n  transition: ${({ theme }) => (theme as Theme).transitions.fast};\n  opacity: ${({ $restricted }) => ($restricted ? 0.6 : 1)};\n\n  &:hover {\n    background-color: ${({ $restricted, theme }) => ($restricted ? (theme as Theme).colors.white : (theme as Theme).colors.border.light)};\n    box-shadow: ${({ $restricted, theme }) => ($restricted ? 'none' : (theme as Theme).shadows.dropdown)};\n  }\n\n  &:focus-visible {\n    outline: ${({ theme }) => (theme as Theme).borders.width.medium} solid ${({ theme }) => (theme as Theme).colors.highlight};\n    outline-offset: 2px;\n  }\n`;\n\nconst MediaContainer = styled.div`\n  position: relative;\n`;\n\nconst IconContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%;\n  aspect-ratio: 16 / 9;\n  background-color: ${({ theme }) => (theme as Theme).colors.border.light};\n  color: ${({ theme }) => (theme as Theme).colors.text.muted};\n`;\n\nconst ListThumbnail = styled.div`\n  flex-shrink: 0;\n  width: 64px;\n  height: 64px;\n  border-radius: ${({ theme }) => (theme as Theme).borders.radius.md};\n  overflow: hidden;\n  background-color: ${({ theme }) => (theme as Theme).colors.border.light};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst ListThumbnailImage = styled.img`\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n`;\n\nconst SelectedBadge = styled.div`\n  position: absolute;\n  top: ${({ theme }) => (theme as Theme).spacing[3]};\n  right: ${({ theme }) => (theme as Theme).spacing[3]};\n  background-color: ${({ theme }) => (theme as Theme).colors.highlight};\n  color: ${({ theme }) => (theme as Theme).colors.white};\n  border-radius: ${({ theme }) => (theme as Theme).borders.radius.full};\n  padding: ${({ theme }) => (theme as Theme).spacing[1]};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  box-shadow: ${({ theme }) => (theme as Theme).shadows.dropdown};\n`;\n\nconst RestrictedBadge = styled.div`\n  position: absolute;\n  top: ${({ theme }) => (theme as Theme).spacing[3]};\n  left: ${({ theme }) => (theme as Theme).spacing[3]};\n  background-color: ${({ theme }) => (theme as Theme).colors.primary};\n  color: ${({ theme }) => (theme as Theme).colors.white};\n  border-radius: ${({ theme }) => (theme as Theme).borders.radius.full};\n  padding: ${({ theme }) => (theme as Theme).spacing[1]};\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  box-shadow: ${({ theme }) => (theme as Theme).shadows.dropdown};\n`;\n\nconst ContentInner = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: ${({ theme }) => (theme as Theme).spacing[1]};\n`;\n\nconst ListContent = styled.div`\n  flex: 1;\n  min-width: 0;\n`;\n\nconst Title = styled.h3`\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.base};\n  font-weight: ${({ theme }) => (theme as Theme).typography.fontWeight.bold};\n  color: ${({ theme }) => (theme as Theme).colors.text.secondary};\n  margin: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n`;\n\nconst Metadata = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: ${({ theme }) => (theme as Theme).spacing[1]};\n`;\n\nconst Count = styled.p`\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xs};\n  color: ${({ theme }) => (theme as Theme).colors.text.secondary};\n  margin: 0;\n`;\n\nconst EmptyText = styled.p`\n  font-size: ${({ theme }) => (theme as Theme).typography.fontSize.xs};\n  color: ${({ theme }) => (theme as Theme).colors.text.muted};\n  font-style: italic;\n  margin: 0;\n`;\n\nconst ListNav = styled.div`\n  flex-shrink: 0;\n  color: ${({ theme }) => (theme as Theme).colors.border.medium};\n  display: flex;\n  align-items: center;\n`;\n\n/**\n * FolderCard component for displaying DAM folders\n * Uses Card UI primitive from @intelligencebank/ui-primitives\n * Based on IntelligenceBank foldercard.jsx\n */\nexport const FolderCard = ({\n  folder,\n  layout = 'card',\n  selected = false,\n  onSelect,\n  onClick,\n  onDoubleClick,\n  className = '',\n  'data-testid': testId,\n  dataTestId,\n  dataId,\n}: FolderCardProps) => {\n  const isRestricted = isRestrictedAsset(folder.isPublic, folder.allowedActions);\n  const isEmpty = folder.foldersCount === 0 && folder.resourcesCount === 0;\n\n  const handleClick = () => {\n    if (isRestricted) return;\n\n    if (onSelect) {\n      onSelect(folder.id);\n    }\n    if (onClick) {\n      onClick(folder);\n    }\n  };\n\n  const handleDoubleClick = () => {\n    if (isRestricted) return;\n\n    if (onDoubleClick) {\n      onDoubleClick(folder);\n    }\n  };\n\n  const renderCardMedia = () => {\n    if (folder.thumbnail) {\n      return <Card.Media src={folder.thumbnail} alt={folder.name} aspectRatio=\"16:9\" />;\n    }\n\n    return (\n      <IconContainer>\n        <Icon name=\"folder\" size=\"xl\" />\n      </IconContainer>\n    );\n  };\n\n  const renderListThumbnail = () => {\n    if (folder.thumbnail) {\n      return <ListThumbnailImage src={folder.thumbnail} alt={folder.name} loading=\"lazy\" />;\n    }\n\n    return <Icon name=\"folder\" size=\"lg\" />;\n  };\n\n  const renderCounts = () => {\n    if (isEmpty || isRestricted) {\n      return <EmptyText>Empty</EmptyText>;\n    }\n\n    return (\n      <>\n        {folder.foldersCount > 0 && (\n          <Count>\n            {folder.foldersCount} sub-folder{folder.foldersCount !== 1 ? 's' : ''}\n          </Count>\n        )}\n        {folder.resourcesCount > 0 && (\n          <Count>\n            {folder.resourcesCount} item{folder.resourcesCount !== 1 ? 's' : ''}\n          </Count>\n        )}\n      </>\n    );\n  };\n\n  if (layout === 'list') {\n    return (\n      <ListContainer\n        className={className}\n        $selected={selected}\n        $restricted={isRestricted}\n        onClick={handleClick}\n        onDoubleClick={handleDoubleClick}\n        role=\"button\"\n        tabIndex={0}\n        aria-label={`Folder: ${folder.name}`}\n        aria-disabled={isRestricted}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        <ListThumbnail>{renderListThumbnail()}</ListThumbnail>\n        <ListContent>\n          <Title>{folder.name}</Title>\n          <Metadata>{renderCounts()}</Metadata>\n        </ListContent>\n        <ListNav>\n          <Icon name=\"chevron_right\" size=\"md\" />\n        </ListNav>\n      </ListContainer>\n    );\n  }\n\n  return (\n    <Card\n      variant=\"elevated\"\n      interactive\n      selected={selected}\n      disabled={isRestricted}\n      onClick={handleClick}\n      className={className}\n      aria-label={`Folder: ${folder.name}`}\n      data-testid={dataTestId || testId}\n      data-id={dataId}\n      onDoubleClick={handleDoubleClick}\n    >\n      <MediaContainer>\n        {renderCardMedia()}\n        {selected && (\n          <SelectedBadge>\n            <Icon name=\"check_circle\" size=\"md\" />\n          </SelectedBadge>\n        )}\n        {isRestricted && (\n          <RestrictedBadge>\n            <Icon name=\"lock\" size=\"sm\" />\n          </RestrictedBadge>\n        )}\n      </MediaContainer>\n\n      <Card.Content>\n        <ContentInner>\n          <Title>{folder.name}</Title>\n          <Metadata>{renderCounts()}</Metadata>\n        </ContentInner>\n      </Card.Content>\n    </Card>\n  );\n};\n\nFolderCard.displayName = 'FolderCard';","import React, { useCallback, useMemo } from 'react';\nimport styled from '@emotion/styled';\nimport { Icon, Spinner } from '../';\n\nimport { AssetCard } from '../AssetCard';\nimport { FolderCard } from '../FolderCard';\n\nimport type { AssetBrowserProps, PaginationInfo } from './AssetBrowser.types';\nimport type { Asset } from '../../types/asset';\nimport type { Folder } from '../../types/folder';\n\nconst BrowserContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  min-height: 0;\n`;\n\nconst BrowserWrapper = styled.div`\n  position: relative;\n  flex: 1;\n  min-height: 0;\n`;\n\nconst BrowserContent = styled.div`\n  flex: 1;\n  overflow-y: auto;\n  padding: 16px;\n`;\n\nconst GridLayout = styled.div`\n  display: grid;\n  gap: 16px;\n  grid-template-columns: repeat(1, 1fr);\n\n  @media (min-width: 576px) {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  @media (min-width: 768px) {\n    grid-template-columns: repeat(3, 1fr);\n  }\n\n  @media (min-width: 992px) {\n    grid-template-columns: repeat(4, 1fr);\n  }\n`;\n\nconst ListLayout = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n\n  & > * {\n    width: 100%;\n  }\n`;\n\nconst SectionDivider = styled.div`\n  height: 1px;\n  background-color: #f5f5f5;\n  margin: 24px 0;\n`;\n\nconst LoadingOverlay = styled.div`\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background-color: rgba(255, 255, 255, 0.8);\n  z-index: 10;\n  border-radius: 8px;\n`;\n\nconst EmptyStateContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 48px;\n  text-align: center;\n  color: rgba(0, 0, 0, 0.7);\n  min-height: 200px;\n`;\n\nconst EmptyStateIcon = styled.div`\n  font-size: 48px;\n  color: #949494;\n  margin-bottom: 16px;\n`;\n\nconst EmptyStateMessage = styled.p`\n  font-size: 14px;\n  margin: 0;\n`;\n\nconst PaginationContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  padding: 16px;\n  border-top: 1px solid #f5f5f5;\n  background-color: #fff;\n`;\n\nconst PaginationButton = styled.button<{ $active?: boolean }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 36px;\n  height: 36px;\n  padding: 0 8px;\n  border: 1px solid #f5f5f5;\n  border-radius: 8px;\n  background-color: ${({ $active }) => ($active ? 'var(--color-highlight, var(--colour-highlight, #F68D32))' : '#fff')};\n  color: ${({ $active }) => ($active ? 'var(--color-highlight-text, var(--colour-highlight-text, #E7E7E7))' : 'rgba(0, 0, 0, 0.87)')};\n  cursor: pointer;\n  transition: all 0.2s ease-out;\n\n  &:hover:not(:disabled) {\n    background-color: ${({ $active }) => ($active ? 'var(--color-highlight, var(--colour-highlight, #F68D32))' : '#f5f5f5')};\n    border-color: #e0e0e0;\n  }\n\n  &:disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n  }\n`;\n\nconst PaginationPages = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n`;\n\nconst Ellipsis = styled.span`\n  color: #949494;\n  padding: 0 4px;\n`;\n\nconst CardWrapper = styled.div`\n  height: 100%;\n`;\n\n/**\n * Generate visible page numbers for pagination\n */\nconst getVisiblePages = (\n  currentPage: number,\n  totalPages: number,\n  maxVisible: number = 5\n): (number | 'ellipsis')[] => {\n  if (totalPages <= maxVisible) {\n    return Array.from({ length: totalPages }, (_, i) => i + 1);\n  }\n\n  const pages: (number | 'ellipsis')[] = [];\n  const halfVisible = Math.floor(maxVisible / 2);\n\n  let startPage = Math.max(1, currentPage - halfVisible);\n  let endPage = Math.min(totalPages, currentPage + halfVisible);\n\n  if (currentPage <= halfVisible) {\n    endPage = maxVisible - 1;\n  } else if (currentPage >= totalPages - halfVisible) {\n    startPage = totalPages - maxVisible + 2;\n  }\n\n  if (startPage > 1) {\n    pages.push(1);\n    if (startPage > 2) {\n      pages.push('ellipsis');\n    }\n  }\n\n  for (let i = startPage; i <= endPage; i++) {\n    pages.push(i);\n  }\n\n  if (endPage < totalPages) {\n    if (endPage < totalPages - 1) {\n      pages.push('ellipsis');\n    }\n    pages.push(totalPages);\n  }\n\n  return pages;\n};\n\n/**\n * Pagination component\n */\nconst Pagination: React.FC<{\n  pagination: PaginationInfo;\n  onPageChange: (page: number) => void;\n}> = ({ pagination, onPageChange }) => {\n  const { currentPage, totalPages } = pagination;\n  const visiblePages = getVisiblePages(currentPage, totalPages);\n\n  const handleFirst = () => onPageChange(1);\n  const handlePrev = () => onPageChange(Math.max(1, currentPage - 1));\n  const handleNext = () => onPageChange(Math.min(totalPages, currentPage + 1));\n  const handleLast = () => onPageChange(totalPages);\n\n  return (\n    <PaginationContainer role=\"navigation\" aria-label=\"Pagination\">\n      <PaginationButton\n        onClick={handleFirst}\n        disabled={currentPage === 1}\n        aria-label=\"Go to first page\"\n      >\n        <Icon name=\"keyboard_double_arrow_left\" size=\"sm\" />\n      </PaginationButton>\n      <PaginationButton\n        onClick={handlePrev}\n        disabled={currentPage === 1}\n        aria-label=\"Go to previous page\"\n      >\n        <Icon name=\"keyboard_arrow_left\" size=\"sm\" />\n      </PaginationButton>\n\n      <PaginationPages>\n        {visiblePages.map((page, index) =>\n          page === 'ellipsis' ? (\n            <Ellipsis key={`ellipsis-${index}`}>…</Ellipsis>\n          ) : (\n            <PaginationButton\n              key={page}\n              $active={page === currentPage}\n              onClick={() => onPageChange(page)}\n              aria-label={`Go to page ${page}`}\n              aria-current={page === currentPage ? 'page' : undefined}\n            >\n              {page}\n            </PaginationButton>\n          )\n        )}\n      </PaginationPages>\n\n      <PaginationButton\n        onClick={handleNext}\n        disabled={currentPage === totalPages}\n        aria-label=\"Go to next page\"\n      >\n        <Icon name=\"keyboard_arrow_right\" size=\"sm\" />\n      </PaginationButton>\n      <PaginationButton\n        onClick={handleLast}\n        disabled={currentPage === totalPages}\n        aria-label=\"Go to last page\"\n      >\n        <Icon name=\"keyboard_double_arrow_right\" size=\"sm\" />\n      </PaginationButton>\n    </PaginationContainer>\n  );\n};\n\n/**\n * Empty state component\n */\nconst EmptyState: React.FC<{ message: string }> = ({ message }) => (\n  <EmptyStateContainer>\n    <EmptyStateIcon>\n      <Icon name=\"folder_off\" size=\"lg\" />\n    </EmptyStateIcon>\n    <EmptyStateMessage>{message}</EmptyStateMessage>\n  </EmptyStateContainer>\n);\n\n/**\n * AssetBrowser component for browsing folders and assets\n * Combines FolderCard and AssetCard with grid/list layouts and pagination\n */\nexport const AssetBrowser: React.FC<AssetBrowserProps> = ({\n  folders,\n  assets,\n  layout = 'grid',\n  columns,\n  loading = false,\n  emptyMessage = 'No items to display',\n  selectedIds = [],\n  selectionMode = 'none',\n  onFolderClick,\n  onAssetClick,\n  onSelectionChange,\n  onDownload,\n  onInsertLink,\n  pagination,\n  onPageChange,\n  className = '',\n  'data-testid': testId,\n  dataTestId,\n  dataId,\n}) => {\n  const isEmpty = folders.length === 0 && assets.length === 0;\n\n  // Handle item selection\n  const handleSelect = useCallback(\n    (id: string) => {\n      if (selectionMode === 'none' || !onSelectionChange) {\n        return;\n      }\n\n      if (selectionMode === 'single') {\n        onSelectionChange([id]);\n      } else {\n        const newSelection = selectedIds.includes(id)\n          ? selectedIds.filter((selectedId) => selectedId !== id)\n          : [...selectedIds, id];\n        onSelectionChange(newSelection);\n      }\n    },\n    [selectionMode, selectedIds, onSelectionChange]\n  );\n\n  // Handle folder click\n  const handleFolderClick = useCallback(\n    (folder: Folder) => {\n      if (onFolderClick) {\n        onFolderClick(folder);\n      }\n    },\n    [onFolderClick]\n  );\n\n  // Handle folder selection\n  const handleFolderSelect = useCallback(\n    (id: string) => {\n      handleSelect(id);\n    },\n    [handleSelect]\n  );\n\n  // Handle asset click\n  const handleAssetClick = useCallback(\n    (asset: Asset) => {\n      handleSelect(asset.id);\n      if (onAssetClick) {\n        onAssetClick(asset);\n      }\n    },\n    [handleSelect, onAssetClick]\n  );\n\n  // Handle asset download\n  const handleDownload = useCallback(\n    (id: string) => {\n      const asset = assets.find((a) => a.id === id);\n      if (asset && onDownload) {\n        onDownload(asset);\n      }\n    },\n    [assets, onDownload]\n  );\n\n  // Handle insert link\n  const handleInsertLink = useCallback(\n    (id: string) => {\n      const asset = assets.find((a) => a.id === id);\n      if (asset && onInsertLink) {\n        onInsertLink(asset);\n      }\n    },\n    [assets, onInsertLink]\n  );\n\n  // Calculate grid style based on columns prop\n  const gridStyle = useMemo(() => {\n    if (layout !== 'grid' || !columns) {\n      return undefined;\n    }\n\n    if (typeof columns === 'number') {\n      return { gridTemplateColumns: `repeat(${columns}, 1fr)` };\n    }\n\n    return undefined;\n  }, [layout, columns]);\n\n  // Handle keyboard navigation\n  const handleKeyDown = useCallback(\n    (e: React.KeyboardEvent) => {\n      if (!pagination || !onPageChange) return;\n\n      const { currentPage, totalPages } = pagination;\n\n      switch (e.key) {\n        case 'ArrowLeft':\n          if (currentPage > 1) {\n            onPageChange(currentPage - 1);\n          }\n          break;\n        case 'ArrowRight':\n          if (currentPage < totalPages) {\n            onPageChange(currentPage + 1);\n          }\n          break;\n        case 'Home':\n          onPageChange(1);\n          break;\n        case 'End':\n          onPageChange(totalPages);\n          break;\n      }\n    },\n    [pagination, onPageChange]\n  );\n\n  const hasFoldersAndAssets = folders.length > 0 && assets.length > 0;\n  const LayoutComponent = layout === 'grid' ? GridLayout : ListLayout;\n\n  return (\n    <BrowserContainer\n      className={className}\n      data-testid={dataTestId || testId}\n      data-id={dataId}\n      onKeyDown={handleKeyDown}\n      tabIndex={0}\n    >\n      <BrowserWrapper>\n        {loading && (\n          <LoadingOverlay data-testid=\"loading-overlay\">\n            <Spinner size=\"lg\" label=\"Loading items...\" />\n          </LoadingOverlay>\n        )}\n\n        <BrowserContent>\n          {isEmpty && !loading ? (\n            <EmptyState message={emptyMessage} />\n          ) : (\n            <>\n              {/* Folders section */}\n              {folders.length > 0 && (\n                <LayoutComponent style={gridStyle} role=\"list\" aria-label=\"Folders\">\n                  {folders.map((folder) => (\n                    <CardWrapper key={folder.id} role=\"listitem\">\n                      <FolderCard\n                        folder={folder}\n                        layout={layout === 'list' ? 'list' : 'card'}\n                        selected={selectedIds.includes(folder.id)}\n                        onSelect={handleFolderSelect}\n                        onClick={handleFolderClick}\n                        onDoubleClick={handleFolderClick}\n                        data-testid={`folder-${folder.id}`}\n                      />\n                    </CardWrapper>\n                  ))}\n                </LayoutComponent>\n              )}\n\n              {/* Divider between folders and assets */}\n              {hasFoldersAndAssets && <SectionDivider />}\n\n              {/* Assets section */}\n              {assets.length > 0 && (\n                <LayoutComponent style={gridStyle} role=\"list\" aria-label=\"Assets\">\n                  {assets.map((asset) => (\n                    <CardWrapper key={asset.id} role=\"listitem\">\n                      <AssetCard\n                        asset={asset}\n                        selected={selectedIds.includes(asset.id)}\n                        onSelect={() => handleAssetClick(asset)}\n                        onDownload={onDownload ? handleDownload : undefined}\n                        onInsertLink={onInsertLink ? handleInsertLink : undefined}\n                        data-testid={`asset-${asset.id}`}\n                      />\n                    </CardWrapper>\n                  ))}\n                </LayoutComponent>\n              )}\n            </>\n          )}\n        </BrowserContent>\n      </BrowserWrapper>\n\n      {pagination && onPageChange && pagination.totalPages > 1 && (\n        <Pagination pagination={pagination} onPageChange={onPageChange} />\n      )}\n    </BrowserContainer>\n  );\n};\n\nAssetBrowser.displayName = 'AssetBrowser';","import { forwardRef, useCallback } from 'react';\nimport { Button, Message } from '../';\n\nimport styles from './BrowserLoginConfirmation.module.css';\nimport type { BrowserLoginConfirmationProps } from './BrowserLoginConfirmation.types';\n\n/**\n * BrowserLoginConfirmation component\n *\n * Displays a confirmation screen for SSO/browser-based login flow.\n * Shows instructions and provides buttons to continue or go back.\n */\nexport const BrowserLoginConfirmation = forwardRef<HTMLDivElement, BrowserLoginConfirmationProps>(\n  (\n    {\n      logoSrc,\n      logoAlt = 'Logo',\n      loginUrl,\n      onOpenBrowser,\n      onContinue,\n      onBack,\n      error,\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    // Handle \"here\" link click\n    const handleOpenBrowser = useCallback(\n      (e: React.MouseEvent<HTMLAnchorElement>) => {\n        e.preventDefault();\n        if (onOpenBrowser) {\n          onOpenBrowser();\n        } else if (loginUrl) {\n          window.open(loginUrl, '_blank');\n        }\n      },\n      [onOpenBrowser, loginUrl]\n    );\n\n    const wrapperClassNames = [styles.wrapper, className].filter(Boolean).join(' ');\n\n    return (\n      <div ref={ref} className={wrapperClassNames} data-testid={dataTestId || testId} data-id={dataId}>\n        {/* Logo positioned above the white container */}\n        {logoSrc && (\n          <div className={styles.logo} data-testid={testId && `${testId}-logo`}>\n            <img src={logoSrc} alt={logoAlt} />\n          </div>\n        )}\n\n        <div className={styles.container} data-testid={testId && `${testId}-container`}>\n          {/* Error message */}\n          {error && (\n            <Message\n              variant=\"error\"\n              mode=\"banner\"\n              data-testid={testId && `${testId}-error`}\n            >\n              {error}\n            </Message>\n          )}\n\n          {/* Instructions */}\n          <div className={styles.message} data-testid={testId && `${testId}-message`}>\n            <p>\n              A new tab should now open automatically. If not, click{' '}\n              <a href={loginUrl || '#'} onClick={handleOpenBrowser} className={styles.link}>\n                here\n              </a>{' '}\n              to open it manually.\n            </p>\n            <p>\n              Once you are logged in via the browser, click <strong>Continue</strong>. To return to the standard Login page, click <strong>Back</strong>.\n            </p>\n          </div>\n\n          {/* Buttons */}\n          <div className={styles.buttons} data-testid={testId && `${testId}-buttons`}>\n            <Button\n              variant=\"secondary\"\n              onClick={onBack}\n              fullWidth\n              data-testid={testId && `${testId}-back-button`}\n            >\n              Back\n            </Button>\n            <Button\n              variant=\"primary\"\n              onClick={onContinue}\n              fullWidth\n              data-testid={testId && `${testId}-continue-button`}\n            >\n              Continue\n            </Button>\n          </div>\n        </div>\n      </div>\n    );\n  }\n);\n\nBrowserLoginConfirmation.displayName = 'BrowserLoginConfirmation';\n\nexport default BrowserLoginConfirmation;\n","import { useCallback, useMemo, forwardRef } from 'react';\n\nimport { Multiselect } from '../';\n\nimport styles from './FiltersPanel.module.css';\nimport type { FiltersPanelProps } from './FiltersPanel.types';\n\n/**\n * FiltersPanel component for displaying filter controls in a slide-down panel\n * \n * Features:\n * - Slide-down animation when opening/closing\n * - Row of Multiselect components for each filter\n * - Clear All button to reset all filters\n * - Close button to collapse the panel\n * - Responsive grid layout for filter dropdowns\n * - Count/badge showing number of active filters\n *\n * @example\n * ```tsx\n * const filters = [\n *   {\n *     key: 'type',\n *     label: 'Type',\n *     options: [\n *       { value: 'image', label: 'Image' },\n *       { value: 'video', label: 'Video' },\n *     ],\n *   },\n *   {\n *     key: 'size',\n *     label: 'Size',\n *     options: [\n *       { value: 'small', label: 'Small' },\n *       { value: 'large', label: 'Large' },\n *     ],\n *   },\n * ];\n *\n * const [filterValues, setFilterValues] = useState<Record<string, string[]>>({});\n *\n * <FiltersPanel\n *   isOpen={showFilters}\n *   onClose={() => setShowFilters(false)}\n *   filters={filters}\n *   values={filterValues}\n *   onChange={(key, values) => setFilterValues(prev => ({ ...prev, [key]: values }))}\n *   onClearAll={() => setFilterValues({})}\n * />\n * ```\n */\nexport const FiltersPanel = forwardRef<HTMLDivElement, FiltersPanelProps>(\n  (\n    {\n      isOpen,\n      onClose,\n      filters,\n      values,\n      onChange,\n      onClearAll,\n      clearButtonLabel = 'Clear All',\n      closeButtonLabel = 'Close',\n      title = 'Filters',\n      showFilterCount = true,\n      className,\n      testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    // Calculate total active filter count\n    const activeFilterCount = useMemo(() => {\n      return Object.values(values).reduce((count, filterValues) => {\n        return count + (filterValues?.length || 0);\n      }, 0);\n    }, [values]);\n\n    // Handle filter value change\n    const handleFilterChange = useCallback(\n      (filterKey: string) => (newValues: string[]) => {\n        onChange(filterKey, newValues);\n      },\n      [onChange]\n    );\n\n    // Handle clear all click\n    const handleClearAll = useCallback(() => {\n      onClearAll();\n    }, [onClearAll]);\n\n    // Handle close click\n    const handleClose = useCallback(() => {\n      onClose();\n    }, [onClose]);\n\n    // Build container class names\n    const containerClassNames = [styles.filtersPanel, className]\n      .filter(Boolean)\n      .join(' ');\n\n    // Resolve test ID with new props taking precedence\n    const resolvedTestId = dataTestId || testId;\n\n    return (\n      <div\n        ref={ref}\n        className={containerClassNames}\n        data-open={isOpen}\n        data-testid={resolvedTestId}\n        data-id={dataId}\n        role=\"region\"\n        aria-label={title}\n        aria-hidden={!isOpen}\n      >\n        {/* Header with title, count, and actions */}\n        <div className={styles.header}>\n          <div className={styles.headerLeft}>\n            <h3 className={styles.title}>{title}</h3>\n            {showFilterCount && activeFilterCount > 0 && (\n              <span\n                className={styles.filterCount}\n                aria-label={`${activeFilterCount} active filters`}\n              >\n                {activeFilterCount}\n              </span>\n            )}\n          </div>\n          <div className={styles.actions}>\n            <button\n              type=\"button\"\n              className={styles.clearButton}\n              onClick={handleClearAll}\n              data-has-selections={activeFilterCount > 0}\n              disabled={activeFilterCount === 0}\n              aria-label={clearButtonLabel}\n              data-testid={resolvedTestId ? `${resolvedTestId}-clear` : undefined}\n            >\n              {clearButtonLabel}\n            </button>\n            <button\n              type=\"button\"\n              className={styles.closeButton}\n              onClick={handleClose}\n              aria-label={closeButtonLabel}\n              data-testid={resolvedTestId ? `${resolvedTestId}-close` : undefined}\n            >\n              {closeButtonLabel}\n            </button>\n          </div>\n        </div>\n\n        {/* Filters grid */}\n        <div className={styles.filtersScrollArea}>\n          <div className={styles.filtersGrid}>\n            {filters.map((filter) => {\n              const filterValues = values[filter.key] || [];\n              \n              return (\n                <div\n                  key={filter.key}\n                  className={styles.filterItem}\n                  data-testid={resolvedTestId ? `${resolvedTestId}-filter-${filter.key}` : undefined}\n                >\n                  <label className={styles.filterLabel}>\n                    {filter.label}\n                  </label>\n                  <Multiselect\n                    options={filter.options}\n                    value={filterValues}\n                    onChange={handleFilterChange(filter.key)}\n                    placeholder={filter.placeholder || `Select ${filter.label.toLowerCase()}...`}\n                    size=\"sm\"\n                    fullWidth\n                    data-testid={resolvedTestId ? `${resolvedTestId}-multiselect-${filter.key}` : undefined}\n                  />\n                </div>\n              );\n            })}\n          </div>\n        </div>\n      </div>\n    );\n  }\n);\n\nFiltersPanel.displayName = 'FiltersPanel';\n\nexport default FiltersPanel;","import React, { useCallback, useMemo } from 'react';\nimport { Icon } from '../';\nimport type { FolderTreeProps, TreeFolder, IndentSize } from './FolderTree.types';\n\nimport styles from './FolderTree.module.css';\n\n/**\n * Get the CSS class for indentation based on size\n */\nconst getIndentClass = (size: IndentSize): string => {\n  switch (size) {\n    case 'sm':\n      return styles.indentSm ?? '';\n    case 'lg':\n      return styles.indentLg ?? '';\n    default:\n      return styles.indentMd ?? '';\n  }\n};\n\n/**\n * TreeItem component for rendering individual folder items\n */\ninterface TreeItemInternalProps {\n  folder: TreeFolder;\n  depth: number;\n  isSelected: boolean;\n  isExpanded: boolean;\n  indentSize: IndentSize;\n  showCounts: boolean;\n  expandedIds: string[];\n  selectedId: string | null | undefined;\n  onSelect: (folder: TreeFolder) => void;\n  onToggle: (folderId: string, expand: boolean) => void;\n  onLoadChildren?: (folderId: string) => Promise<void>;\n}\n\nconst TreeItem: React.FC<TreeItemInternalProps> = ({\n  folder,\n  depth,\n  isSelected,\n  isExpanded,\n  indentSize,\n  showCounts,\n  expandedIds,\n  selectedId,\n  onSelect,\n  onToggle,\n  onLoadChildren,\n}) => {\n  const hasChildren = (folder.children && folder.children.length > 0) || \n                      (folder.foldersCount !== undefined && folder.foldersCount > 0);\n  const isLoading = folder.isLoading || false;\n\n  const handleClick = useCallback(() => {\n    onSelect(folder);\n  }, [folder, onSelect]);\n\n  const handleToggle = useCallback(async (e: React.MouseEvent | React.KeyboardEvent) => {\n    e.stopPropagation();\n    \n    if (isLoading) return;\n    \n    const newExpandedState = !isExpanded;\n    \n    if (newExpandedState && onLoadChildren && !folder.children?.length) {\n      await onLoadChildren(folder.id);\n    }\n    \n    onToggle(folder.id, newExpandedState);\n  }, [folder.id, folder.children?.length, isExpanded, isLoading, onToggle, onLoadChildren]);\n\n  const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n    switch (e.key) {\n      case 'Enter':\n      case ' ':\n        e.preventDefault();\n        handleClick();\n        break;\n      case 'ArrowRight':\n        e.preventDefault();\n        if (!isExpanded && hasChildren) {\n          handleToggle(e);\n        }\n        break;\n      case 'ArrowLeft':\n        e.preventDefault();\n        if (isExpanded && hasChildren) {\n          handleToggle(e);\n        }\n        break;\n      default:\n        break;\n    }\n  }, [handleClick, handleToggle, isExpanded, hasChildren]);\n\n  const handleToggleKeyDown = useCallback((e: React.KeyboardEvent) => {\n    if (e.key === 'Enter' || e.key === ' ') {\n      e.preventDefault();\n      handleToggle(e);\n    }\n  }, [handleToggle]);\n\n  const indentClass = getIndentClass(indentSize);\n\n  return (\n    <li\n      className={styles.treeItem}\n      role=\"treeitem\"\n      aria-expanded={hasChildren ? isExpanded : undefined}\n      aria-selected={isSelected}\n    >\n      <div\n        className={`${styles.treeItemRow} ${indentClass} ${isSelected ? styles.selected : ''}`}\n        style={{ '--depth': depth } as React.CSSProperties}\n        onClick={handleClick}\n        onKeyDown={handleKeyDown}\n        tabIndex={0}\n        aria-label={`Folder: ${folder.name}`}\n        data-folder-id={folder.id}\n      >\n        {hasChildren ? (\n          isLoading ? (\n            <div className={styles.loadingIndicator} aria-label=\"Loading\">\n              <div className={styles.spinner} />\n            </div>\n          ) : (\n            <button\n              className={styles.toggleButton}\n              onClick={handleToggle}\n              onKeyDown={handleToggleKeyDown}\n              aria-label={isExpanded ? 'Collapse folder' : 'Expand folder'}\n              tabIndex={-1}\n            >\n              <Icon\n                name=\"chevron_right\"\n                size=\"sm\"\n                className={`${styles.toggleIcon} ${isExpanded ? styles.expanded : ''}`}\n              />\n            </button>\n          )\n        ) : (\n          <div className={styles.togglePlaceholder} aria-hidden=\"true\" />\n        )}\n\n        <div className={`${styles.folderIcon} ${isSelected ? styles.selected : ''}`}>\n          <Icon name={isExpanded ? 'folder_open' : 'folder'} size=\"sm\" />\n        </div>\n\n        <span className={`${styles.folderName} ${isSelected ? styles.selected : ''}`}>\n          {folder.name}\n        </span>\n\n        {showCounts && (\n          <div className={styles.counts}>\n            {folder.foldersCount !== undefined && folder.foldersCount > 0 && (\n              <span className={styles.countBadge}>\n                <Icon name=\"folder\" size=\"sm\" className={styles.countIcon} />\n                {folder.foldersCount}\n              </span>\n            )}\n            {folder.resourcesCount !== undefined && folder.resourcesCount > 0 && (\n              <span className={styles.countBadge}>\n                <Icon name=\"insert_drive_file\" size=\"sm\" className={styles.countIcon} />\n                {folder.resourcesCount}\n              </span>\n            )}\n          </div>\n        )}\n      </div>\n\n      {hasChildren && folder.children && folder.children.length > 0 && (\n        <ul\n          className={`${styles.treeListNested} ${styles.childrenContainer} ${!isExpanded ? styles.collapsed : ''}`}\n          role=\"group\"\n        >\n          {folder.children.map((child) => (\n            <TreeItem\n              key={child.id}\n              folder={child}\n              depth={depth + 1}\n              isSelected={selectedId === child.id}\n              isExpanded={expandedIds.includes(child.id)}\n              indentSize={indentSize}\n              showCounts={showCounts}\n              expandedIds={expandedIds}\n              selectedId={selectedId}\n              onSelect={onSelect}\n              onToggle={onToggle}\n              onLoadChildren={onLoadChildren}\n            />\n          ))}\n        </ul>\n      )}\n    </li>\n  );\n};\n\n/**\n * FolderTree component for hierarchical folder navigation\n * Based on IntelligenceBank folder navigation patterns\n */\nexport const FolderTree: React.FC<FolderTreeProps> = ({\n  folders,\n  selectedId = null,\n  expandedIds = [],\n  onSelect,\n  onToggleExpand,\n  onLoadChildren,\n  showCounts = false,\n  showRoot = false,\n  rootName = 'Home',\n  indentSize = 'md',\n  loading = false,\n  emptyMessage = 'No folders found',\n  className = '',\n  'data-testid': testId,\n  dataTestId,\n  dataId,\n}) => {\n  const handleSelect = useCallback((folder: TreeFolder) => {\n    onSelect?.(folder);\n  }, [onSelect]);\n\n  const handleToggle = useCallback((folderId: string, expand: boolean) => {\n    onToggleExpand?.(folderId, expand);\n  }, [onToggleExpand]);\n\n  const rootFolder: TreeFolder = useMemo(() => ({\n    id: 'root',\n    name: rootName,\n    parentId: null,\n    children: folders,\n    foldersCount: folders.length,\n  }), [rootName, folders]);\n\n  const isRootSelected = selectedId === 'root';\n  const isRootExpanded = expandedIds.includes('root') || !showRoot;\n\n  // Resolve test ID with new props taking precedence\n  const resolvedTestId = dataTestId || testId;\n\n  if (loading) {\n    return (\n      <div\n        className={`${styles.tree} ${className}`}\n        data-testid={resolvedTestId}\n        data-id={dataId}\n        role=\"tree\"\n        aria-label=\"Folder tree loading\"\n      >\n        <div className={styles.loadingState}>\n          <div className={styles.loadingSpinner} aria-label=\"Loading folders\" />\n        </div>\n      </div>\n    );\n  }\n\n  if (folders.length === 0 && !showRoot) {\n    return (\n      <div\n        className={`${styles.tree} ${className}`}\n        data-testid={resolvedTestId}\n        data-id={dataId}\n        role=\"tree\"\n        aria-label=\"Empty folder tree\"\n      >\n        <div className={styles.emptyState}>\n          <Icon name=\"folder_off\" size=\"xl\" className={styles.emptyIcon} />\n          <p className={styles.emptyMessage}>{emptyMessage}</p>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={`${styles.tree} ${className}`}\n      data-testid={resolvedTestId}\n      data-id={dataId}\n    >\n      <ul className={styles.treeList} role=\"tree\" aria-label=\"Folder navigation\">\n        {showRoot ? (\n          <li\n            className={`${styles.treeItem} ${styles.rootItem}`}\n            role=\"treeitem\"\n            aria-expanded={isRootExpanded}\n            aria-selected={isRootSelected}\n          >\n            <div\n              className={`${styles.treeItemRow} ${isRootSelected ? styles.selected : ''}`}\n              onClick={() => handleSelect(rootFolder)}\n              onKeyDown={(e) => {\n                if (e.key === 'Enter' || e.key === ' ') {\n                  e.preventDefault();\n                  handleSelect(rootFolder);\n                }\n              }}\n              tabIndex={0}\n              aria-label={`Root folder: ${rootName}`}\n              data-folder-id=\"root\"\n            >\n              <button\n                className={styles.toggleButton}\n                onClick={(e) => {\n                  e.stopPropagation();\n                  handleToggle('root', !isRootExpanded);\n                }}\n                aria-label={isRootExpanded ? 'Collapse root folder' : 'Expand root folder'}\n                tabIndex={-1}\n              >\n                <Icon\n                  name=\"chevron_right\"\n                  size=\"sm\"\n                  className={`${styles.toggleIcon} ${isRootExpanded ? styles.expanded : ''}`}\n                />\n              </button>\n              <div className={`${styles.folderIcon} ${isRootSelected ? styles.selected : ''}`}>\n                <Icon name={isRootExpanded ? 'folder_open' : 'folder'} size=\"sm\" />\n              </div>\n              <span className={`${styles.folderName} ${isRootSelected ? styles.selected : ''}`}>\n                {rootName}\n              </span>\n              {showCounts && folders.length > 0 && (\n                <div className={styles.counts}>\n                  <span className={styles.countBadge}>\n                    <Icon name=\"folder\" size=\"sm\" className={styles.countIcon} />\n                    {folders.length}\n                  </span>\n                </div>\n              )}\n            </div>\n            {isRootExpanded && folders.length > 0 && (\n              <ul className={styles.treeListNested} role=\"group\">\n                {folders.map((folder) => (\n                  <TreeItem\n                    key={folder.id}\n                    folder={folder}\n                    depth={1}\n                    isSelected={selectedId === folder.id}\n                    isExpanded={expandedIds.includes(folder.id)}\n                    indentSize={indentSize}\n                    showCounts={showCounts}\n                    expandedIds={expandedIds}\n                    selectedId={selectedId}\n                    onSelect={handleSelect}\n                    onToggle={handleToggle}\n                    onLoadChildren={onLoadChildren}\n                  />\n                ))}\n              </ul>\n            )}\n          </li>\n        ) : (\n          folders.map((folder) => (\n            <TreeItem\n              key={folder.id}\n              folder={folder}\n              depth={0}\n              isSelected={selectedId === folder.id}\n              isExpanded={expandedIds.includes(folder.id)}\n              indentSize={indentSize}\n              showCounts={showCounts}\n              expandedIds={expandedIds}\n              selectedId={selectedId}\n              onSelect={handleSelect}\n              onToggle={handleToggle}\n              onLoadChildren={onLoadChildren}\n            />\n          ))\n        )}\n      </ul>\n    </div>\n  );\n};\n\nFolderTree.displayName = 'FolderTree';","import { useCallback, useState, useId, forwardRef } from 'react';\nimport { Input, Button, Message, Checkbox } from '../';\n\nimport type { LoginFormProps, LoginCredentials } from './LoginForm.types';\nimport styles from './LoginForm.module.css';\n\n/**\n * LoginForm component for authentication\n * Supports credential-based login with optional browser/SSO login toggle\n */\nexport const LoginForm = forwardRef<HTMLFormElement, LoginFormProps>(\n  (\n    {\n      loginMethod = 'credentials',\n      showSsoToggle = true,\n      onSubmit,\n      onSsoLogin,\n      error,\n      loading = false,\n      logoSrc,\n      logoAlt = 'Logo',\n      urlLabel = 'URL (without https://)',\n      description = 'Login to your IntelligenceBank account by entering your credentials below.',\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const formId = useId();\n    \n    // Form state\n    const [url, setUrl] = useState('');\n    const [email, setEmail] = useState('');\n    const [password, setPassword] = useState('');\n    const [isCustomUrl, setIsCustomUrl] = useState(false);\n    const [isBrowserLogin, setIsBrowserLogin] = useState(loginMethod === 'sso');\n\n    // Show credentials fields when not in browser login mode\n    const showCredentials = !isBrowserLogin;\n    \n    // Show browser login checkbox when loginMethod allows it and showSsoToggle is true\n    const showBrowserLoginOption = showSsoToggle && (loginMethod === 'both' || loginMethod === 'sso');\n\n    // Compute full URL\n    const getFullUrl = useCallback((urlValue: string): string => {\n      const trimmed = urlValue.trim().replace(/^https?:\\/\\//, '');\n      if (!isCustomUrl && trimmed) {\n        return trimmed + '.intelligencebank.com';\n      }\n      return trimmed;\n    }, [isCustomUrl]);\n\n    // Validation\n    const isValid = showCredentials\n      ? url.trim() !== '' && email.trim() !== '' && password.trim() !== ''\n      : url.trim() !== '';\n\n    // Handle form submission\n    const handleSubmit = useCallback(\n      (e: React.FormEvent) => {\n        e.preventDefault();\n        \n        if (!isValid) return;\n\n        const fullUrl = getFullUrl(url);\n\n        if (isBrowserLogin && onSsoLogin) {\n          onSsoLogin(fullUrl);\n        } else {\n          const credentials: LoginCredentials = {\n            url: fullUrl,\n            email: email.trim(),\n            password,\n          };\n          onSubmit(credentials);\n        }\n      },\n      [isValid, url, email, password, isBrowserLogin, onSsoLogin, onSubmit, getFullUrl]\n    );\n\n    // Handle URL input change\n    const handleUrlChange = useCallback(\n      (e: React.ChangeEvent<HTMLInputElement>) => {\n        const value = e.target.value.replace(/^https?:\\/\\//, '');\n        setUrl(value);\n      },\n      []\n    );\n\n    // Handle custom URL toggle\n    const handleCustomUrlToggle = useCallback(\n      (_event: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>, checked: boolean) => {\n        setIsCustomUrl(checked);\n      },\n      []\n    );\n\n    // Handle browser login toggle\n    const handleBrowserLoginToggle = useCallback(\n      (_event: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>, checked: boolean) => {\n        setIsBrowserLogin(checked);\n      },\n      []\n    );\n\n    const formClassNames = [styles.loginForm, className].filter(Boolean).join(' ');\n\n    return (\n      <div\n        className={styles.loginWrapper}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        {logoSrc && (\n          <div className={styles.logo} data-testid={testId && `${testId}-logo`}>\n            <img src={logoSrc} alt={logoAlt} />\n          </div>\n        )}\n\n        <div className={formClassNames}>\n          {/* Description */}\n          <p className={styles.description}>\n            {description}\n          </p>\n\n          {/* Error message */}\n          {error && (\n            <Message\n              variant=\"error\"\n              mode=\"banner\"\n              data-testid={testId && `${testId}-error`}\n            >\n              {error}\n            </Message>\n          )}\n\n          {/* Form */}\n          <form\n            ref={ref}\n            id={formId}\n            className={styles.form}\n            onSubmit={handleSubmit}\n            noValidate\n            data-testid={testId && `${testId}-form`}\n          >\n            {/* URL field */}\n            <div className={styles.inputGroup}>\n              {/* Label rendered separately to ensure full width regardless of domain suffix */}\n              <label className={styles.urlLabel} htmlFor={`${formId}-url`}>\n                {urlLabel}\n                <span className={styles.required}>*</span>\n              </label>\n              <div className={styles.urlInputWrapper}>\n                <Input\n                  type=\"text\"\n                  id={`${formId}-url`}\n                  placeholder={isCustomUrl ? 'mycompany.example.com' : 'mycompany'}\n                  value={url}\n                  onChange={handleUrlChange}\n                  disabled={loading}\n                  fullWidth\n                  required\n                  data-testid={testId && `${testId}-url`}\n                />\n                {!isCustomUrl && (\n                  <span className={styles.domainSuffix} data-testid={testId && `${testId}-domain-suffix`}>\n                    .intelligencebank.com\n                  </span>\n                )}\n              </div>\n              <div className={styles.checkboxRow}>\n                <Checkbox\n                  id={`${formId}-custom-url`}\n                  label=\"Custom URL\"\n                  checked={isCustomUrl}\n                  onChange={handleCustomUrlToggle}\n                  disabled={loading}\n                  data-testid={testId && `${testId}-custom-url-toggle`}\n                />\n              </div>\n            </div>\n\n            {/* Credentials fields - only shown when not in browser login mode */}\n            {showCredentials && (\n              <>\n                <div className={styles.inputGroup}>\n                  <Input\n                    type=\"email\"\n                    label=\"Email\"\n                    placeholder=\"Enter your email\"\n                    value={email}\n                    onChange={(e) => setEmail(e.target.value)}\n                    disabled={loading}\n                    fullWidth\n                    required\n                    autoComplete=\"email\"\n                    data-testid={testId && `${testId}-email`}\n                  />\n                </div>\n\n                <div className={styles.inputGroup}>\n                  <Input\n                    type=\"password\"\n                    label=\"Password\"\n                    placeholder=\"Enter your password\"\n                    value={password}\n                    onChange={(e) => setPassword(e.target.value)}\n                    disabled={loading}\n                    fullWidth\n                    required\n                    autoComplete=\"current-password\"\n                    data-testid={testId && `${testId}-password`}\n                  />\n                </div>\n              </>\n            )}\n\n            {/* Submit button */}\n            <div className={styles.buttons}>\n              <Button\n                type=\"submit\"\n                variant=\"primary\"\n                disabled={loading || !isValid}\n                loading={loading}\n                fullWidth\n                data-testid={testId && `${testId}-submit`}\n              >\n                Login\n              </Button>\n            </div>\n\n            {/* Browser Login checkbox */}\n            {showBrowserLoginOption && (\n              <div className={styles.browserLoginRow}>\n                <Checkbox\n                  id={`${formId}-browser-login`}\n                  label=\"Browser Login (for SSO Users)\"\n                  checked={isBrowserLogin}\n                  onChange={handleBrowserLoginToggle}\n                  disabled={loading}\n                  data-testid={testId && `${testId}-browser-login-toggle`}\n                />\n              </div>\n            )}\n          </form>\n        </div>\n      </div>\n    );\n  }\n);\n\nLoginForm.displayName = 'LoginForm';\n\nexport default LoginForm;\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport styled from '@emotion/styled';\nimport {\n  Icon,\n  Tooltip,\n  DropdownMenu,\n  type DropdownMenuItemOrDivider,\n} from '../';\nimport type { NavBarProps, NavBarAction, NavBarIconType } from './NavBar.types';\n\n/**\n * Helper to determine if an icon is a string (Material Icon name) or a React element\n */\nfunction isStringIcon(icon: NavBarIconType): icon is string {\n  return typeof icon === 'string';\n}\n\n/**\n * Render an icon based on its type\n * @param icon - Either a Material Symbol name string or a React element\n * @param size - Size in pixels for Material Symbols (ignored for React elements)\n */\nfunction renderIcon(icon: NavBarIconType, size: number = 20): React.ReactNode {\n  if (isStringIcon(icon)) {\n    return <Icon name={icon} size={size} />;\n  }\n  // Return the React element as-is (e.g., custom SVG)\n  return icon;\n}\n\n/**\n * Styled components using Emotion with theme tokens\n */\nconst NavContainer = styled.nav<{ $variant: 'light' | 'dark'; $sticky: boolean }>`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  height: 50px;\n  min-width: 320px;\n  padding: 0 ${({ theme }) => theme.spacing[4]};\n  box-sizing: border-box;\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n\n  /* Light variant - uses primary colors from theme */\n  background-color: ${({ theme, $variant }) =>\n    $variant === 'light' ? theme.colors.primary : theme.colors.grey[900]};\n  border-bottom: 1px solid ${({ theme }) => theme.colors.border.light};\n  color: ${({ theme, $variant }) =>\n    $variant === 'light' ? theme.colors.primaryText : theme.colors.white};\n\n  /* Sticky positioning */\n  ${({ $sticky }) =>\n    $sticky &&\n    `\n    position: sticky;\n    top: 0;\n    z-index: 1000;\n  `}\n`;\n\nconst LeftSection = styled.div`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing[3]};\n  min-width: 0;\n  flex-shrink: 0;\n`;\n\nconst LogoContainer = styled.div<{ $clickable: boolean }>`\n  display: flex;\n  align-items: center;\n  height: 34px;\n  cursor: ${({ $clickable }) => ($clickable ? 'pointer' : 'default')};\n  transition: ${({ theme }) => theme.transitions.fast};\n\n  &:hover {\n    opacity: ${({ $clickable }) => ($clickable ? 0.8 : 1)};\n  }\n`;\n\nconst Logo = styled.img`\n  height: 100%;\n  width: auto;\n  max-width: 200px;\n  object-fit: contain;\n`;\n\nconst Title = styled.span<{ $variant: 'light' | 'dark' }>`\n  font-size: ${({ theme }) => theme.typography.fontSize.base};\n  font-weight: ${({ theme }) => theme.typography.fontWeight.semibold};\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  max-width: 200px;\n  color: ${({ theme, $variant }) =>\n    $variant === 'light' ? theme.colors.primaryText : theme.colors.white};\n`;\n\nconst CenterSection = styled.div`\n  flex: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 0;\n  padding: 0 ${({ theme }) => theme.spacing[4]};\n`;\n\nconst RightSection = styled.div`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing[1]};\n  flex-shrink: 0;\n`;\n\nconst ActionsContainer = styled.div`\n  display: flex;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing[1]};\n`;\n\nconst ActionButton = styled.button<{ $variant: 'light' | 'dark' }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 36px;\n  height: 36px;\n  padding: 0;\n  border: 1px solid transparent;\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  background: transparent;\n  cursor: pointer;\n  transition: ${({ theme }) => theme.transitions.fast};\n\n  /* Icon color based on variant */\n  color: ${({ theme, $variant }) =>\n    $variant === 'light' ? theme.colors.primaryText : theme.colors.grey[300]};\n\n  &:hover:not(:disabled) {\n    /* Only border highlight on hover, no background fill */\n    border-color: ${({ theme, $variant }) =>\n      $variant === 'light' ? theme.colors.primaryText : theme.colors.grey[300]};\n  }\n\n  &:focus {\n    outline: none;\n  }\n\n  &:focus-visible {\n    outline: 2px solid ${({ theme }) => theme.colors.highlight};\n    outline-offset: 2px;\n  }\n\n  &:disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n  }\n`;\n\n/**\n * Menu trigger button - matches ActionButton styling for consistency\n */\nconst MenuTriggerButton = styled.button<{ $variant: 'light' | 'dark' }>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 36px;\n  height: 36px;\n  padding: 0;\n  border: 1px solid transparent;\n  border-radius: ${({ theme }) => theme.borders.radius.sm};\n  background: transparent;\n  cursor: pointer;\n  transition: ${({ theme }) => theme.transitions.fast};\n\n  /* Icon color based on variant */\n  color: ${({ theme, $variant }) =>\n    $variant === 'light' ? theme.colors.primaryText : theme.colors.grey[300]};\n\n  &:hover:not(:disabled) {\n    /* Only border highlight on hover, no background fill */\n    border-color: ${({ theme, $variant }) =>\n      $variant === 'light' ? theme.colors.primaryText : theme.colors.grey[300]};\n  }\n\n  &:focus {\n    outline: none;\n  }\n\n  &:focus-visible {\n    outline: 2px solid ${({ theme }) => theme.colors.highlight};\n    outline-offset: 2px;\n  }\n`;\n\n/**\n * Three dots icon for menu trigger\n */\nconst MoreVertIcon = () => (\n  <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n    <circle cx=\"12\" cy=\"5\" r=\"2\" />\n    <circle cx=\"12\" cy=\"12\" r=\"2\" />\n    <circle cx=\"12\" cy=\"19\" r=\"2\" />\n  </svg>\n);\n\n/**\n * NavBar component for integration applications\n *\n * Features:\n * - Logo on the left with optional click handler\n * - Optional title text\n * - Action buttons on the right (with SVG or Material Icon support)\n * - Dropdown menu on the far right\n * - Responsive collapse: actions become menu items at breakpoint\n * - Primary color background with primaryText color icons (light variant)\n */\nexport function NavBar({\n  logoSrc,\n  logoAlt = 'Logo',\n  onLogoClick,\n  title,\n  actions = [],\n  menuItems = [],\n  menuLabel = 'Menu',\n  dropdownMenuProps,\n  collapseBreakpoint = 480,\n  variant = 'light',\n  sticky = false,\n  className,\n  children,\n  'data-testid': testId = 'navbar',\n  dataTestId,\n  dataId,\n}: NavBarProps) {\n  const [isCollapsed, setIsCollapsed] = useState(false);\n  const navRef = useRef<HTMLElement>(null);\n\n  // Check if we need to collapse actions\n  const checkCollapse = useCallback(() => {\n    if (typeof window !== 'undefined') {\n      setIsCollapsed(window.innerWidth <= collapseBreakpoint);\n    }\n  }, [collapseBreakpoint]);\n\n  useEffect(() => {\n    checkCollapse();\n    window.addEventListener('resize', checkCollapse);\n    return () => window.removeEventListener('resize', checkCollapse);\n  }, [checkCollapse]);\n\n  // Convert actions to DropdownMenu items when collapsed\n  const collapsedActionItems: DropdownMenuItemOrDivider[] = isCollapsed\n    ? actions.map((action) => ({\n        id: action.id,\n        displayText: action.label,\n        icon: renderIcon(action.icon, 16),\n        onClick: action.onClick,\n        disabled: action.disabled,\n      }))\n    : [];\n\n  // Convert menu items to DropdownMenu items\n  const regularMenuItems: DropdownMenuItemOrDivider[] = menuItems.map((item) => ({\n    id: item.id,\n    displayText: item.label,\n    icon: item.icon ? renderIcon(item.icon, 16) : undefined,\n    onClick: item.onClick,\n    disabled: item.disabled,\n  }));\n\n  // Combined menu items with divider between sections\n  const allMenuItems: DropdownMenuItemOrDivider[] = [];\n\n  if (collapsedActionItems.length > 0) {\n    allMenuItems.push(...collapsedActionItems);\n    if (regularMenuItems.length > 0) {\n      allMenuItems.push({ type: 'divider' as const });\n    }\n  }\n  allMenuItems.push(...regularMenuItems);\n\n  const handleLogoClick = () => {\n    if (onLogoClick) {\n      onLogoClick();\n    }\n  };\n\n  const handleLogoKeyDown = (e: React.KeyboardEvent) => {\n    if (onLogoClick && (e.key === 'Enter' || e.key === ' ')) {\n      e.preventDefault();\n      onLogoClick();\n    }\n  };\n\n  const renderActionButton = (action: NavBarAction) => (\n    <Tooltip key={action.id} content={action.tooltip || action.label}>\n      <ActionButton\n        type=\"button\"\n        $variant={variant}\n        onClick={action.onClick}\n        disabled={action.disabled}\n        aria-label={action.label}\n        data-testid={`navbar-action-${action.id}`}\n      >\n        {renderIcon(action.icon, 20)}\n      </ActionButton>\n    </Tooltip>\n  );\n\n  const hasMenu = allMenuItems.length > 0;\n\n  return (\n    <NavContainer\n      ref={navRef}\n      className={className}\n      $variant={variant}\n      $sticky={sticky}\n      data-testid={dataTestId || testId}\n      data-id={dataId}\n      data-variant={variant}\n      data-sticky={sticky ? 'true' : undefined}\n      role=\"navigation\"\n      aria-label=\"Main navigation\"\n    >\n      {/* Left section: Logo and title */}\n      <LeftSection>\n        <LogoContainer\n          $clickable={!!onLogoClick}\n          onClick={handleLogoClick}\n          onKeyDown={handleLogoKeyDown}\n          role={onLogoClick ? 'button' : undefined}\n          tabIndex={onLogoClick ? 0 : undefined}\n          aria-label={onLogoClick ? `${logoAlt} - Click to go home` : undefined}\n        >\n          <Logo src={logoSrc} alt={logoAlt} />\n        </LogoContainer>\n        {title && <Title $variant={variant}>{title}</Title>}\n      </LeftSection>\n\n      {/* Center section: Children */}\n      {children && <CenterSection>{children}</CenterSection>}\n\n      {/* Right section: Actions and menu */}\n      <RightSection>\n        {/* Regular actions (hidden when collapsed) */}\n        {!isCollapsed && actions.length > 0 && (\n          <ActionsContainer data-testid=\"navbar-actions\">\n            {actions.map(renderActionButton)}\n          </ActionsContainer>\n        )}\n\n        {/* Dropdown menu with custom trigger matching action button style */}\n        {hasMenu && (\n          <DropdownMenu\n            placement=\"bottom-end\"\n            inverse={variant === 'dark'}\n            aria-label={menuLabel}\n            dataTestId=\"navbar-menu\"\n            {...dropdownMenuProps}\n            trigger={\n              <MenuTriggerButton\n                type=\"button\"\n                $variant={variant}\n                aria-label={menuLabel}\n              >\n                <MoreVertIcon />\n              </MenuTriggerButton>\n            }\n            items={[...allMenuItems, ...(dropdownMenuProps?.items || [])]}\n          />\n        )}\n      </RightSection>\n    </NavContainer>\n  );\n}\n","import { useCallback, useEffect, useRef, forwardRef } from 'react';\nimport { Input, Button, Icon, Spinner } from '../';\n\nimport type { SearchFormProps } from './SearchForm.types';\nimport styles from './SearchForm.module.css';\n\n/**\n * SearchForm component for searching assets and folders\n * Provides controlled input with debouncing, clear button, and optional search button\n *\n * @example\n * ```tsx\n * // Basic usage with controlled input\n * <SearchForm\n *   value={searchQuery}\n *   onChange={setSearchQuery}\n *   onSubmit={handleSearch}\n *   placeholder=\"Search assets...\"\n * />\n *\n * // With search button and debouncing\n * <SearchForm\n *   value={searchQuery}\n *   onChange={setSearchQuery}\n *   onSubmit={handleSearch}\n *   showButton\n *   buttonText=\"Search\"\n *   debounceMs={500}\n * />\n *\n * // Loading state\n * <SearchForm\n *   value={searchQuery}\n *   onChange={setSearchQuery}\n *   onSubmit={handleSearch}\n *   loading={isSearching}\n * />\n * ```\n */\nexport const SearchForm = forwardRef<HTMLInputElement, SearchFormProps>(\n  (\n    {\n      value,\n      onChange,\n      onSubmit,\n      onClear,\n      placeholder = 'Search...',\n      size = 'md',\n      autoFocus = false,\n      showButton = false,\n      buttonText = 'Search',\n      loading = false,\n      disabled = false,\n      debounceMs = 0,\n      className,\n      'data-testid': testId,\n      dataTestId,\n      dataId,\n    },\n    ref\n  ) => {\n    const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n    const internalRef = useRef<HTMLInputElement>(null);\n    const inputRef = (ref as React.RefObject<HTMLInputElement>) || internalRef;\n\n    // Cleanup debounce timer on unmount\n    useEffect(() => {\n      return () => {\n        if (debounceTimerRef.current) {\n          clearTimeout(debounceTimerRef.current);\n        }\n      };\n    }, []);\n\n    // Handle input change with optional debouncing\n    const handleChange = useCallback(\n      (e: React.ChangeEvent<HTMLInputElement>) => {\n        const newValue = e.target.value;\n        onChange(newValue);\n\n        if (debounceMs > 0) {\n          if (debounceTimerRef.current) {\n            clearTimeout(debounceTimerRef.current);\n          }\n          debounceTimerRef.current = setTimeout(() => {\n            onSubmit(newValue);\n          }, debounceMs);\n        }\n      },\n      [onChange, onSubmit, debounceMs]\n    );\n\n    // Handle form submission\n    const handleSubmit = useCallback(\n      (e?: React.FormEvent) => {\n        e?.preventDefault();\n\n        // Clear any pending debounce\n        if (debounceTimerRef.current) {\n          clearTimeout(debounceTimerRef.current);\n          debounceTimerRef.current = null;\n        }\n\n        onSubmit(value);\n      },\n      [onSubmit, value]\n    );\n\n    // Handle Enter key press\n    const handleKeyDown = useCallback(\n      (e: React.KeyboardEvent<HTMLInputElement>) => {\n        if (e.key === 'Enter') {\n          e.preventDefault();\n          handleSubmit();\n        }\n      },\n      [handleSubmit]\n    );\n\n    // Handle clear button click\n    const handleClear = useCallback(() => {\n      // Clear any pending debounce\n      if (debounceTimerRef.current) {\n        clearTimeout(debounceTimerRef.current);\n        debounceTimerRef.current = null;\n      }\n\n      onChange('');\n      onClear?.();\n\n      // Focus input after clear\n      inputRef.current?.focus();\n    }, [onChange, onClear, inputRef]);\n\n    const hasValue = value.length > 0;\n    const isDisabled = disabled || loading;\n\n    // Build left element - search icon or spinner\n    const leftElement = loading ? (\n      <Spinner size=\"sm\" label=\"Searching...\" data-testid={testId && `${testId}-spinner`} />\n    ) : (\n      <Icon name=\"search\" size=\"sm\" aria-hidden />\n    );\n\n    // Build right element - clear button\n    const rightElement = hasValue && !isDisabled ? (\n      <button\n        type=\"button\"\n        className={styles.clearButton}\n        onClick={handleClear}\n        aria-label=\"Clear search\"\n        data-testid={testId && `${testId}-clear`}\n      >\n        <Icon name=\"close\" size=\"sm\" />\n      </button>\n    ) : null;\n\n    const wrapperClassNames = [styles.searchForm, className].filter(Boolean).join(' ');\n\n    return (\n      <form\n        className={wrapperClassNames}\n        onSubmit={handleSubmit}\n        role=\"search\"\n        data-size={size}\n        data-testid={dataTestId || testId}\n        data-id={dataId}\n      >\n        <div className={styles.inputWrapper}>\n          <Input\n            ref={inputRef}\n            type=\"search\"\n            value={value}\n            onChange={handleChange}\n            onKeyDown={handleKeyDown}\n            placeholder={placeholder}\n            size={size}\n            disabled={isDisabled}\n            autoFocus={autoFocus}\n            leftElement={leftElement}\n            rightElement={rightElement}\n            fullWidth\n            aria-label={placeholder}\n            data-testid={testId && `${testId}-input`}\n          />\n        </div>\n\n        {showButton && (\n          <Button\n            type=\"submit\"\n            variant=\"primary\"\n            size={size}\n            disabled={isDisabled}\n            loading={loading}\n            aria-label={buttonText}\n            data-testid={testId && `${testId}-button`}\n          >\n            {buttonText}\n          </Button>\n        )}\n      </form>\n    );\n  }\n);\n\nSearchForm.displayName = 'SearchForm';\n\nexport default SearchForm;","import { css, useTheme } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { Icon } from '../Icon';\nimport { Spinner } from '../Spinner';\n\nimport type { Theme } from '../../theme';\nimport type { FileProgressStatus } from '../../types/riskReview';\nimport type { IconColor } from '../Icon';\nimport type { ReviewProcessingProps } from './ReviewProcessing.types';\n\n/**\n * Gets the semantic color from theme for a file progress status.\n * Uses theme.colors.semantic for consistency with Icon component colors.\n */\nconst getStatusColor = (status: FileProgressStatus, theme: Theme): string => {\n  switch (status) {\n    case 'completed':\n      return theme.colors.semantic.green.base;\n    case 'failed':\n      return theme.colors.semantic.red.base;\n    case 'processing':\n    case 'uploading':\n      return theme.colors.semantic.orange.base;\n    case 'pending':\n    default:\n      return theme.colors.grey[400];\n  }\n};\n\n/**\n * Gets the IconColor for a file progress status.\n * Maps to Icon component's color prop values.\n */\nconst getStatusIconColor = (status: FileProgressStatus): IconColor => {\n  switch (status) {\n    case 'completed':\n      return 'success';\n    case 'failed':\n      return 'error';\n    case 'processing':\n    case 'uploading':\n      return 'warning';\n    case 'pending':\n    default:\n      return 'muted';\n  }\n};\n\n/**\n * Gets the icon name for a file progress status\n */\nconst getStatusIcon = (status: FileProgressStatus): string => {\n  switch (status) {\n    case 'completed':\n      return 'check_circle';\n    case 'failed':\n      return 'error';\n    case 'processing':\n    case 'uploading':\n      return 'sync';\n    case 'pending':\n    default:\n      return 'schedule';\n  }\n};\n\n/**\n * Gets the status display text\n */\nconst getStatusText = (status: FileProgressStatus, progress?: number): string => {\n  switch (status) {\n    case 'completed':\n      return 'Completed';\n    case 'failed':\n      return 'Failed';\n    case 'uploading':\n      return progress !== undefined ? `Uploading ${progress}%` : 'Uploading...';\n    case 'processing':\n      return 'Processing...';\n    case 'pending':\n    default:\n      return 'Pending';\n  }\n};\n\nconst Overlay = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: rgba(255, 255, 255, 0.95);\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  z-index: 100;\n  padding: 24px;\n`;\n\nconst ContentContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 16px;\n  max-width: 400px;\n  width: 100%;\n`;\n\nconst Title = styled.h2`\n  ${({ theme }) => css`\n    font-family: ${theme.typography.fontFamily};\n    font-size: ${theme.typography.fontSize.lg};\n    font-weight: ${theme.typography.fontWeight.semibold};\n    color: ${theme.colors.text.primary};\n    margin: 0;\n    text-align: center;\n  `}\n`;\n\nconst Message = styled.p`\n  ${({ theme }) => css`\n    font-family: ${theme.typography.fontFamily};\n    font-size: ${theme.typography.fontSize.md};\n    color: ${theme.colors.text.primary};\n    margin: 0;\n    text-align: center;\n  `}\n`;\n\nconst HelperText = styled.p`\n  ${({ theme }) => css`\n    font-family: ${theme.typography.fontFamily};\n    font-size: ${theme.typography.fontSize.xs};\n    color: ${theme.colors.text.secondary};\n    margin: 0;\n    text-align: center;\n  `}\n`;\n\nconst ProgressSummary = styled.div`\n  ${({ theme }) => css`\n    font-family: ${theme.typography.fontFamily};\n    font-size: ${theme.typography.fontSize.sm};\n    color: ${theme.colors.text.secondary};\n    margin-top: 8px;\n    text-align: center;\n  `}\n`;\n\nconst FileList = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  width: 100%;\n  max-height: 200px;\n  overflow-y: auto;\n  margin-top: 8px;\n`;\n\nconst FileItem = styled.div`\n  ${({ theme }) => css`\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    padding: 10px 12px;\n    background-color: ${theme.colors.grey[100]};\n    border-radius: 4px;\n    font-family: ${theme.typography.fontFamily};\n  `}\n`;\n\nconst FileInfo = styled.div`\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  min-width: 0;\n`;\n\nconst FileName = styled.span`\n  ${({ theme }) => css`\n    font-size: ${theme.typography.fontSize.sm};\n    color: ${theme.colors.text.primary};\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  `}\n`;\n\ninterface StatusTextStyleProps {\n  $status: FileProgressStatus;\n}\n\nconst StatusTextStyled = styled.span<StatusTextStyleProps>`\n  ${({ theme, $status }) => css`\n    font-size: ${theme.typography.fontSize.xs};\n    color: ${getStatusColor($status, theme)};\n  `}\n`;\n\nconst StatusIconContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst ProgressBar = styled.div`\n  ${({ theme }) => css`\n    width: 100%;\n    height: 4px;\n    background-color: ${theme.colors.grey[200]};\n    border-radius: 2px;\n    overflow: hidden;\n    margin-top: 4px;\n  `}\n`;\n\ninterface ProgressFillProps {\n  $progress: number;\n}\n\nconst ProgressFill = styled.div<ProgressFillProps>`\n  ${({ theme, $progress }) => css`\n    height: 100%;\n    background-color: ${theme.colors.semantic.orange.base};\n    border-radius: 2px;\n    width: ${$progress}%;\n    transition: width 0.3s ease;\n  `}\n`;\n\n/**\n * ReviewProcessing Component\n *\n * Display processing/loading state during review with support for single and multi-file modes.\n *\n * @example\n * ```tsx\n * // Single file mode\n * <ReviewProcessing\n *   mode=\"single\"\n *   isVisible={isProcessing}\n *   message=\"Uploading file...\"\n *   dataTestId=\"review-processing\"\n * />\n *\n * // Multi-file mode\n * <ReviewProcessing\n *   mode=\"multiple\"\n *   isVisible={isProcessing}\n *   progress={{\n *     totalFiles: 3,\n *     completedFiles: 1,\n *     failedFiles: 0,\n *     files: [\n *       { fileId: '1', fileName: 'doc.pdf', status: 'completed' },\n *       { fileId: '2', fileName: 'report.pdf', status: 'processing' },\n *       { fileId: '3', fileName: 'image.png', status: 'pending' }\n *     ]\n *   }}\n *   dataTestId=\"multi-file-processing\"\n * />\n * ```\n */\nexport const ReviewProcessing: React.FC<ReviewProcessingProps> = ({\n  mode,\n  progress,\n  message = 'Processing Risk Review...',\n  helperText = 'This may take a few moments',\n  title,\n  isVisible,\n  dataTestId,\n  dataId,\n  className,\n  style,\n}) => {\n  const theme = useTheme() as Theme;\n  const warningColor = theme.colors.semantic.orange.base;\n\n  if (!isVisible) {\n    return null;\n  }\n\n  const renderSingleMode = () => (\n    <>\n      <Spinner size=\"lg\" />\n      {title && <Title>{title}</Title>}\n      <Message>{message}</Message>\n      <HelperText>{helperText}</HelperText>\n    </>\n  );\n\n  const renderMultipleMode = () => {\n    if (!progress) {\n      return renderSingleMode();\n    }\n\n    const { totalFiles, completedFiles, failedFiles, files } = progress;\n    const inProgressCount = totalFiles - completedFiles - failedFiles;\n\n    return (\n      <>\n        <Spinner size=\"lg\" />\n        {title && <Title>{title}</Title>}\n        <Message>\n          Processing {totalFiles} file{totalFiles !== 1 ? 's' : ''}...\n        </Message>\n        <ProgressSummary>\n          {completedFiles} completed\n          {failedFiles > 0 && `, ${failedFiles} failed`}\n          {inProgressCount > 0 && `, ${inProgressCount} remaining`}\n        </ProgressSummary>\n        <FileList data-testid={dataTestId ? `${dataTestId}-file-list` : undefined}>\n          {files.map((file) => {\n            const isInProgress = file.status === 'processing' || file.status === 'uploading';\n\n            return (\n              <FileItem\n                key={file.fileId}\n                data-testid={dataTestId ? `${dataTestId}-file-${file.fileId}` : undefined}\n              >\n                <StatusIconContainer>\n                  {isInProgress ? (\n                    <Spinner size=\"xs\" variant=\"dots\" customColor={warningColor} />\n                  ) : (\n                    <Icon\n                      name={getStatusIcon(file.status)}\n                      size=\"sm\"\n                      color={getStatusIconColor(file.status)}\n                    />\n                  )}\n                </StatusIconContainer>\n                <FileInfo>\n                  <FileName title={file.fileName}>{file.fileName}</FileName>\n                  <StatusTextStyled $status={file.status}>\n                    {file.error || file.message || getStatusText(file.status, file.progress)}\n                  </StatusTextStyled>\n                  {file.status === 'uploading' && file.progress !== undefined && (\n                    <ProgressBar>\n                      <ProgressFill $progress={file.progress} />\n                    </ProgressBar>\n                  )}\n                </FileInfo>\n              </FileItem>\n            );\n          })}\n        </FileList>\n      </>\n    );\n  };\n\n  return (\n    <Overlay\n      data-testid={dataTestId}\n      data-id={dataId}\n      className={className}\n      style={style}\n      role=\"status\"\n      aria-busy=\"true\"\n      aria-live=\"polite\"\n      aria-label={title || message}\n    >\n      <ContentContainer>\n        {mode === 'single' ? renderSingleMode() : renderMultipleMode()}\n      </ContentContainer>\n    </Overlay>\n  );\n};\n\nReviewProcessing.displayName = 'ReviewProcessing';\n\nexport default ReviewProcessing;\n","import { useState } from 'react';\n\nimport styled from '@emotion/styled';\n\nimport { MetadataDetails } from '../MetadataDetails';\nimport { Modal, ModalHeader, ModalBody } from '../Modal';\n\nimport type { MetadataDetailsProps } from '../MetadataDetails';\nimport type { ReviewDetailsProps } from './ReviewDetails.types';\n\n// Shared props applied to all MetadataDetails instances - EXACT from LatestReviewDetails.tsx\nconst METADATA_PROPS: Pick<MetadataDetailsProps, 'layout' | 'valueFontSize' | 'labelFontSize'> = {\n  layout: 'stacked',\n  valueFontSize: 'xs',\n  labelFontSize: 'xs',\n};\n\n// EXACT styled components from LatestReviewDetails.tsx\n\nconst DetailsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst TextPreviewValue = styled.span`\n  ${({ theme }) => `\n    font-size: ${theme.typography.fontSize.xs};\n    color: ${theme.colors.text.primary};\n    display: flex;\n    align-items: center;\n    gap: ${theme.spacing[2]};\n  `}\n`;\n\nconst TextPreviewEllipsis = styled.span`\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: 200px;\n`;\n\nconst ShowMoreButton = styled.button`\n  ${({ theme }) => `\n    background: none;\n    border: none;\n    color: ${theme.colors.primary};\n    font-size: ${theme.typography.fontSize.xs};\n    cursor: pointer;\n    padding: 0;\n    text-decoration: underline;\n    \n    &:hover {\n      color: ${theme.colors.highlight};\n    }\n  `}\n`;\n\nconst TextModalContent = styled.div`\n  ${({ theme }) => `\n    font-size: ${theme.typography.fontSize.sm};\n    color: ${theme.colors.text.primary};\n    white-space: pre-wrap;\n    word-break: break-word;\n    max-height: 400px;\n    overflow-y: auto;\n    line-height: 1.6;\n  `}\n`;\n\nconst FileListValue = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n`;\n\nconst FileListItem = styled.span`\n  ${({ theme }) => `\n    font-size: ${theme.typography.fontSize.xs};\n    color: ${theme.colors.text.primary};\n  `}\n`;\n\n/**\n * Get display text for review type - EXACT from LatestReviewDetails.tsx\n */\nfunction getReviewTypeDisplay(\n  type: 'file' | 'text' | 'weburl',\n  hasPageUrl: boolean,\n  isMultiFile = false\n): string {\n  if (isMultiFile) return 'Multi-File';\n  if (type === 'text') return 'Text';\n  if (hasPageUrl || type === 'weburl') return 'Web URL';\n  return 'File';\n}\n\n/**\n * Formats a timestamp for display with browser timezone - EXACT from LatestReviewDetails.tsx\n */\nfunction formatTimestampWithTimezone(timestamp: string | Date): string {\n  const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n  const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n  return (\n    date.toLocaleString(undefined, {\n      dateStyle: 'medium',\n      timeStyle: 'short',\n    }) + ` (${timeZone})`\n  );\n}\n\n/**\n * ReviewDetails component - Displays review metadata using MetadataDetails\n *\n * EXACT copy of LatestReviewDetails from web-app-risk-reviews\n *\n * Supports both single-file and multi-file review results.\n *\n * Displays:\n * - Review Type (File, Text, Web URL, Multi-File)\n * - File/Text/Page content\n * - Connected App info with entity hierarchy\n * - Filter categories with values\n * - Review ID\n * - Review Time with timezone\n *\n * @example\n * ```tsx\n * // Single-file review\n * <ReviewDetails\n *   review={latestReview}\n *   getFilterDisplayText={getFilterDisplayText}\n * />\n *\n * // Multi-file review\n * <ReviewDetails\n *   multiFileResult={multiFileResults}\n *   getFilterDisplayText={getFilterDisplayText}\n * />\n * ```\n */\nexport const ReviewDetails: React.FC<ReviewDetailsProps> = ({\n  review,\n  multiFileResult,\n  getFilterDisplayText,\n  className,\n  dataTestId,\n  dataId,\n  style,\n}) => {\n  const [showTextModal, setShowTextModal] = useState(false);\n\n  // Handle multi-file results\n  if (multiFileResult) {\n    const selectedFilters = multiFileResult.selectedFilters || [];\n    const connectedAppInfo = multiFileResult.connectedAppInfo;\n    const fileNames = multiFileResult.results.map((r) => r.fileName);\n\n    return (\n      <DetailsContainer\n        className={className}\n        data-testid={dataTestId}\n        data-id={dataId}\n        style={style}\n      >\n        <MetadataDetails {...METADATA_PROPS} name=\"REVIEW TYPE\" value=\"Multi-File\" />\n\n        <MetadataDetails\n          {...METADATA_PROPS}\n          name=\"FILES\"\n          type=\"Custom\"\n          component={\n            <FileListValue>\n              {fileNames.map((name, index) => (\n                <FileListItem key={index}>{name}</FileListItem>\n              ))}\n            </FileListValue>\n          }\n        />\n\n        <MetadataDetails\n          {...METADATA_PROPS}\n          name=\"TOTAL FILES\"\n          value={`${multiFileResult.results.length} files`}\n        />\n\n        <MetadataDetails\n          {...METADATA_PROPS}\n          name=\"TOTAL FINDINGS\"\n          value={`${multiFileResult.totalFindingsCount} risks`}\n        />\n\n        {connectedAppInfo && (\n          <>\n            <MetadataDetails\n              {...METADATA_PROPS}\n              name=\"CONNECTED APP\"\n              value={connectedAppInfo.connectorName}\n            />\n\n            {connectedAppInfo.entities.map((entity) => (\n              <MetadataDetails\n                {...METADATA_PROPS}\n                key={`${entity.type}-${entity.id}`}\n                name={`${connectedAppInfo.connectorName.toUpperCase()} ${entity.type.toUpperCase()}`}\n                value={entity.name || entity.id}\n              />\n            ))}\n          </>\n        )}\n\n        {selectedFilters.map((filter) => (\n          <MetadataDetails\n            {...METADATA_PROPS}\n            key={filter.categoryId}\n            name={`CATEGORY - ${filter.categoryName}`}\n            value={getFilterDisplayText(filter)}\n          />\n        ))}\n\n        <MetadataDetails\n          {...METADATA_PROPS}\n          name=\"REVIEW TIME\"\n          value={formatTimestampWithTimezone(multiFileResult.reviewedAt)}\n        />\n      </DetailsContainer>\n    );\n  }\n\n  // Handle empty/null review case\n  if (!review) {\n    return (\n      <DetailsContainer\n        className={className}\n        data-testid={dataTestId}\n        data-id={dataId}\n        style={style}\n      >\n        <MetadataDetails {...METADATA_PROPS} name=\"STATUS\" value=\"No review data available\" />\n      </DetailsContainer>\n    );\n  }\n\n  // Handle single-file review\n  const selectedFilters = review.selectedFilters || [];\n  const connectedAppInfo = review.connectedAppInfo;\n  const reviewType = getReviewTypeDisplay(review.type, !!review.pageUrl);\n\n  // Determine what to show for FILE / PAGE / TEXT field\n  const getContentDisplay = () => {\n    if (review.type === 'text' && review.inputText) {\n      const text = review.inputText;\n      const maxLength = 50;\n      if (text.length > maxLength) {\n        return (\n          <TextPreviewValue>\n            <TextPreviewEllipsis>{text.substring(0, maxLength)}...</TextPreviewEllipsis>\n            <ShowMoreButton onClick={() => setShowTextModal(true)}>Show more</ShowMoreButton>\n          </TextPreviewValue>\n        );\n      }\n      return text;\n    }\n    if (review.pageUrl) {\n      return review.pageUrl;\n    }\n    if (review.fileName) {\n      return review.fileName;\n    }\n    return 'N/A';\n  };\n\n  // Determine the label for FILE / PAGE / TEXT\n  const getContentLabel = (): string => {\n    if (review.type === 'text') return 'TEXT';\n    if (review.pageUrl) return 'PAGE';\n    return 'FILE';\n  };\n\n  return (\n    <>\n      <DetailsContainer\n        className={className}\n        data-testid={dataTestId}\n        data-id={dataId}\n        style={style}\n      >\n        <MetadataDetails {...METADATA_PROPS} name=\"REVIEW TYPE\" value={reviewType} />\n\n        <MetadataDetails\n          {...METADATA_PROPS}\n          name={getContentLabel()}\n          type={\n            review.type === 'text' && review.inputText && review.inputText.length > 50\n              ? 'Custom'\n              : 'Normal'\n          }\n          value={typeof getContentDisplay() === 'string' ? (getContentDisplay() as string) : undefined}\n          component={typeof getContentDisplay() !== 'string' ? getContentDisplay() : undefined}\n        />\n\n        {connectedAppInfo && (\n          <>\n            <MetadataDetails\n              {...METADATA_PROPS}\n              name=\"CONNECTED APP\"\n              value={connectedAppInfo.connectorName}\n            />\n\n            {connectedAppInfo.entities.map((entity) => (\n              <MetadataDetails\n                {...METADATA_PROPS}\n                key={`${entity.type}-${entity.id}`}\n                name={`${connectedAppInfo.connectorName.toUpperCase()} ${entity.type.toUpperCase()}`}\n                value={entity.name || entity.id}\n              />\n            ))}\n          </>\n        )}\n\n        {selectedFilters.map((filter) => (\n          <MetadataDetails\n            {...METADATA_PROPS}\n            key={filter.categoryId}\n            name={`CATEGORY - ${filter.categoryName}`}\n            value={getFilterDisplayText(filter)}\n          />\n        ))}\n\n        <MetadataDetails {...METADATA_PROPS} name=\"REVIEW ID\" value={review.reviewId} />\n\n        <MetadataDetails\n          {...METADATA_PROPS}\n          name=\"REVIEW TIME\"\n          value={formatTimestampWithTimezone(review.timestamp)}\n        />\n      </DetailsContainer>\n\n      {/* Text Content Modal */}\n      <Modal isOpen={showTextModal} onClose={() => setShowTextModal(false)} size=\"md\">\n        <ModalHeader>Review Text Content</ModalHeader>\n        <ModalBody>\n          <TextModalContent>{review.inputText || ''}</TextModalContent>\n        </ModalBody>\n      </Modal>\n    </>\n  );\n};\n\nReviewDetails.displayName = 'ReviewDetails';\n\nexport default ReviewDetails;\n","import styled from '@emotion/styled';\n\nimport { Button } from '../Button';\nimport { Message } from '../Message';\n\nimport type { ReviewResultsProps, ReviewStatus } from './ReviewResults.types';\n\n// EXACT styled components from ResultsSummary.tsx\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n`;\n\nconst SummaryContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n`;\n\nconst SummaryHeader = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  gap: 12px;\n`;\n\nconst TitleSection = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n`;\n\nconst ReviewType = styled.span`\n  ${({ theme }) => `\n    font-size: 10px;\n    font-weight: ${theme.typography.fontWeight.semibold};\n    color: ${theme.colors.text.muted};\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n  `}\n`;\n\nconst ReviewTitle = styled.h3`\n  ${({ theme }) => `\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    font-size: ${theme.typography.fontSize.md};\n    font-weight: ${theme.typography.fontWeight.semibold};\n    color: ${theme.colors.text.primary};\n    margin: 0;\n  `}\n`;\n\nconst StatusBadge = styled.span<{ $status: ReviewStatus; $hasRisks: boolean }>`\n  ${({ theme, $status, $hasRisks }) => `\n    display: inline-flex;\n    align-items: center;\n    padding: 4px 10px;\n    font-size: 11px;\n    font-weight: ${theme.typography.fontWeight.semibold};\n    border-radius: 16px;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    white-space: nowrap;\n    \n    background-color: ${\n      $status === 'processing'\n        ? '#FFF3E0'\n        : $status === 'failed'\n          ? '#FFEBEE'\n          : $hasRisks\n            ? '#FFF8E1'\n            : '#E8F5E9'\n    };\n    \n    color: ${\n      $status === 'processing'\n        ? '#E65100'\n        : $status === 'failed'\n          ? '#C62828'\n          : $hasRisks\n            ? '#F57C00'\n            : '#2E7D32'\n    };\n  `}\n`;\n\nconst SummaryGrid = styled.div`\n  ${({ theme }) => `\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 12px;\n    padding: 12px;\n    background-color: ${theme.colors.background.default};\n    border-radius: 8px;\n  `}\n`;\n\nconst SummaryItem = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n`;\n\nconst SummaryLabel = styled.span`\n  ${({ theme }) => `\n    font-size: 10px;\n    font-weight: ${theme.typography.fontWeight.medium};\n    color: ${theme.colors.text.muted};\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n  `}\n`;\n\nconst SummaryValue = styled.span`\n  ${({ theme }) => `\n    font-size: ${theme.typography.fontSize.sm};\n    font-weight: ${theme.typography.fontWeight.medium};\n    color: ${theme.colors.text.primary};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  `}\n`;\n\nconst RisksMessageContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n`;\n\nconst RisksCount = styled.span`\n  ${({ theme }) => `\n    font-weight: ${theme.typography.fontWeight.semibold};\n  `}\n`;\n\nconst RisksSubtext = styled.span`\n  ${({ theme }) => `\n    font-size: ${theme.typography.fontSize.xs};\n    opacity: 0.85;\n  `}\n`;\n\n// EXACT styled components from ResultActions.tsx\n\nconst ActionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n`;\n\nconst NoActionsMessage = styled.div`\n  ${({ theme }) => `\n    text-align: center;\n    padding: 12px;\n    color: ${theme.colors.text.muted};\n    font-size: ${theme.typography.fontSize.sm};\n  `}\n`;\n\n/**\n * Formats a timestamp for display - EXACT from ResultsSummary.tsx\n */\nfunction formatTimestamp(timestamp: string): string {\n  const date = new Date(timestamp);\n  return date.toLocaleString(undefined, {\n    dateStyle: 'medium',\n    timeStyle: 'short',\n  });\n}\n\n/**\n * Gets display text for review status - EXACT from ResultsSummary.tsx\n */\nfunction getStatusText(status: ReviewStatus, hasRisks: boolean): string {\n  switch (status) {\n    case 'processing':\n      return 'Processing';\n    case 'failed':\n      return 'Failed';\n    case 'completed':\n      return hasRisks ? 'Risks Detected' : 'No Risk Detected';\n    default:\n      return status;\n  }\n}\n\n/**\n * ReviewResults component - Combined ResultsSummary + ResultActions\n *\n * EXACT copy of styling from web-app-risk-reviews\n *\n * Displays a summary of the compliance review including:\n * - Overall status with color-coded badge (pass/fail/warning)\n * - Review timestamp\n * - File name (for file reviews)\n * - Number of risks with visual indicator\n * - Action buttons (Send to IntelligenceBank)\n *\n * Status colors:\n * - Green: Completed with no risks detected\n * - Orange/Yellow: Completed with risks detected\n * - Orange: Processing\n * - Red: Failed\n *\n * @example\n * ```tsx\n * <ReviewResults\n *   results={reviewResult}\n *   reviewType=\"file\"\n *   onSendToIB={handleSendToIB}\n *   canSendToIB={true}\n *   showActions\n * />\n * ```\n */\nexport const ReviewResults: React.FC<ReviewResultsProps> = ({\n  results,\n  reviewType,\n  onSendToIB,\n  canSendToIB = true,\n  isLoading = false,\n  showActions = true,\n  className,\n  dataTestId,\n  dataId,\n  style,\n}) => {\n  // Defensive check: risks might be undefined after storage restoration\n  const risks = results.risks ?? [];\n  const risksCount = risks.length;\n  const hasRisks = risksCount > 0;\n\n  return (\n    <Container className={className} data-testid={dataTestId} data-id={dataId} style={style}>\n      {/* Summary Section - EXACT from ResultsSummary.tsx */}\n      <SummaryContainer>\n        <SummaryHeader>\n          <TitleSection>\n            <ReviewType>Risk Review</ReviewType>\n            <ReviewTitle>\n              {results.type === 'file' || results.type === 'weburl'\n                ? 'File Risk Review'\n                : 'Text Risk Review'}\n            </ReviewTitle>\n          </TitleSection>\n          <StatusBadge $status={results.status} $hasRisks={hasRisks}>\n            {getStatusText(results.status, hasRisks)}\n          </StatusBadge>\n        </SummaryHeader>\n\n        <SummaryGrid>\n          {results.fileName && (\n            <SummaryItem>\n              <SummaryLabel>File</SummaryLabel>\n              <SummaryValue>{results.fileName}</SummaryValue>\n            </SummaryItem>\n          )}\n\n          <SummaryItem>\n            <SummaryLabel>Reviewed</SummaryLabel>\n            <SummaryValue>{formatTimestamp(results.timestamp)}</SummaryValue>\n          </SummaryItem>\n\n          <SummaryItem>\n            <SummaryLabel>Review ID</SummaryLabel>\n            <SummaryValue>{results.reviewId}</SummaryValue>\n          </SummaryItem>\n        </SummaryGrid>\n\n        <Message variant={hasRisks ? 'warning' : 'success'} mode=\"banner\">\n          <RisksMessageContent>\n            <RisksCount>\n              {risksCount === 0\n                ? 'No Risk detected'\n                : `${risksCount} risk${risksCount !== 1 ? 's' : ''} detected`}\n            </RisksCount>\n            <RisksSubtext>\n              {risksCount === 0\n                ? 'No Risks detected'\n                : 'Review detected Risks below for details'}\n            </RisksSubtext>\n          </RisksMessageContent>\n        </Message>\n      </SummaryContainer>\n\n      {/* Actions Section - EXACT from ResultActions.tsx */}\n      {showActions && (\n        <ActionsContainer>\n          {reviewType === 'text' ? (\n            <NoActionsMessage>Text Reviews cannot be sent to IntelligenceBank</NoActionsMessage>\n          ) : (\n            <Button\n              variant=\"primary\"\n              size=\"md\"\n              fullWidth\n              onClick={onSendToIB}\n              disabled={isLoading || !canSendToIB}\n            >\n              Send to IntelligenceBank\n            </Button>\n          )}\n        </ActionsContainer>\n      )}\n    </Container>\n  );\n};\n\nReviewResults.displayName = 'ReviewResults';\n\nexport default ReviewResults;\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { Radio } from '../Radio';\nimport { Tooltip } from '../Tooltip';\n\nimport type { ReviewFilesProps, ReviewFileItem } from './ReviewFiles.types';\n\n/**\n * Selection mode for file cards\n * - 'single': Radio button selection (one file at a time)\n * - 'multiple': Checkbox selection (multiple files)\n */\nexport type SelectionMode = 'single' | 'multiple';\n\n/**\n * Default file size formatter\n */\nconst formatFileSize = (bytes: number): string => {\n  if (bytes === 0) return '0 B';\n  const k = 1024;\n  const sizes = ['B', 'KB', 'MB', 'GB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n};\n\n/**\n * Get file extension from filename\n */\nconst getFileExtension = (filename: string): string => {\n  const lastDotIndex = filename.lastIndexOf('.');\n  if (lastDotIndex === -1 || lastDotIndex === filename.length - 1) return '';\n  return filename.slice(lastDotIndex + 1).toLowerCase();\n};\n\n/**\n * Check if file is an image based on extension\n */\nconst isImageFile = (filename: string): boolean => {\n  const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico', 'tiff', 'tif'];\n  return imageExtensions.includes(getFileExtension(filename));\n};\n\n/**\n * Get file icon color based on file type - EXACT copy from FileCard.tsx\n */\nconst getFileIconColor = (filename: string): { bg: string; fg: string } => {\n  const ext = getFileExtension(filename);\n\n  if (isImageFile(filename)) return { bg: '#E8F5E9', fg: '#2E7D32' };\n\n  switch (ext) {\n    case 'pdf':\n      return { bg: '#FFEBEE', fg: '#C62828' };\n    case 'doc':\n    case 'docx':\n    case 'odt':\n    case 'rtf':\n    case 'txt':\n      return { bg: '#E3F2FD', fg: '#1565C0' };\n    case 'ppt':\n    case 'pptx':\n    case 'pptm':\n    case 'key':\n    case 'odp':\n      return { bg: '#FFF3E0', fg: '#E65100' };\n    case 'html':\n    case 'htm':\n    case 'xml':\n      return { bg: '#F3E5F5', fg: '#7B1FA2' };\n    case 'srt':\n    case 'vtt':\n      return { bg: '#E0F7FA', fg: '#00838F' };\n    default:\n      return { bg: '#F5F5F5', fg: '#616161' };\n  }\n};\n\n/**\n * Get file icon symbol based on file type - EXACT copy from FileCard.tsx\n */\nconst getFileIconSymbol = (filename: string): string => {\n  const ext = getFileExtension(filename);\n\n  if (isImageFile(filename)) return '🖼';\n\n  switch (ext) {\n    case 'pdf':\n      return 'PDF';\n    case 'doc':\n    case 'docx':\n      return 'DOC';\n    case 'ppt':\n    case 'pptx':\n    case 'pptm':\n      return 'PPT';\n    case 'txt':\n      return 'TXT';\n    case 'html':\n    case 'htm':\n      return 'HTML';\n    default:\n      return ext.toUpperCase().slice(0, 3) || 'FILE';\n  }\n};\n\n// EXACT styled components from FileCard.tsx\n\nconst CardContainer = styled.div<{\n  $isSelected: boolean;\n  $hasError: boolean;\n  $isDisabled?: boolean;\n}>`\n  ${({ theme, $isSelected, $hasError, $isDisabled }) => css`\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    padding: 12px;\n    background-color: ${$isDisabled\n      ? theme.colors.background.default\n      : $isSelected\n        ? `color-mix(in srgb, ${theme.colors.highlight} 8%, white)`\n        : theme.colors.white};\n    border: 1px solid\n      ${$hasError\n        ? theme.colors.status.error\n        : $isDisabled\n          ? theme.colors.border.light\n          : $isSelected\n            ? theme.colors.highlight\n            : theme.colors.border.light};\n    border-radius: 8px;\n    cursor: ${$isDisabled || $hasError ? 'not-allowed' : 'pointer'};\n    transition: all 0.15s ease;\n    opacity: ${$isDisabled ? 0.6 : 1};\n\n    &:hover {\n      background-color: ${$isDisabled\n        ? theme.colors.background.default\n        : $isSelected\n          ? `color-mix(in srgb, ${theme.colors.highlight} 8%, white)`\n          : theme.colors.background.default};\n      border-color: ${$hasError\n        ? theme.colors.status.error\n        : $isDisabled\n          ? theme.colors.border.light\n          : $isSelected\n            ? theme.colors.highlight\n            : theme.colors.border.medium};\n    }\n  `}\n`;\n\nconst StyledCheckbox = styled.div<{ $checked: boolean; $disabled?: boolean }>`\n  ${({ theme, $checked, $disabled }) => css`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 18px;\n    height: 18px;\n    border: 2px solid\n      ${$disabled\n        ? theme.colors.border.medium\n        : $checked\n          ? theme.colors.highlight\n          : theme.colors.border.medium};\n    border-radius: 4px;\n    background-color: ${$disabled\n      ? theme.colors.background.default\n      : $checked\n        ? theme.colors.highlight\n        : 'transparent'};\n    cursor: ${$disabled ? 'not-allowed' : 'pointer'};\n    transition: all 0.15s ease;\n    flex-shrink: 0;\n\n    &:hover {\n      border-color: ${$disabled ? theme.colors.border.medium : theme.colors.highlight};\n    }\n\n    svg {\n      display: ${$checked ? 'block' : 'none'};\n      color: white;\n    }\n  `}\n`;\n\nconst CheckIcon = () => (\n  <svg\n    width=\"12\"\n    height=\"12\"\n    viewBox=\"0 0 12 12\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n  >\n    <path d=\"M2 6L5 9L10 3\" />\n  </svg>\n);\n\nconst FileIconContainer = styled.div<{ $bgColor: string; $fgColor: string }>`\n  ${({ theme, $bgColor, $fgColor }) => css`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 40px;\n    height: 40px;\n    border-radius: 8px;\n    background-color: ${$bgColor};\n    color: ${$fgColor};\n    font-size: 10px;\n    font-weight: ${theme.typography.fontWeight.bold};\n    letter-spacing: 0.5px;\n    flex-shrink: 0;\n  `}\n`;\n\nconst FileInfo = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  flex: 1;\n  min-width: 0;\n`;\n\nconst FileName = styled.span`\n  ${({ theme }) => css`\n    font-size: ${theme.typography.fontSize.sm};\n    font-weight: ${theme.typography.fontWeight.medium};\n    color: ${theme.colors.text.primary};\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    line-height: 1.3;\n  `}\n`;\n\nconst FileDetails = styled.div`\n  ${({ theme }) => css`\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    font-size: 11px;\n    color: ${theme.colors.text.muted};\n  `}\n`;\n\nconst FileSizeTag = styled.span`\n  ${({ theme }) => css`\n    display: inline-flex;\n    padding: 2px 6px;\n    background-color: #f5f5f5;\n    border-radius: 4px;\n    font-weight: ${theme.typography.fontWeight.medium};\n  `}\n`;\n\nconst FileSourcePath = styled.span`\n  max-width: 150px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  cursor: default;\n`;\n\nconst FileError = styled.div`\n  ${({ theme }) => css`\n    font-size: 12px;\n    color: ${theme.colors.status.error};\n  `}\n`;\n\nconst RemoveButton = styled.button`\n  ${({ theme }) => css`\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 24px;\n    height: 24px;\n    padding: 0;\n    background: none;\n    border: none;\n    cursor: pointer;\n    color: ${theme.colors.text.muted};\n    border-radius: 4px;\n    flex-shrink: 0;\n    transition: all 0.15s ease;\n\n    &:hover {\n      color: ${theme.colors.status.error};\n      background-color: #ffebee;\n    }\n\n    &:focus-visible {\n      outline: 2px solid ${theme.colors.highlight};\n      outline-offset: 1px;\n    }\n\n    svg {\n      display: block;\n    }\n  `}\n`;\n\nconst CloseIcon = () => (\n  <svg\n    width=\"14\"\n    height=\"14\"\n    viewBox=\"0 0 16 16\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n  >\n    <path d=\"M4 4L12 12M12 4L4 12\" />\n  </svg>\n);\n\nconst Container = styled.div<{ $maxHeight?: number | string }>`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  ${({ $maxHeight }) =>\n    $maxHeight &&\n    css`\n      max-height: ${typeof $maxHeight === 'number' ? `${$maxHeight}px` : $maxHeight};\n      overflow-y: auto;\n    `}\n`;\n\nconst FileList = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n`;\n\nconst EmptyState = styled.div`\n  ${({ theme }) => css`\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: 24px 16px;\n    text-align: center;\n    color: ${theme.colors.text.secondary};\n    font-family: ${theme.typography.fontFamily};\n    font-size: ${theme.typography.fontSize.sm};\n  `}\n`;\n\n/**\n * FileCard - Single file card matching web-app-risk-reviews FileCard.tsx exactly\n */\ninterface FileCardProps {\n  file: ReviewFileItem;\n  isSelected?: boolean;\n  onSelect?: () => void;\n  onRemove?: () => void;\n  selectionMode?: SelectionMode;\n  isDisabled?: boolean;\n  onToggleSelect?: (fileId: string) => void;\n  showSize?: boolean;\n  showSource?: boolean;\n  showErrors?: boolean;\n  formatSize?: (bytes: number) => string;\n  dataTestId?: string;\n}\n\nconst FileCard: React.FC<FileCardProps> = ({\n  file,\n  isSelected = false,\n  onSelect,\n  onRemove,\n  selectionMode = 'single',\n  isDisabled = false,\n  onToggleSelect,\n  showSize = true,\n  showSource = false,\n  showErrors = true,\n  formatSize: customFormatSize,\n  dataTestId,\n}) => {\n  const hasError = !!file.validationError;\n  const isMultiMode = selectionMode === 'multiple';\n  const isInteractionDisabled = hasError || (isMultiMode && isDisabled && !isSelected);\n\n  const handleClick = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    if (isInteractionDisabled) return;\n\n    if (isMultiMode && file.id && onToggleSelect) {\n      onToggleSelect(file.id);\n    } else {\n      onSelect?.();\n    }\n  };\n\n  const handleRemove = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    onRemove?.();\n  };\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    if (e.key === 'Enter' || e.key === ' ') {\n      e.preventDefault();\n      if (isInteractionDisabled) return;\n\n      if (isMultiMode && file.id && onToggleSelect) {\n        onToggleSelect(file.id);\n      } else {\n        onSelect?.();\n      }\n    }\n  };\n\n  const iconColors = getFileIconColor(file.name);\n  const iconSymbol = getFileIconSymbol(file.name);\n  const sizeFormatter = customFormatSize || formatFileSize;\n\n  const renderSelectionControl = () => {\n    if (isMultiMode) {\n      return (\n        <StyledCheckbox\n          $checked={isSelected && !hasError}\n          $disabled={isInteractionDisabled}\n          role=\"checkbox\"\n          aria-checked={isSelected}\n          aria-label={`Select ${file.name}`}\n        >\n          <CheckIcon />\n        </StyledCheckbox>\n      );\n    }\n\n    return (\n      <Radio\n        value={file.name}\n        checked={isSelected && !hasError}\n        disabled={hasError}\n        aria-label={`Select ${file.name}`}\n      />\n    );\n  };\n\n  return (\n    <CardContainer\n      $isSelected={isSelected}\n      $hasError={hasError}\n      $isDisabled={isMultiMode && isDisabled && !isSelected}\n      onClick={handleClick}\n      onKeyDown={handleKeyDown}\n      tabIndex={0}\n      role=\"option\"\n      aria-selected={isSelected}\n      aria-disabled={isInteractionDisabled}\n      data-testid={dataTestId}\n    >\n      {renderSelectionControl()}\n\n      <FileIconContainer $bgColor={iconColors.bg} $fgColor={iconColors.fg} aria-hidden=\"true\">\n        {iconSymbol}\n      </FileIconContainer>\n\n      <FileInfo>\n        <Tooltip content={file.name} onlyWhenOverflow position=\"top\">\n          <FileName>{file.name}</FileName>\n        </Tooltip>\n        {hasError && showErrors ? (\n          <FileError>{file.validationError?.message}</FileError>\n        ) : (\n          <FileDetails>\n            {showSize && <FileSizeTag>{sizeFormatter(file.size)}</FileSizeTag>}\n            {showSource && file.sourcePath && (\n              <Tooltip content={file.sourcePath} onlyWhenOverflow position=\"top\">\n                <FileSourcePath>{file.sourcePath}</FileSourcePath>\n              </Tooltip>\n            )}\n          </FileDetails>\n        )}\n      </FileInfo>\n\n      {onRemove && (\n        <Tooltip content=\"Remove file\" position=\"top\">\n          <RemoveButton onClick={handleRemove} aria-label={`Remove ${file.name}`}>\n            <CloseIcon />\n          </RemoveButton>\n        </Tooltip>\n      )}\n    </CardContainer>\n  );\n};\n\n/**\n * ReviewFiles Component\n *\n * Display and manage file list for review with selection support.\n * Uses the exact FileCard styling from web-app-risk-reviews.\n */\nexport const ReviewFiles: React.FC<ReviewFilesProps> = ({\n  files,\n  selectionEnabled = false,\n  selectionMode = 'single',\n  selectedIds,\n  maxSelection,\n  onSelectionChange,\n  onRemove,\n  showRemove,\n  showSize = true,\n  showSource = false,\n  showErrors = true,\n  emptyState,\n  maxHeight,\n  formatSize: customFormatSize,\n  dataTestId,\n  dataId,\n  className,\n  style,\n}) => {\n  const shouldShowRemove = showRemove ?? !!onRemove;\n\n  // Normalize selectedIds to array\n  const normalizeSelectedIds = (): string[] => {\n    if (!selectedIds) return [];\n    return Array.isArray(selectedIds) ? selectedIds : [selectedIds];\n  };\n\n  const selectedIdsArray = normalizeSelectedIds();\n\n  const isSelected = (fileId: string): boolean => {\n    return selectedIdsArray.includes(fileId);\n  };\n\n  const handleSelect = (fileId: string) => {\n    if (!onSelectionChange) return;\n    onSelectionChange([fileId]);\n  };\n\n  const handleToggleSelect = (fileId: string) => {\n    if (!onSelectionChange) return;\n\n    if (selectionMode === 'single') {\n      onSelectionChange([fileId]);\n    } else {\n      if (isSelected(fileId)) {\n        onSelectionChange(selectedIdsArray.filter((id) => id !== fileId));\n      } else {\n        // Check if we've reached max selection\n        if (maxSelection && selectedIdsArray.length >= maxSelection) {\n          return;\n        }\n        onSelectionChange([...selectedIdsArray, fileId]);\n      }\n    }\n  };\n\n  if (files.length === 0) {\n    return (\n      <Container\n        $maxHeight={maxHeight}\n        data-testid={dataTestId}\n        data-id={dataId}\n        className={className}\n        style={style}\n      >\n        {emptyState || <EmptyState>No files added</EmptyState>}\n      </Container>\n    );\n  }\n\n  return (\n    <Container\n      $maxHeight={maxHeight}\n      data-testid={dataTestId}\n      data-id={dataId}\n      className={className}\n      style={style}\n    >\n      <FileList role=\"listbox\" aria-label=\"Files for review\">\n        {files.map((file) => {\n          const selected = isSelected(file.id);\n          const isFileDisabled =\n            selectionMode === 'multiple' &&\n            maxSelection !== undefined &&\n            selectedIdsArray.length >= maxSelection &&\n            !selected;\n\n          return (\n            <FileCard\n              key={file.id}\n              file={file}\n              selectionMode={selectionEnabled ? (selectionMode === 'multiple' ? 'multiple' : 'single') : undefined}\n              isSelected={selectionEnabled ? selected : false}\n              isDisabled={isFileDisabled}\n              onSelect={selectionEnabled ? () => handleSelect(file.id) : undefined}\n              onToggleSelect={selectionEnabled ? handleToggleSelect : undefined}\n              onRemove={shouldShowRemove ? () => onRemove?.(file.id) : undefined}\n              showSize={showSize}\n              showSource={showSource}\n              showErrors={showErrors}\n              formatSize={customFormatSize}\n              dataTestId={dataTestId ? `${dataTestId}-file-${file.id}` : undefined}\n            />\n          );\n        })}\n      </FileList>\n    </Container>\n  );\n};\n\nReviewFiles.displayName = 'ReviewFiles';\n\nexport default ReviewFiles;\n","import { keyframes } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { Message } from '../Message';\nimport { Select } from '../Select';\nimport { Multiselect } from '../Multiselect';\n\nimport type { CategoryFiltersProps, CategoryFiltersSize, FilterCategory } from './CategoryFilters.types';\n\n// Styled components from web-app-risk-reviews\n\nconst shimmer = keyframes`\n  0% {\n    background-position: -200% 0;\n  }\n  100% {\n    background-position: 200% 0;\n  }\n`;\n\nconst Container = styled.div`\n  ${({ theme }) => `\n    display: flex;\n    flex-direction: column;\n    gap: ${theme.spacing[4]};\n  `}\n`;\n\nconst LoadingContainer = styled.div`\n  ${({ theme }) => `\n    display: flex;\n    flex-direction: column;\n    gap: ${theme.spacing[4]};\n  `}\n`;\n\nconst SkeletonLabel = styled.div`\n  width: 100px;\n  height: 14px;\n  border-radius: 4px;\n  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);\n  background-size: 200% 100%;\n  animation: ${shimmer} 1.5s infinite;\n`;\n\nconst SkeletonSelect = styled.div`\n  width: 100%;\n  height: 42px;\n  border-radius: 6px;\n  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);\n  background-size: 200% 100%;\n  animation: ${shimmer} 1.5s infinite;\n`;\n\nconst SkeletonItem = styled.div`\n  ${({ theme }) => `\n    display: flex;\n    flex-direction: column;\n    gap: ${theme.spacing[2]};\n  `}\n`;\n\nconst EmptyState = styled.div`\n  ${({ theme }) => `\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: ${theme.spacing[2]};\n    padding: ${theme.spacing[5]};\n    text-align: center;\n    background-color: ${theme.colors.background.default};\n    border-radius: 8px;\n  `}\n`;\n\nconst EmptyIconWrapper = styled.div`\n  ${({ theme }) => `\n    color: ${theme.colors.text.muted};\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  `}\n`;\n\n/**\n * List icon SVG for empty state - EXACT from FilterSection.tsx\n */\nconst ListIcon = () => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"1.5\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n  >\n    <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n    <line x1=\"7\" y1=\"8\" x2=\"17\" y2=\"8\" />\n    <line x1=\"7\" y1=\"12\" x2=\"17\" y2=\"12\" />\n    <line x1=\"7\" y1=\"16\" x2=\"12\" y2=\"16\" />\n  </svg>\n);\n\nconst EmptyText = styled.span`\n  ${({ theme }) => `\n    font-size: ${theme.typography.fontSize.sm};\n    color: ${theme.colors.text.muted};\n  `}\n`;\n\n/**\n * Props for CategorySelect - internal component\n */\ninterface CategorySelectProps {\n  category: FilterCategory;\n  selectedValues: string[];\n  onSelect: (categoryId: string, categoryName: string, values: string[]) => void;\n  disabled?: boolean;\n  size?: CategoryFiltersSize;\n  dataTestId?: string;\n}\n\n/**\n * Single category dropdown component using library Select/Multiselect\n * EXACT from FilterSection.tsx CategorySelect\n */\nconst CategorySelect: React.FC<CategorySelectProps> = ({\n  category,\n  selectedValues,\n  onSelect,\n  disabled = false,\n  size = 'md',\n  dataTestId,\n}) => {\n  const isRequired = category.required === '1';\n  const isMultiple = category.multiple === '1';\n\n  const sortedFilterValues = [...category.filterValues].sort((a, b) => a.sortOrder - b.sortOrder);\n\n  // Convert filter values to Select/Multiselect option format\n  const options = sortedFilterValues.map((filterValue) => ({\n    value: filterValue.uuid,\n    label: filterValue.value,\n  }));\n\n  // Handle single-select change\n  const handleSingleChange = (value: string | null) => {\n    if (value) {\n      onSelect(category.id, category.name, [value]);\n    } else {\n      onSelect(category.id, category.name, []);\n    }\n  };\n\n  // Handle multi-select change\n  const handleMultiChange = (values: string[]) => {\n    onSelect(category.id, category.name, values);\n  };\n\n  if (isMultiple) {\n    return (\n      <Multiselect\n        label={category.name}\n        required={isRequired}\n        options={options}\n        value={selectedValues}\n        onChange={handleMultiChange}\n        placeholder={`Select ${category.name.toLowerCase()}...`}\n        disabled={disabled}\n        size={size}\n        showBulkActions\n        selectAllLabel=\"Add All\"\n        clearAllLabel=\"Clear All\"\n        fullWidth\n        dataTestId={dataTestId || `filter-select-${category.id}`}\n      />\n    );\n  }\n\n  return (\n    <Select\n      label={category.name}\n      required={isRequired}\n      options={options}\n      value={selectedValues[0] ?? null}\n      onChange={handleSingleChange}\n      placeholder={`Select ${category.name.toLowerCase()}...`}\n      disabled={disabled}\n      size={size}\n      fullWidth\n      dataTestId={dataTestId || `filter-select-${category.id}`}\n    />\n  );\n};\n\n/**\n * CategoryFilters component - Displays filter category dropdowns\n *\n * EXACT copy of FilterSection styling from web-app-risk-reviews\n *\n * Displays each category as a Select (single) or Multiselect (multiple) component.\n * Required categories show orange asterisk indicator.\n *\n * @example\n * ```tsx\n * <CategoryFilters\n *   categories={categories}\n *   selectedValues={selectedValues}\n *   onSelect={handleSelect}\n *   isLoading={isLoading}\n *   loadError={loadError}\n * />\n * ```\n */\nexport const CategoryFilters: React.FC<CategoryFiltersProps> = ({\n  categories,\n  selectedValues,\n  onSelect,\n  isLoading = false,\n  loadError,\n  disabled = false,\n  size = 'md',\n  className,\n  dataTestId = 'filter-section',\n  dataId,\n  style,\n}) => {\n  // Loading state\n  if (isLoading) {\n    return (\n      <Container className={className} data-testid={dataTestId} data-id={dataId} style={style}>\n        <LoadingContainer data-testid=\"filter-loading\">\n          <SkeletonItem>\n            <SkeletonLabel />\n            <SkeletonSelect />\n          </SkeletonItem>\n          <SkeletonItem>\n            <SkeletonLabel />\n            <SkeletonSelect />\n          </SkeletonItem>\n        </LoadingContainer>\n      </Container>\n    );\n  }\n\n  // Error state - using Message component as per application pattern\n  if (loadError) {\n    return (\n      <Container className={className} data-testid={dataTestId} data-id={dataId} style={style}>\n        <Message variant=\"error\" mode=\"banner\" dataTestId=\"filter-error\">\n          {loadError}\n        </Message>\n      </Container>\n    );\n  }\n\n  // Empty state\n  if (categories.length === 0) {\n    return (\n      <Container className={className} data-testid={dataTestId} data-id={dataId} style={style}>\n        <EmptyState data-testid=\"filter-empty\">\n          <EmptyIconWrapper>\n            <ListIcon />\n          </EmptyIconWrapper>\n          <EmptyText>No filter categories available</EmptyText>\n        </EmptyState>\n      </Container>\n    );\n  }\n\n  // Categories list\n  return (\n    <Container className={className} data-testid={dataTestId} data-id={dataId} style={style}>\n      {categories.map((category) => (\n        <CategorySelect\n          key={category.id}\n          category={category}\n          selectedValues={selectedValues[category.id] || []}\n          onSelect={onSelect}\n          disabled={disabled}\n          size={size}\n        />\n      ))}\n    </Container>\n  );\n};\n\nCategoryFilters.displayName = 'CategoryFilters';\n\nexport default CategoryFilters;\n","/**\n * Asset Adapter\n * Converts web-app resource data to the new Asset type for integration-components\n */\n\nimport type { Asset } from '../types';\n\n/**\n * Web-app resource structure (from appstore.js)\n */\nexport interface WebAppResource {\n  _id: string;\n  name: string;\n  thumbnail: string;\n  file?: {\n    name?: string;\n    size?: number;\n    type?: string;\n  };\n  width?: number;\n  height?: number;\n  type?: string;\n  fancyFileType?: string;\n  isPublic?: boolean;\n  allowedActions?: string[];\n  versionNumber?: number;\n  description?: string;\n}\n\n/**\n * Determines if a resource is restricted based on public status and allowed actions\n */\nfunction isResourceRestricted(\n  isPublic: boolean | undefined,\n  allowedActions: string[] | undefined\n): boolean {\n  if (!allowedActions || allowedActions.length === 0) {\n    return true;\n  }\n  if (allowedActions.length === 1 && allowedActions.includes('list')) {\n    return true;\n  }\n  return isPublic === false;\n}\n\n/**\n * Extracts file type from filename or type fields\n */\nfunction getFileType(resource: WebAppResource): string {\n  // Try to get from file.type first\n  if (resource.file?.type) {\n    return resource.file.type;\n  }\n  \n  // Try to get from type field\n  if (resource.type) {\n    return resource.type;\n  }\n  \n  // Try to get from fancyFileType\n  if (resource.fancyFileType) {\n    return resource.fancyFileType.toLowerCase();\n  }\n  \n  // Try to extract from filename\n  if (resource.file?.name) {\n    const parts = resource.file.name.split('.');\n    if (parts.length > 1) {\n      const extension = parts[parts.length - 1];\n      if (extension) {\n        return extension.toLowerCase();\n      }\n    }\n  }\n  \n  // Default to unknown\n  return 'unknown';\n}\n\n/**\n * Gets MIME type from file or constructs from extension\n */\nfunction getMimeType(resource: WebAppResource): string | undefined {\n  // If file.type looks like a MIME type, use it\n  if (resource.file?.type && resource.file.type.includes('/')) {\n    return resource.file.type;\n  }\n  \n  // Otherwise, we don't have a reliable MIME type\n  return undefined;\n}\n\n/**\n * Convert a single web-app resource object to the new Asset interface\n * \n * @param resource - Web-app resource object\n * @returns Asset object compatible with new components\n * \n * @example\n * ```typescript\n * const resource = {\n *   _id: 'abc123',\n *   name: 'My Image',\n *   thumbnail: 'https://...',\n *   file: { name: 'image.jpg', size: 1024000 },\n *   type: 'jpg',\n *   isPublic: true,\n *   allowedActions: ['view', 'download']\n * };\n * \n * const asset = adaptResource(resource);\n * // Returns: { id: 'abc123', name: 'My Image', fileType: 'jpg', ... }\n * ```\n */\nexport function adaptResource(resource: WebAppResource): Asset {\n  const isRestricted = isResourceRestricted(resource.isPublic, resource.allowedActions);\n  \n  return {\n    id: resource._id,\n    name: resource.name,\n    thumbnail: resource.thumbnail || '',\n    fileType: getFileType(resource),\n    fileSize: resource.file?.size ?? 0,\n    width: resource.width,\n    height: resource.height,\n    mimeType: getMimeType(resource),\n    filename: resource.file?.name,\n    description: resource.description,\n    isPublic: resource.isPublic ?? !isRestricted,\n    allowedActions: resource.allowedActions ?? [],\n    versionNumber: resource.versionNumber,\n  };\n}\n\n/**\n * Convert an array of web-app resource objects to Asset array\n * \n * @param resources - Array of web-app resource objects\n * @returns Array of Asset objects compatible with new components\n * \n * @example\n * ```typescript\n * const resources = appStore.gridData.resource[0] || [];\n * const assets = adaptResources(resources);\n * ```\n */\nexport function adaptResources(resources: WebAppResource[]): Asset[] {\n  if (!Array.isArray(resources)) {\n    return [];\n  }\n  return resources.map(adaptResource);\n}\n\n/**\n * Type guard to check if an object is a valid WebAppResource\n */\nexport function isWebAppResource(obj: unknown): obj is WebAppResource {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n  \n  const resource = obj as Record<string, unknown>;\n  return typeof resource._id === 'string' && typeof resource.name === 'string';\n}","/**\n * Folder Adapter\n * Converts web-app folder data to the new Folder and TreeFolder types\n */\n\nimport type { TreeFolder } from '../components/FolderTree/FolderTree.types';\nimport type { Folder } from '../types';\n\n/**\n * Web-app folder structure (from appstore.js and foldercard.jsx)\n */\nexport interface WebAppFolder {\n  _id: string;\n  name: string;\n  thumbnail?: string;\n  folders_count?: number;\n  resources_count?: number;\n  isPublic?: boolean;\n  allowedActions?: string[];\n  defaultorder?: string;\n}\n\n/**\n * Convert a single web-app folder object to the new Folder interface\n * \n * @param folder - Web-app folder object\n * @returns Folder object compatible with new components\n * \n * @example\n * ```typescript\n * const webAppFolder = {\n *   _id: 'folder123',\n *   name: 'My Folder',\n *   thumbnail: 'https://...',\n *   folders_count: 5,\n *   resources_count: 20,\n *   isPublic: true,\n *   allowedActions: ['list', 'view']\n * };\n * \n * const folder = adaptFolder(webAppFolder);\n * // Returns: { id: 'folder123', name: 'My Folder', foldersCount: 5, ... }\n * ```\n */\nexport function adaptFolder(folder: WebAppFolder): Folder {\n  return {\n    id: folder._id,\n    name: folder.name,\n    thumbnail: folder.thumbnail,\n    foldersCount: folder.folders_count ?? 0,\n    resourcesCount: folder.resources_count ?? 0,\n    isPublic: folder.isPublic ?? true,\n    allowedActions: folder.allowedActions ?? [],\n    defaultOrder: folder.defaultorder,\n  };\n}\n\n/**\n * Convert an array of web-app folder objects to Folder array\n * \n * @param folders - Array of web-app folder objects\n * @returns Array of Folder objects compatible with new components\n * \n * @example\n * ```typescript\n * const folders = appStore.gridData.folder[0] || [];\n * const adaptedFolders = adaptFolders(folders);\n * ```\n */\nexport function adaptFolders(folders: WebAppFolder[]): Folder[] {\n  if (!Array.isArray(folders)) {\n    return [];\n  }\n  return folders.map(adaptFolder);\n}\n\n/**\n * Convert a single web-app folder to a TreeFolder for hierarchical navigation\n * \n * @param folder - Web-app folder object\n * @param parentId - Parent folder ID (null for root folders)\n * @param children - Pre-loaded child folders (optional)\n * @returns TreeFolder object compatible with FolderTree component\n * \n * @example\n * ```typescript\n * const webAppFolder = {\n *   _id: 'folder123',\n *   name: 'My Folder',\n *   folders_count: 3\n * };\n * \n * const treeFolder = adaptFolderToTree(webAppFolder, null);\n * // Returns: { id: 'folder123', name: 'My Folder', parentId: null, ... }\n * ```\n */\nexport function adaptFolderToTree(\n  folder: WebAppFolder,\n  parentId: string | null = null,\n  children?: TreeFolder[]\n): TreeFolder {\n  return {\n    id: folder._id,\n    name: folder.name,\n    parentId,\n    children,\n    foldersCount: folder.folders_count ?? 0,\n    resourcesCount: folder.resources_count ?? 0,\n    isPublic: folder.isPublic ?? true,\n  };\n}\n\n/**\n * Convert an array of web-app folders to TreeFolder array\n * \n * @param folders - Array of web-app folder objects\n * @param parentId - Parent folder ID (null for root folders)\n * @returns Array of TreeFolder objects compatible with FolderTree component\n * \n * @example\n * ```typescript\n * const folders = appStore.gridData.folder[0] || [];\n * const treeFolders = adaptFoldersToTree(folders, null);\n * ```\n */\nexport function adaptFoldersToTree(\n  folders: WebAppFolder[],\n  parentId: string | null = null\n): TreeFolder[] {\n  if (!Array.isArray(folders)) {\n    return [];\n  }\n  return folders.map((folder) => adaptFolderToTree(folder, parentId));\n}\n\n/**\n * Extended folder type with parent reference for tree building\n */\nexport interface WebAppFolderWithParent extends WebAppFolder {\n  parentId?: string;\n}\n\n/**\n * Build a hierarchical tree from flat folder data\n * This is useful when you have a flat list of folders with parent references\n *\n * @param folders - Flat array of web-app folders with parent references\n * @returns Hierarchical TreeFolder array\n */\nexport function buildFolderTree(\n  folders: WebAppFolderWithParent[]\n): TreeFolder[] {\n  // Create a map for quick lookup\n  const folderMap = new Map<string, TreeFolder>();\n  const rootFolders: TreeFolder[] = [];\n\n  // First pass: create all TreeFolder objects\n  for (const folder of folders) {\n    folderMap.set(folder._id, adaptFolderToTree(folder, folder.parentId ?? null, []));\n  }\n\n  // Second pass: build the hierarchy\n  for (const folder of folders) {\n    const treeFolder = folderMap.get(folder._id);\n    if (!treeFolder) continue;\n\n    if (folder.parentId) {\n      const parentFolder = folderMap.get(folder.parentId);\n      if (parentFolder && parentFolder.children) {\n        parentFolder.children.push(treeFolder);\n      } else {\n        // Parent not found, treat as root\n        rootFolders.push(treeFolder);\n      }\n    } else {\n      rootFolders.push(treeFolder);\n    }\n  }\n\n  return rootFolders;\n}\n\n/**\n * Type guard to check if an object is a valid WebAppFolder\n */\nexport function isWebAppFolder(obj: unknown): obj is WebAppFolder {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n  \n  const folder = obj as Record<string, unknown>;\n  return typeof folder._id === 'string' && typeof folder.name === 'string';\n}","/**\n * Preset Adapter\n * Converts web-app preset data to the new PresetOption type\n */\n\nimport type { PresetCategory, PresetOption } from '../components/PresetSelector/PresetSelector.types';\nimport type { Preset } from '../types';\n\n/**\n * Web-app preset structure (from appstore.js globalPresets and singlePresets)\n */\nexport interface WebAppPreset {\n  _id?: string;\n  id?: string;\n  name: string;\n  fileType?: string;\n  fileSize?: string;\n  customWidth?: number;\n  customHeight?: number;\n  isGlobal?: boolean;\n}\n\n/**\n * Convert a single web-app preset object to the new PresetOption interface\n * \n * @param preset - Web-app preset object\n * @param isOriginal - Whether this represents the original file (no transformation)\n * @returns PresetOption object compatible with PresetSelector component\n * \n * @example\n * ```typescript\n * const webAppPreset = {\n *   _id: 'preset123',\n *   name: 'Thumbnail',\n *   fileType: 'jpg',\n *   customWidth: 150,\n *   customHeight: 150\n * };\n * \n * const preset = adaptPreset(webAppPreset);\n * // Returns: { id: 'preset123', name: 'Thumbnail', fileType: 'jpg', dimensions: { width: 150, height: 150 } }\n * ```\n */\nexport function adaptPreset(preset: WebAppPreset, isOriginal: boolean = false): PresetOption {\n  const id = preset._id || preset.id || '';\n  const dimensions = \n    preset.customWidth && preset.customHeight\n      ? { width: preset.customWidth, height: preset.customHeight }\n      : undefined;\n\n  return {\n    id,\n    name: preset.name,\n    fileType: preset.fileType,\n    fileSize: preset.fileSize,\n    customWidth: preset.customWidth,\n    customHeight: preset.customHeight,\n    dimensions,\n    isOriginal,\n  };\n}\n\n/**\n * Create an \"Original\" preset option for when no transformation is needed\n * \n * @param name - Display name for the original option\n * @returns PresetOption representing the original file\n * \n * @example\n * ```typescript\n * const originalPreset = createOriginalPreset();\n * // Returns: { id: 'original', name: 'Original', isOriginal: true }\n * ```\n */\nexport function createOriginalPreset(name: string = 'Original'): PresetOption {\n  return {\n    id: 'original',\n    name,\n    isOriginal: true,\n  };\n}\n\n/**\n * Convert web-app single presets and global presets into PresetOption array\n * \n * @param singlePresets - Asset-specific presets from the API\n * @param globalPresets - Global presets available for all assets\n * @param includeOriginal - Whether to include the \"Original\" option\n * @returns Array of PresetOption objects\n * \n * @example\n * ```typescript\n * const singlePresets = resource.presets || [];\n * const globalPresets = appStore.globalPresets || [];\n * \n * const presets = adaptPresets(singlePresets, globalPresets);\n * ```\n */\nexport function adaptPresets(\n  singlePresets: WebAppPreset[] = [],\n  globalPresets: WebAppPreset[] = [],\n  includeOriginal: boolean = true\n): PresetOption[] {\n  const result: PresetOption[] = [];\n\n  // Add original option first if requested\n  if (includeOriginal) {\n    result.push(createOriginalPreset());\n  }\n\n  // Add single presets (asset-specific)\n  if (Array.isArray(singlePresets)) {\n    for (const preset of singlePresets) {\n      result.push(adaptPreset(preset));\n    }\n  }\n\n  // Add global presets\n  if (Array.isArray(globalPresets)) {\n    for (const preset of globalPresets) {\n      result.push(adaptPreset(preset));\n    }\n  }\n\n  return result;\n}\n\n/**\n * Convert web-app presets into categorized PresetCategory array\n * \n * @param singlePresets - Asset-specific presets\n * @param globalPresets - Global presets\n * @param includeOriginal - Whether to include the \"Original\" option\n * @returns Array of PresetCategory objects for categorized display\n * \n * @example\n * ```typescript\n * const categories = adaptPresetsWithCategories(singlePresets, globalPresets);\n * // Returns: [\n * //   { label: 'File', presets: [{ name: 'Original', isOriginal: true }] },\n * //   { label: 'Asset Presets', presets: [...] },\n * //   { label: 'Global Presets', presets: [...] }\n * // ]\n * ```\n */\nexport function adaptPresetsWithCategories(\n  singlePresets: WebAppPreset[] = [],\n  globalPresets: WebAppPreset[] = [],\n  includeOriginal: boolean = true\n): PresetCategory[] {\n  const categories: PresetCategory[] = [];\n\n  // Original file category\n  if (includeOriginal) {\n    categories.push({\n      label: 'File',\n      presets: [createOriginalPreset()],\n    });\n  }\n\n  // Asset-specific presets\n  if (Array.isArray(singlePresets) && singlePresets.length > 0) {\n    categories.push({\n      label: 'Asset Presets',\n      presets: singlePresets.map((p) => adaptPreset(p)),\n    });\n  }\n\n  // Global presets\n  if (Array.isArray(globalPresets) && globalPresets.length > 0) {\n    categories.push({\n      label: 'Global Presets',\n      presets: globalPresets.map((p) => adaptPreset(p)),\n    });\n  }\n\n  return categories;\n}\n\n/**\n * Find a preset by ID from the combined list of single and global presets\n * \n * @param presetId - ID of the preset to find\n * @param singlePresets - Asset-specific presets\n * @param globalPresets - Global presets\n * @returns The found WebAppPreset or undefined\n */\nexport function findWebAppPreset(\n  presetId: string,\n  singlePresets: WebAppPreset[] = [],\n  globalPresets: WebAppPreset[] = []\n): WebAppPreset | undefined {\n  // Check single presets first\n  const singlePreset = singlePresets.find(\n    (p) => p._id === presetId || p.id === presetId\n  );\n  if (singlePreset) return singlePreset;\n\n  // Check global presets\n  return globalPresets.find(\n    (p) => p._id === presetId || p.id === presetId\n  );\n}\n\n/**\n * Get the full preset information (merged from web-app format)\n * This replicates the getFullPreset logic from messages.js\n * \n * @param presetId - ID of the preset\n * @param singlePresets - Asset-specific presets\n * @param globalPresets - Global presets\n * @returns Preset information or undefined if not found\n */\nexport function getFullPreset(\n  presetId: string | undefined,\n  singlePresets: WebAppPreset[] = [],\n  globalPresets: WebAppPreset[] = []\n): Preset | undefined {\n  if (!presetId || presetId === 'original') {\n    return undefined;\n  }\n\n  const webAppPreset = findWebAppPreset(presetId, singlePresets, globalPresets);\n  if (!webAppPreset) {\n    return undefined;\n  }\n\n  return {\n    id: webAppPreset._id || webAppPreset.id || '',\n    name: webAppPreset.name,\n    fileType: webAppPreset.fileType,\n    fileSize: webAppPreset.fileSize,\n    customWidth: webAppPreset.customWidth,\n    customHeight: webAppPreset.customHeight,\n  };\n}\n\n/**\n * Type guard to check if an object is a valid WebAppPreset\n */\nexport function isWebAppPreset(obj: unknown): obj is WebAppPreset {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n  \n  const preset = obj as Record<string, unknown>;\n  return typeof preset.name === 'string';\n}","/**\n * Store Adapter\n * Provides adapter hooks and functions for bridging MobX store data to component props\n */\n\nimport { adaptResource, adaptResources, type WebAppResource } from './asset-adapter';\nimport { adaptFolder, adaptFolders, adaptFoldersToTree, type WebAppFolder } from './folder-adapter';\nimport { adaptPresets, adaptPresetsWithCategories, type WebAppPreset } from './preset-adapter';\n\nimport type { PaginationInfo } from '../components/AssetBrowser/AssetBrowser.types';\nimport type { TreeFolder } from '../components/FolderTree/FolderTree.types';\nimport type { Asset, Folder } from '../types';\n\n// Re-export for convenience\nexport { adaptResource, adaptResources } from './asset-adapter';\nexport { adaptFolder, adaptFolders, adaptFoldersToTree, buildFolderTree } from './folder-adapter';\nexport { adaptPreset, adaptPresets, adaptPresetsWithCategories } from './preset-adapter';\n\n/**\n * Web-app gridData structure (from appstore.js)\n */\nexport interface WebAppGridData {\n  folder?: WebAppFolder[];\n  resource?: WebAppResource[];\n  parentFolder?: WebAppFolder;\n  currentFolder?: WebAppFolder;\n  pagination?: {\n    count?: number;\n    pageNumber?: number;\n    pageSize?: number;\n  };\n}\n\n/**\n * Web-app appStore structure (relevant fields)\n */\nexport interface WebAppAppStore {\n  gridData?: WebAppGridData;\n  folderData?: WebAppFolder[];\n  currentFolderId?: string;\n  expandedFolderIds?: string[];\n  loading?: boolean;\n  isLoading?: boolean;\n  globalPresets?: WebAppPreset[];\n  pageCounter?: number;\n}\n\n/**\n * Web-app authStore structure (relevant fields)\n */\nexport interface WebAppAuthStore {\n  isAuthenticated?: boolean;\n  user?: {\n    _id?: string;\n    name?: string;\n  };\n}\n\n/**\n * Props returned for AssetBrowser component from store adapter\n */\nexport interface AdaptedAssetBrowserProps {\n  folders: Folder[];\n  assets: Asset[];\n  loading: boolean;\n  pagination: PaginationInfo;\n  currentFolder?: Folder;\n  parentFolder?: Folder;\n}\n\n/**\n * Props returned for FolderTree component from store adapter\n */\nexport interface AdaptedFolderTreeProps {\n  folders: TreeFolder[];\n  selectedId: string | null;\n  expandedIds: string[];\n}\n\n/**\n * Calculate pagination info from web-app pagination data\n */\nfunction calculatePagination(paginationData: { count?: number; pageNumber?: number; pageSize?: number }): PaginationInfo {\n  const { count = 0, pageNumber = 1, pageSize = 20 } = paginationData;\n  const totalPages = Math.ceil(count / pageSize);\n  \n  return {\n    currentPage: pageNumber,\n    totalPages,\n    totalItems: count,\n    itemsPerPage: pageSize,\n  };\n}\n\n/**\n * Extract asset browser data from appStore and authStore\n * \n * @param appStore - MobX appStore instance from web-app\n * @param _authStore - MobX authStore instance from web-app (reserved for future use)\n * @returns Props compatible with new asset browser components\n * \n * @example\n * ```typescript\n * import { appStore, authStore } from '../stores';\n * import { getAssetBrowserProps } from '@intelligencebank/integration-components/adapters';\n * \n * const AssetBrowser = observer(() => {\n *   const props = getAssetBrowserProps(appStore, authStore);\n *   return <NewAssetBrowser {...props} />;\n * });\n * ```\n */\nexport function getAssetBrowserProps(\n  appStore: WebAppAppStore,\n  _authStore?: WebAppAuthStore\n): AdaptedAssetBrowserProps {\n  const gridData = appStore.gridData || {};\n  const folders = adaptFolders(gridData.folder || []);\n  const assets = adaptResources(gridData.resource || []);\n  \n  const paginationData = gridData.pagination || {};\n  const pagination = calculatePagination(paginationData);\n\n  const loading = appStore.loading || appStore.isLoading || false;\n\n  const currentFolder = gridData.currentFolder \n    ? adaptFolder(gridData.currentFolder) \n    : undefined;\n    \n  const parentFolder = gridData.parentFolder \n    ? adaptFolder(gridData.parentFolder) \n    : undefined;\n\n  return {\n    folders,\n    assets,\n    loading,\n    pagination,\n    currentFolder,\n    parentFolder,\n  };\n}\n\n/**\n * Extract folder tree data from appStore\n * \n * @param appStore - MobX appStore instance from web-app\n * @returns Props compatible with FolderTree component\n * \n * @example\n * ```typescript\n * import { appStore } from '../stores';\n * import { getFolderTreeProps } from '@intelligencebank/integration-components/adapters';\n * \n * const FolderTreeView = observer(() => {\n *   const props = getFolderTreeProps(appStore);\n *   return <FolderTree {...props} />;\n * });\n * ```\n */\nexport function getFolderTreeProps(appStore: WebAppAppStore): AdaptedFolderTreeProps {\n  const folders = adaptFoldersToTree(appStore.folderData || []);\n  const selectedId = appStore.currentFolderId || null;\n  const expandedIds = appStore.expandedFolderIds || [];\n\n  return {\n    folders,\n    selectedId,\n    expandedIds,\n  };\n}\n\n/**\n * Extract pagination info from appStore\n * \n * @param appStore - MobX appStore instance\n * @returns PaginationInfo object\n */\nexport function getPaginationInfo(appStore: WebAppAppStore): PaginationInfo {\n  const paginationData = appStore.gridData?.pagination || {};\n  return calculatePagination(paginationData);\n}\n\n/**\n * Extract a single folder from gridData\n * \n * @param appStore - MobX appStore instance\n * @param index - Index of the folder in gridData.folder array\n * @returns Folder object or undefined if not found\n */\nexport function getFolderByIndex(appStore: WebAppAppStore, index: number): Folder | undefined {\n  const folders = appStore.gridData?.folder || [];\n  const folder = folders[index];\n  return folder ? adaptFolder(folder) : undefined;\n}\n\n/**\n * Extract a single asset from gridData\n * \n * @param appStore - MobX appStore instance\n * @param index - Index of the resource in gridData.resource array\n * @returns Asset object or undefined if not found\n */\nexport function getAssetByIndex(appStore: WebAppAppStore, index: number): Asset | undefined {\n  const resources = appStore.gridData?.resource || [];\n  const resource = resources[index];\n  return resource ? adaptResource(resource) : undefined;\n}\n\n/**\n * Get the currently selected/active folder\n * \n * @param appStore - MobX appStore instance\n * @returns The current folder or undefined\n */\nexport function getCurrentFolder(appStore: WebAppAppStore): Folder | undefined {\n  const currentFolder = appStore.gridData?.currentFolder;\n  return currentFolder ? adaptFolder(currentFolder) : undefined;\n}\n\n/**\n * Get presets with categories from appStore\n * \n * @param appStore - MobX appStore instance\n * @param singlePresets - Asset-specific presets\n * @returns Categorized preset array\n */\nexport function getPresetCategories(\n  appStore: WebAppAppStore,\n  singlePresets: WebAppPreset[] = []\n) {\n  const globalPresets = appStore.globalPresets || [];\n  return adaptPresetsWithCategories(singlePresets, globalPresets);\n}\n\n/**\n * Get flat list of presets from appStore\n * \n * @param appStore - MobX appStore instance\n * @param singlePresets - Asset-specific presets\n * @returns Flat preset array\n */\nexport function getPresetOptions(\n  appStore: WebAppAppStore,\n  singlePresets: WebAppPreset[] = []\n) {\n  const globalPresets = appStore.globalPresets || [];\n  return adaptPresets(singlePresets, globalPresets);\n}","/**\n * Action Adapter\n * Adapts action handlers from web-app stores to component callbacks\n */\n\nimport type { Asset, Folder } from '../types';\n\n/**\n * Web-app appStore action methods (from appstore.js)\n */\nexport interface WebAppStoreActions {\n  requestPublicUrl?: (resourceId: string) => void;\n  requestDownloadUrl?: (resourceId: string, presetId?: string) => void;\n  openFolder?: (folderId: string) => void;\n  setCurrentFolder?: (folderId: string) => void;\n  prepareDrag?: (resourceId: string) => void;\n  selectResource?: (resourceId: string) => void;\n  deselectResource?: (resourceId: string) => void;\n  toggleResourceSelection?: (resourceId: string) => void;\n}\n\n/**\n * Web-app authStore action methods\n */\nexport interface WebAppAuthActions {\n  checkPermission?: (action: string, resourceId?: string) => boolean;\n}\n\n/**\n * Asset card action handlers\n */\nexport interface AssetCardActions {\n  onDownload: () => void;\n  onInsertLink: () => void;\n  onDragReady: () => void;\n  onClick?: () => void;\n}\n\n/**\n * Folder card action handlers\n */\nexport interface FolderCardActions {\n  onClick: () => void;\n}\n\n/**\n * Create action handlers for AssetCard component\n * \n * @param appStore - MobX appStore instance with action methods\n * @param _authStore - MobX authStore instance (reserved for permission checking)\n * @param asset - The asset to create actions for\n * @returns Object with action handlers compatible with AssetCard props\n * \n * @example\n * ```typescript\n * import { appStore, authStore } from '../stores';\n * import { createAssetCardActions, adaptResource } from '@intelligencebank/integration-components/adapters';\n * \n * const ImageCard = observer(({ resource }) => {\n *   const asset = adaptResource(resource);\n *   const actions = createAssetCardActions(appStore, authStore, asset);\n *   \n *   return (\n *     <AssetCard\n *       asset={asset}\n *       onDownload={actions.onDownload}\n *       onInsertLink={actions.onInsertLink}\n *       onDragReady={actions.onDragReady}\n *     />\n *   );\n * });\n * ```\n */\nexport function createAssetCardActions(\n  appStore: WebAppStoreActions,\n  _authStore?: WebAppAuthActions,\n  asset?: Asset\n): AssetCardActions {\n  const resourceId = asset?.id || '';\n\n  return {\n    onDownload: () => {\n      if (appStore.requestDownloadUrl && resourceId) {\n        appStore.requestDownloadUrl(resourceId);\n      }\n    },\n    onInsertLink: () => {\n      if (appStore.requestPublicUrl && resourceId) {\n        appStore.requestPublicUrl(resourceId);\n      }\n    },\n    onDragReady: () => {\n      if (appStore.prepareDrag && resourceId) {\n        appStore.prepareDrag(resourceId);\n      }\n    },\n    onClick: () => {\n      if (appStore.selectResource && resourceId) {\n        appStore.selectResource(resourceId);\n      }\n    },\n  };\n}\n\n/**\n * Create action handlers for FolderCard component\n * \n * @param appStore - MobX appStore instance with action methods\n * @param folder - The folder to create actions for\n * @returns Object with action handlers compatible with FolderCard props\n * \n * @example\n * ```typescript\n * import { appStore } from '../stores';\n * import { createFolderCardActions, adaptFolder } from '@intelligencebank/integration-components/adapters';\n * \n * const FolderCardWrapper = observer(({ webAppFolder }) => {\n *   const folder = adaptFolder(webAppFolder);\n *   const actions = createFolderCardActions(appStore, folder);\n *   \n *   return (\n *     <FolderCard\n *       folder={folder}\n *       onClick={actions.onClick}\n *     />\n *   );\n * });\n * ```\n */\nexport function createFolderCardActions(\n  appStore: WebAppStoreActions,\n  folder?: Folder\n): FolderCardActions {\n  const folderId = folder?.id || '';\n\n  return {\n    onClick: () => {\n      if (appStore.openFolder && folderId) {\n        appStore.openFolder(folderId);\n      } else if (appStore.setCurrentFolder && folderId) {\n        appStore.setCurrentFolder(folderId);\n      }\n    },\n  };\n}\n\n/**\n * Create a handler for folder tree item clicks\n * \n * @param appStore - MobX appStore instance\n * @returns A callback function for folder tree selection\n */\nexport function createFolderTreeSelectHandler(\n  appStore: WebAppStoreActions\n): (folderId: string) => void {\n  return (folderId: string) => {\n    if (appStore.openFolder) {\n      appStore.openFolder(folderId);\n    } else if (appStore.setCurrentFolder) {\n      appStore.setCurrentFolder(folderId);\n    }\n  };\n}\n\n/**\n * Create handlers for asset selection\n * \n * @param appStore - MobX appStore instance\n * @returns Selection handlers\n */\nexport function createSelectionHandlers(\n  appStore: WebAppStoreActions\n): {\n  onSelect: (assetId: string) => void;\n  onDeselect: (assetId: string) => void;\n  onToggle: (assetId: string) => void;\n} {\n  return {\n    onSelect: (assetId: string) => {\n      if (appStore.selectResource) {\n        appStore.selectResource(assetId);\n      }\n    },\n    onDeselect: (assetId: string) => {\n      if (appStore.deselectResource) {\n        appStore.deselectResource(assetId);\n      }\n    },\n    onToggle: (assetId: string) => {\n      if (appStore.toggleResourceSelection) {\n        appStore.toggleResourceSelection(assetId);\n      }\n    },\n  };\n}\n\n/**\n * Create a handler for download with preset selection\n * \n * @param appStore - MobX appStore instance\n * @param assetId - The asset ID to download\n * @returns A callback that accepts a preset ID\n */\nexport function createDownloadWithPresetHandler(\n  appStore: WebAppStoreActions,\n  assetId: string\n): (presetId?: string) => void {\n  return (presetId?: string) => {\n    if (appStore.requestDownloadUrl) {\n      appStore.requestDownloadUrl(assetId, presetId);\n    }\n  };\n}","/**\n * React hooks for integration components\n * Placeholder - Hooks will be added as components are implemented\n */\n\nimport { useState, useCallback } from 'react';\n\n/**\n * Hook for managing asset selection\n * @returns Asset selection state and handlers\n */\nexport function useAssetSelection<T extends { id: string }>() {\n  const [selectedAssets, setSelectedAssets] = useState<T[]>([]);\n\n  const toggleSelection = useCallback((asset: T) => {\n    setSelectedAssets((prev) => {\n      const isSelected = prev.some((a) => a.id === asset.id);\n      if (isSelected) {\n        return prev.filter((a) => a.id !== asset.id);\n      }\n      return [...prev, asset];\n    });\n  }, []);\n\n  const selectAll = useCallback((assets: T[]) => {\n    setSelectedAssets(assets);\n  }, []);\n\n  const clearSelection = useCallback(() => {\n    setSelectedAssets([]);\n  }, []);\n\n  const isSelected = useCallback(\n    (assetId: string) => selectedAssets.some((a) => a.id === assetId),\n    [selectedAssets]\n  );\n\n  return {\n    selectedAssets,\n    toggleSelection,\n    selectAll,\n    clearSelection,\n    isSelected,\n    selectionCount: selectedAssets.length,\n  };\n}\n\n/**\n * Hook for managing folder navigation\n * @returns Folder navigation state and handlers\n */\nexport function useFolderNavigation(rootFolderId = 'root') {\n  const [currentFolderId, setCurrentFolderId] = useState<string>(rootFolderId);\n  const [folderHistory, setFolderHistory] = useState<string[]>([]);\n\n  const navigateTo = useCallback((folderId: string) => {\n    setFolderHistory((prev) => [...prev, currentFolderId]);\n    setCurrentFolderId(folderId);\n  }, [currentFolderId]);\n\n  const goBack = useCallback(() => {\n    if (folderHistory.length === 0) return;\n    \n    const previousFolderId = folderHistory[folderHistory.length - 1];\n    setFolderHistory((prev) => prev.slice(0, -1));\n    if (previousFolderId !== undefined) {\n      setCurrentFolderId(previousFolderId);\n    }\n  }, [folderHistory]);\n\n  const goToRoot = useCallback(() => {\n    setFolderHistory([]);\n    setCurrentFolderId(rootFolderId);\n  }, [rootFolderId]);\n\n  const canGoBack = folderHistory.length > 0;\n  const isAtRoot = currentFolderId === rootFolderId;\n\n  return {\n    currentFolderId,\n    folderHistory,\n    navigateTo,\n    goBack,\n    goToRoot,\n    canGoBack,\n    isAtRoot,\n  };\n}\n\n/**\n * Hook for managing search state\n * @returns Search state and handlers\n */\nexport function useSearch(debounceMs = 300) {\n  const [query, setQuery] = useState('');\n  const [debouncedQuery, setDebouncedQuery] = useState('');\n  const [isSearching, setIsSearching] = useState(false);\n\n  const updateQuery = useCallback((newQuery: string) => {\n    setQuery(newQuery);\n    setIsSearching(true);\n    \n    // Simple debounce implementation\n    const timeoutId = setTimeout(() => {\n      setDebouncedQuery(newQuery);\n      setIsSearching(false);\n    }, debounceMs);\n\n    return () => clearTimeout(timeoutId);\n  }, [debounceMs]);\n\n  const clearSearch = useCallback(() => {\n    setQuery('');\n    setDebouncedQuery('');\n    setIsSearching(false);\n  }, []);\n\n  return {\n    query,\n    debouncedQuery,\n    isSearching,\n    updateQuery,\n    clearSearch,\n  };\n}"],"names":["useOverflowDetection","enabled","isOverflowing","setIsOverflowing","useState","elementRef","useRef","checkOverflow","useCallback","el","hasOverflow","useEffect","observer","setRef","node","fadeIn","keyframes","fadeOut","TooltipContainer","styled","$zIndex","$maxWidth","$isLeaving","Arrow","$position","TriggerWrapper","getPosition","triggerRect","tooltipRect","position","offset","scrollY","scrollX","top","left","Tooltip","forwardRef","content","children","delay","hideDelay","disabled","maxWidth","contentStyle","contentClassName","arrow","zIndex","controlledOpen","onOpenChange","onlyWhenOverflow","testId","dataTestId","dataId","rest","ref","setOverflowRef","isControlled","internalOpen","setInternalOpen","isLeaving","setIsLeaving","tooltipPosition","setTooltipPosition","triggerRef","tooltipRef","showTimeoutRef","hideTimeoutRef","leaveTimeoutRef","isOpen","setOpen","value","updatePosition","pos","handleShow","handleHide","handleScrollOrResize","setCombinedRef","trigger","isValidElement","cloneElement","e","_b","_a","jsx","tooltipStyles","jsxs","Fragment","createPortal","rotate","dash","bounce","stretch","SpinnerContainer","$centered","ScreenReaderOnly","Circular","$isAnimated","css","CircularSvg","CircularPathBackground","CircularPathIndeterminate","SmoothSpinner","CircularPathDeterminate","ProgressLabel","props","DotsContainer","Dot","$delay","BarsContainer","Bar","calculateDashOffset","circumference","clampedValue","Spinner","size","color","variant","speed","label","centered","className","progressMode","thickness","withLabel","labelFormatter","v","customColor","smooth","sizeValue","inlineStyles","radius","dashOffset","renderSpinner","ariaLabel","spinnerSizeMap","getSizeStyles","theme","fontSize","StyledButton","$fontWeight","$loading","$showHelpCursor","$fullWidth","$width","$size","$iconButton","$hasLeftIcon","$hasRightIcon","$variant","$active","$outlineColor","$backgroundColor","$textColor","transparentBlack05","transparentBlack08","transparentBlack20","transparentBlack50","transparentWhite20","grey600","grey700","greenBase","redBase","orangeBase","highlightColor","highlightText","white","SpinnerWrapper","Content","IconWrapper","iconSize","Button","fullWidth","loading","icon","leftIcon","rightIcon","type","onClick","active","tooltip","tooltipProps","width","showHelpCursor","fontWeight","outlineColor","backgroundColor","textColor","isDisabled","effectiveLeftIcon","hasLeftIcon","hasRightIcon","iconButton","buttonElement","event","StyledCard","interactive","selected","padding","StyledHeader","StyledMedia","aspectRatio","StyledContent","StyledActions","align","Card","onDoubleClick","style","role","ariaDisabled","CardHeader","CardMedia","src","alt","CardContent","CardActions","CardWithCompounds","gapMap","alignMap","justifyMap","StyledGrid","$gap","$align","$justify","StyledGridItem","responsiveGridStyles","Grid","columns","gap","justify","autoFit","minColumnWidth","isResponsive","Global","GridItem","colSpan","rowSpan","isResponsiveColSpan","GridWithItem","spacingMap","resolveSpacing","StyledStack","$direction","$wrap","Stack","direction","wrap","Component","resolvedAlign","resolvedGap","resolvedJustify","borderRadiusMap","StyledBox","$pt","$pr","$pb","$pl","$mt","$mr","$mb","$ml","$borderRadius","$accentColor","Box","p","px","py","pt","pr","pb","pl","m","mx","my","mt","mr","mb","ml","accentColor","borderRadius","resolvedPt","resolvedPr","resolvedPb","resolvedPl","resolvedMt","resolvedMr","resolvedMb","resolvedMl","resolvedBorderRadius","StyledCenter","$inline","Center","inline","$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c","$HgANd$react","$431fbd86ca7dc216$export$b204af158042fbac","_el_ownerDocument","$431fbd86ca7dc216$export$f21a1ffae260145a","$431fbd86ca7dc216$var$isNode","$431fbd86ca7dc216$export$af51f0f06c0f328a","$f4e2df6bd15f8569$var$_shadowDOM","$f4e2df6bd15f8569$export$98658e8c59125e6a","$d4ee10de306f2510$export$4282f70798064fe0","otherNode","$lcSu5$shadowDOM","currentNode","$d4ee10de306f2510$export$cd4e5573fbe2b576","doc","_activeElement_shadowRoot","activeElement","$d4ee10de306f2510$export$e58f029f0fbfdb29","$7215afc6de606d6b$export$de79e2c695e052f3","element","$7215afc6de606d6b$var$supportsPreventScroll","scrollableElements","$7215afc6de606d6b$var$getScrollableElements","$7215afc6de606d6b$var$restoreScrollPosition","$7215afc6de606d6b$var$supportsPreventScrollCached","parent","rootScrollingElement","scrollTop","scrollLeft","$c87311424ea30a05$var$testUserAgent","re","_window_navigator_userAgentData","brands","brand","$c87311424ea30a05$var$testPlatform","$c87311424ea30a05$var$cached","fn","res","$c87311424ea30a05$export$9ac100e40613ea10","$c87311424ea30a05$export$186c6964ca17d99","$c87311424ea30a05$export$7bef049ce92e4224","$c87311424ea30a05$export$fedb369cb70207f1","$c87311424ea30a05$export$78551043582a6a98","$c87311424ea30a05$export$6446a186d09e379e","$c87311424ea30a05$export$a11b0059900ceec8","$c87311424ea30a05$export$b7d78993b74f766d","$ea8dcbcb9ea1b556$export$95185d699e05d4d7","target","modifiers","setOpening","_window_event_type","_window_event","metaKey","ctrlKey","altKey","shiftKey","$03deb23ff14920c4$export$4eaf04e54aa8eed6","globalListeners","$lPAwt$useRef","addGlobalListener","$lPAwt$useCallback","eventTarget","listener","options","args","removeGlobalListener","_globalListeners_current_get","removeAllGlobalListeners","key","$lPAwt$useEffect","$6a7db85432448f7f$export$60278871457622de","$8a9cb279dc87e130$export$525bc4921d56d4a","nativeEvent","$8a9cb279dc87e130$export$c2b7abe5d61ec696","$8a9cb279dc87e130$export$715c682d09d639cc","onBlur","stateRef","$6dfIe$useRef","$6dfIe$useLayoutEffect","state","$6dfIe$useCallback","onBlurHandler","_stateRef_current_observer","relatedTargetEl","$8a9cb279dc87e130$export$fda7da73ab5d4c48","$507fabe10e71c6fb$var$currentModality","$507fabe10e71c6fb$var$changeHandlers","$507fabe10e71c6fb$export$d90243b58daecda7","$507fabe10e71c6fb$var$hasEventBeforeFocus","$507fabe10e71c6fb$var$hasBlurredWindowRecently","$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS","$507fabe10e71c6fb$var$triggerChangeHandlers","modality","handler","$507fabe10e71c6fb$var$isValidKey","$28AnR$isMac","$507fabe10e71c6fb$var$handleKeyboardEvent","$28AnR$openLink","$507fabe10e71c6fb$var$handlePointerEvent","$507fabe10e71c6fb$var$handleClickEvent","$28AnR$isVirtualClick","$507fabe10e71c6fb$var$handleFocusEvent","$507fabe10e71c6fb$var$handleWindowBlur","$507fabe10e71c6fb$var$setupGlobalFocusEvents","$28AnR$getOwnerWindow","windowObject","documentObject","$28AnR$getOwnerDocument","focus","$507fabe10e71c6fb$var$tearDownWindowFocusTracking","loadListener","$507fabe10e71c6fb$export$2f1888112f558a7d","$507fabe10e71c6fb$export$b9b3dfddab17db27","$507fabe10e71c6fb$var$nonTextInputTypes","$507fabe10e71c6fb$var$isKeyboardFocusEvent","isTextInput","document1","IHTMLInputElement","IHTMLTextAreaElement","IHTMLElement","IKeyboardEvent","$507fabe10e71c6fb$export$ec71b4b83ac08ec3","deps","opts","$28AnR$useEffect","$a1ea59d68270f0dd$export$f8168d8dd8fd66e6","onFocusProp","onBlurProp","onFocusChange","$hf0lj$useCallback","onSyntheticFocus","onFocus","ownerDocument","$hf0lj$getOwnerDocument","$hf0lj$getActiveElement","$hf0lj$getEventTarget","$9ab94262bd0047c7$export$420e68273165f4ec","onBlurWithin","onFocusWithin","onFocusWithinChange","$3b9Q0$useRef","$3b9Q0$useGlobalListeners","$3b9Q0$useCallback","$3b9Q0$getOwnerDocument","$3b9Q0$getActiveElement","$3b9Q0$getEventTarget","currentTarget","$3b9Q0$nodeContains","$6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents","$6179b936705e76d3$var$hoverCount","$6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents","$6179b936705e76d3$var$handleGlobalPointerEvent","$6179b936705e76d3$var$setupGlobalTouchEvents","$6179b936705e76d3$export$ae780daf29e6d456","onHoverStart","onHoverChange","onHoverEnd","isHovered","setHovered","$AWxnT$useState","$AWxnT$useRef","$AWxnT$useEffect","$AWxnT$useGlobalListeners","hoverProps","triggerHoverEnd","$AWxnT$useMemo","triggerHoverStart","pointerType","$AWxnT$getOwnerDocument","$AWxnT$nodeContains","$f7dceffc5ad7768b$export$4e328f61c538687f","autoFocus","within","$isWE5$useRef","$isWE5$isFocusVisible","isFocused","setFocused","$isWE5$useState","isFocusVisibleState","setFocusVisible","updateState","$isWE5$useCallback","$isWE5$useFocusVisibleListener","isFocusVisible","focusProps","$isWE5$useFocus","focusWithinProps","$isWE5$useFocusWithin","i","d","t","n","r","o$8","s","o","l","u","a","f","c","E","P","w","g","A","C","K","$","x","U","I","F","y","O","h","T","b","k","D","R","N","H","S","M","V","Y","j","L","n.isHTMLFieldSetElement","n.isHTMLLegendElement","_","G","B","m.isInteractiveElement","m.isHTMLLabelElement","m.isHTMLInputElement","Z","T$3","o$2","React","require$$0","is","objectIs","useSyncExternalStore","useMemo","useDebugValue","useSyncExternalStoreWithSelector_production","subscribe","getSnapshot","getServerSnapshot","selector","isEqual","instRef","inst","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","useSyncExternalStoreWithSelector_development","withSelectorModule","require$$1","c.isHTMLElement","d.isHTMLorSVGElement","d.isHTMLIframeElement","E.isNode","E.isHTMLorSVGElement","i.isHTMLorSVGElement","i.hasInlineStyle","i.isHTMLInputElement","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","_ref","isElement","isHTMLElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflow","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","getContainingBlock","getParentNode","isLastTraversableNode","lastTraversableNodeNames","getNodeScroll","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getUserAgent","uaData","version","min","max","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","start","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","yAxisSides","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","expandPaddingObject","getPaddingObject","rectToClientRect","rect","height","computeCoordsFromPlacement","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","config","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","name","nextX","nextY","data","reset","detectOverflow","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflows","overflowsData","sides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","acc","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","_state$middlewareData","_state$middlewareData2","apply","isYAxis","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","offsets","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","absoluteOrFixed","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","timeoutId","root","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","detectOverflow$1","offset$1","shift$1","flip$1","size$1","mergedOptions","platformWithCache","computePosition$1","isClient","noop","index","useLayoutEffect","deepEqual","keys","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","transform","whileElementsMounted","open","setData","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","ReactDOM","refs","floatingStyles","initialStyles","SafeReact","useInsertionEffect","useSafeInsertionEffect","useEffectEvent","callback","_len","_key","serverHandoffComplete","count","genId","useFloatingId","id","setId","useReactId","useId","devMessageSet","warn","_devMessageSet","messages","message","_devMessageSet2","error","_devMessageSet3","_len2","_key2","_devMessageSet4","createPubSub","map","_map$get","_map$get2","FloatingNodeContext","FloatingTreeContext","useFloatingParentNodeId","_React$useContext","useFloatingTree","FOCUSABLE_ATTRIBUTE","useFloatingRootContext","onOpenChangeProp","elementsProp","floatingId","events","nested","optionDomReference","positionReference","setPositionReference","reason","nodeId","internalRootContext","rootContext","computedElements","_domReference","setDomReference","_setPositionReference","domReference","domReferenceRef","tree","useFloating$1","computedPositionReference","context","ACTIVE_KEY","SELECTED_KEY","mergeProps","userProps","propsList","elementKey","isItem","domUserProps","__","validProps","propsOrGetProps","val","useInteractions","referenceDeps","floatingDeps","itemDeps","getReferenceProps","getFloatingProps","getItemProps","getArgsWithCustomFloatingHeight","inner","listRef","overflowRef","onFallbackChange","innerOffset","minItemsVisible","referenceOverflowThreshold","scrollRef","item","scrollEl","clientTop","floatingIsBordered","scrollElIsBordered","floatingIsScrollEl","nextArgs","refOverflow","diffY","maxHeight","useInnerOffset","unstable_onChange","onChange","controlledScrollingRef","prevScrollTopRef","initialOverflowRef","onWheel","dY","isAtTop","isAtBottom","remainingScroll","sign","method","scrollDiff","ye","Fe","be","Te","ae","Re","Ae","ue","ce","ge","oe","ne","ee","te","W","pe.isHTMLElement","le","ie","Q","X","se","z","fe","J","q","u.isHTMLorSVGElement","f.isElement","i.isElement","i.isHTMLElement","_e","de","De","He","Ee","ve","xe","pe","Ce","Ne","Pe","Se","he","Ie","me","Le","Oe","Ke","we","Be","Ue","ke","Me","We","$e","Ge","je","Ye","Je","Xe","Ve","qe","ze","Qe","ht","g.isHTMLElement","Pt","gt","Lt","lt","xt","ut","st","Ot","nt","et","vt","Et","ot","it.isHTMLElement","dt","bt","ft","At","_t","Ze","rt","tt","ct","yt","St","Dt","at","Rt","Ft","Ct","Mt","wt","Tt","Bt","It","kt","Mo","getFontSizeValue","Container","Label","$fontSize","RequiredIndicator","FieldLabel","required","htmlFor","spin","baseIconStyles","MaterialIcon","$spin","$hasRotate","SvgIcon","Icon","spinProp","ariaHidden","isMaterialIcon","isCustomSvg","shouldHaveRole","variantConfig","slideIn","slideOut","InlineContainer","BannerContainer","SnackbarContainer","InlineIconWrapper","ContentWrapper","ToggleWrapper","MessageText","$customColor","$truncateLines","$isExpanded","ToggleButton","ActionButton","CloseButton","Message","mode","customTextColor","showIcon","autoHideDuration","onClose","action","showCloseButton","truncateLines","showMoreText","showLessText","isExiting","timerRef","textRef","isExpanded","setIsExpanded","needsTruncation","setNeedsTruncation","handleClose","handleMouseEnter","handleMouseLeave","handleToggleExpand","prev","renderIcon","iconElement","renderMessage","renderToggleButton","SnackbarWrapper","SnackbarStack","alerts","onAction","renderedAlerts","setRenderedAlerts","exitingAlerts","setExitingAlerts","timersRef","clearTimer","next","useImperativeHandle","alert","duration","timer","handleAction","alertAction","idCounter","generateId","SnackbarContext","createContext","useSnackbar","useContext","SnackbarProvider","maxSnackbars","setAlerts","alertOrderRef","showSnackbar","oldestId","hideSnackbar","alertId","clearAll","success","warning","info","contextValue","SelectWrapper","ButtonContent","ButtonText","ButtonActions","ClearButton","LoadingSpinner","Chevron","Options","SearchWrapper","SearchInput","OptionsList","OptionItem","OptionContent","OptionLabel","Checkmark","NoResults","HiddenInput","Select","placeholder","errorMessage","searchable","ariaDescribedby","ariaLabelledby","isSearchable","clearable","isClearable","isLoading","assistiveText","onMenuOpen","onMenuClose","onInputChange","selectRef","menuPlacement","noResultsMessage","searchPlaceholder","labelFontSize","selectedFontSize","optionFontSize","focusColor","query","setQuery","wasOpen","setWasOpen","useTheme","isSearchEnabled","isClearEnabled","defaultFontSize","resolvedLabelFontSize","resolvedSelectedFontSize","resolvedOptionFontSize","selectedOption","opt","filteredOptions","lowerQuery","option","handleChange","newValue","handleClear","handleQueryChange","newQuery","handleOpenChange","Listbox","Transition","FONT_SIZE_TOKENS","resolveFontSize","Wrapper","Required","InputContainer","$inputSize","$error","$focusColor","$disabled","StyledInput","$inputFontSize","$hasLeft","$hasRight","LeftElement","RightElement","useDebounce","timeout","callbackRef","timeoutRef","processNumber","Input","helperText","leftElement","rightElement","wrapperClassName","providedId","ariaDescribedBy","InputProps","debounceTimeout","onChangeDebounced","mask","showErrorMessage","inputType","containerClassName","inputFontSize","generatedId","inputId","helperId","errorId","containerRef","internalValue","setInternalValue","debounceValue","setDebounceValue","stringValue","eventValue","modifiedEvent","handleFocus","handleBlur","startAdornment","endAdornment","hasLeft","hasRight","displayHelperText","shouldShowError","describedBy","inputValue","isDisplayVariant","transitionClasses","modalTransitionStyles","Backdrop","$transparent","ModalWrapper","ModalCentering","ModalPanel","Dialog","Header","Title","Body","Footer","Modal","title","titleFontSize","closeOnBackdropClick","closeOnEsc","footer","portalContainer","transparent","initialFocusRef","onMount","onMountCalledRef","resolvedTitleFontSize","handleBackdropClick","ModalHeader","ModalBody","ModalFooter","greyScale","greenColors","redColors","blueColors","orangeColors","textColors","legacyGreyColors","borderColors","iconColors","backgroundColors","baseColors","statusColors","snackbarColors","progressColors","transparentBlack","transparentWhite","defaultPaletteColors","userDefaultColors","formColors","ibUiShadows","allGreyColors","ibUiSemanticColors","ibUiColors","DEFAULT_BASE_FONT_SIZE","FONT_SIZE_RATIOS","FONT_SCALE_PRESETS","roundToOneDecimal","createFontSizes","baseFontSize","tn","xs","sm","base","md","lg","xl","createCssVariables","ThemeProvider","productionTheme","EmotionThemeProvider","grey","semantic","ibUiBorderRadius","createTheme","_c","_d","_f","_g","shimmer","pulse","getBorderRadius","shape","getWidth","getHeight","SkeletonItem","$height","$shape","$animation","LoadingText","LoadingPlaceholder","text","animation","TabsContainer","$scrollable","sizeStyles","TabSlider","$left","$primary","$isInitialRender","TabButton","$iconOnly","$isActive","Badge","Tabs","tabs","activeTab","onTabChange","expandTabs","scrollable","tabRefs","sliderStyle","setSliderStyle","isInitialRender","setIsInitialRender","shouldExpand","useSlider","containerRect","tabRect","handleKeyDown","currentIndex","currentTab","enabledTabs","tab","currentEnabledIndex","nextTab","nextTabElement","setTabRef","handleTabClick","activeTabData","renderTabButton","isActive","iconOnly","button","Root","DropZoneContainer","$isDragOver","borderColor","DefaultContent","UploadIcon","DropText","BrowseText","HintText","HintSpacer","PreviewWrapper","PreviewContainer","PreviewImageContainer","PreviewImage","PreviewPlaceholder","PreviewInfo","FileInfoText","progressAnimation","ProgressBar","ProgressFill","$progress","$uploading","ProgressText","ClearIcon","formatBytes","bytes","sizes","isImageFile","file","isImageUrl","url","urlWithoutQuery","DropZone","onFilesSelect","accept","multiple","showDefaultContent","maxSizeHint","maxSize","onError","browseText","showPreview","changeButtonText","onChangeClick","existingFile","onClearExisting","allowRemove","setError","progress","uploading","onClear","sizeHintText","isDragOver","setIsDragOver","selectedFiles","setSelectedFiles","previewUrls","setPreviewUrls","inputRef","dragCounter","isDialogOpenRef","acceptString","urls","validateFiles","files","fileArray","handleFileSelect","filesToSelect","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","droppedFiles","handleClick","handleInputChange","selectedInputFiles","handleInputFocus","handleInputBlur","handleChangeClick","handleClearAll","handleClearExisting","displayText","browseDisplayText","changeDisplayText","getAccessibilityLabel","shouldShowPreview","renderExistingFilePreview","isImage","renderFilePreview","previewUrl","RiskCardContainer","$interactive","RiskHeader","RiskTitleArea","RiskTitle","RiskIndex","RiskDescription","QuoteText","ExpandableSection","ExpandButton","FooterContainer","RiskCard","risk","description","recommendation","quote","severity","indexLabelPrefix","expandable","defaultExpanded","showRecommendationText","hideRecommendationText","onExpandChange","headerContent","footerContent","resolvedTitle","resolvedDescription","resolvedRecommendation","resolvedQuote","resolvedSeverity","hasExpandableContent","isInteractive","handleExpandToggle","newExpanded","CheckboxContainer","$labelPosition","HiddenCheckbox","StyledCheckbox","$checked","$indeterminate","$color","CheckIcon","$visible","IndeterminateIcon","CheckboxLabel","CheckboxWrapper","MessageContainer","CheckboxComponent","labelPosition","checked","indeterminate","tabIndex","assistiveMessage","checkboxId","labelId","hasVisibleLabel","isChecked","setIsChecked","newChecked","Checkbox","memo","Fieldset","Legend","GroupContainer","$orientation","$isChild","initializeCheckedState","defaultValue","processOptions","CheckboxGroupComponent","controlledValue","orientation","legend","optionsFontSize","groupId","resolvedOptionsFontSize","checkedState","handleCheckboxChange","optionId","childrenIds","newState","childId","getAllChildrenIds","ids","child","renderCheckboxOptions","items","_isChild","CheckboxGroup","RadioContainer","HiddenRadio","OuterRing","InnerDot","RadioLabel","RadioWrapper","RadioComponent","radioId","resolvedFontSize","Radio","RadioGroupComponent","selectedValue","radioRefs","handleRadioChange","optionValue","nextKey","prevKey","altNextKey","enabledOptions","nextOption","radioRef","renderRadioOptions","selectedIndex","firstEnabledIndex","focusableIndex","isInTabOrder","RadioGroup","CardContainer","$isSelected","$isDisabled","$hasError","IconContainer","$bgColor","$fgColor","SubtitleWrapper","BadgeWrapper","RemoveButton","CloseIcon","RiskItemCard","subtitle","badge","onRemove","selectionMode","showSelectionControl","hasError","isMultiMode","isInteractionDisabled","handleRemove","renderSelectionControl","renderSubtitle","defaultPageSizeOptions","PaginatorContainer","$inverse","PaginatorButton","NavButton","PageButton","Ellipsis","PageInfoContainer","GoToPageInput","PageSizeContainer","PageSizeSelect","ArrowLeftIcon","ArrowRightIcon","DoubleArrowLeftIcon","DoubleArrowRightIcon","getVisiblePages","currentPage","totalPages","maxVisible","pages","sidePages","startPage","endPage","Paginator","onPageChange","showFirstLast","showPrevNext","maxVisiblePages","firstLabel","lastLabel","prevLabel","nextLabel","showGoToPage","goToPageDebounce","showPageInfo","pageInfoFormat","total","showPageSizeSelector","pageSize","onPageSizeChange","pageSizeOptions","simple","inverse","goToPageLabel","pageSizeLabel","safeTotalPages","safeCurrentPage","isFirstPage","isLastPage","goToPageValue","setGoToPageValue","debounceRef","visiblePages","handlePageChange","page","handleGoToPageChange","numericValue","handleGoToPageBlur","handlePageSizeChange","newSize","shouldShowPageInfo","getDefaultFontSize","resolveFontSizeWithDefault","Multiselect","maxDisplayedChips","showBulkActions","selectAllLabel","clearAllLabel","chipFontSize","componentId","searchInputRef","optionsRef","setIsOpen","searchQuery","setSearchQuery","highlightedIndex","setHighlightedIndex","resolvedChipFontSize","selectedOptions","handleClickOutside","handleToggle","handleOptionClick","optionDisabled","handleRemoveChip","handleSelectAll","selectableValues","handleBulkClearAll","allSelected","selectableOptions","highlighted","displayedChips","remainingCount","containerClassNames","styles","isSelected","isHighlighted","sizeConfig","SwitchWrapper","SwitchContainer","SwitchTrack","SwitchThumb","SwitchLabel","Switch","controlledChecked","defaultChecked","switchId","internalChecked","setInternalChecked","EmptyStateContainer","Description","ActionContainer","EmptyStateComponent","EmptyState","HorizontalDivider","$hasChildren","DividerText","VerticalDivider","DividerComponent","hasChildren","Divider","TextAreaContainer","$noBorder","$focused","CharacterCount","StyledTextArea","$resize","TextArea","rows","maxRows","readOnly","resize","noBorder","maxLength","showCharCount","onKeyDown","textareaId","assistiveId","internalRef","textareaRef","currentValue","setIsFocused","currentRows","setCurrentRows","adjustRows","textarea","computedStyles","lineHeight","calculatedRows","newRows","FormControlContainer","LabelRow","LabelContainer","FormControl","labelFor","labelRightAdornment","controlId","childProps","childDisabled","enhancedChild","VARIANT_DEFAULT_ELEMENTS","VARIANT_DEFAULT_SIZES","VARIANT_DEFAULT_WEIGHTS","VARIANT_DEFAULT_COLORS","VARIANT_DEFAULT_UPPERCASE","getFontSize","getColorValue","getFontWeight","weight","StyledText","$uppercase","$truncate","$lines","$noWrap","getTextContent","Typography","uppercase","truncate","lines","tooltipContent","disableTooltip","as","noWrap","effectiveSize","effectiveWeight","effectiveColor","effectiveUppercase","effectiveElement","colorValue","textElement","tooltipText","getFilledColorStyles","getOutlinedColorStyles","ChipContainer","AvatarWrapper","DeleteButton","Chip","onDelete","avatar","clickable","isClickable","hasDelete","getTypeColors","getVariantStyles","colors","StatusContainer","SuccessIcon","ErrorIcon","WarningIcon","PendingIcon","InfoIcon","NeutralIcon","getDefaultIcon","Status","displayIcon","indeterminateAnimation","indeterminateAnimation2","bufferAnimation","getBackgroundColor","ProgressContainer","SecondaryBar","BufferBar","LabelText","PercentageText","LinearLoading","showLabel","buffer","progressColor","bgColor","hasBuffer","isDivider","isHeader","isMenuItem","DefaultTriggerButton","MoreVertIcon","getPlacementStyles","MenuPanel","$placement","$isOpen","MenuTitleWrapper","SectionHeaderWrapper","$first","HeaderText","MenuList","MenuItemButton","$itemHeight","$isBold","$isInvalid","$selected","$isFocused","$type","DropdownMenu","buttonSize","menuListWidth","menuListHeight","menuItemHeight","useContainerWidth","buttonTabIndex","onOpen","focusedIndex","setFocusedIndex","isKeyboardNav","setIsKeyboardNav","menuRef","itemRefs","menuItems","enabledItems","handleTriggerClick","handleTriggerKeyDown","handleItemClick","handleItemKeyDown","enabledIndices","idx","currentPos","nextPos","firstEnabled","lastEnabled","setItemRef","triggerElement","menuItemIndex","MenuButtonsContainer","$gapSize","GREY_600","formatAriaLabel","ariaToUse","ActionMenuButtons","actions","dropdownMenuType","menuDataId","menuDisabled","primaryActions","showDropdownActionIcon","gapSize","menuIcon","buttonVariant","primaryMenuButtons","secondaryMenuButtons","primary","secondary","dropdownItems","iconToUse","customTrigger","gapSizeMap","themeRadius","getShadow","shadow","getContentPadding","isChild","$shadow","$showBorder","$borderColor","$collapsible","$showHeaderBorderBottom","$stickyHeader","$hasContent","$contentPadding","NestedHeaderTitle","HeaderTitle","LeftSection","RightSection","DataContainerCard","customTitleComponent","collapsible","defaultOpen","rightSection","showBorder","showHeaderBorderBottom","headerHeight","stickyHeader","contentPadding","newOpenState","renderTitle","hasContent","showContent","headerExpandLessId","headerExpandMoreId","contentId","getPadding","$padding","StickyFooter","fontSizeMap","MetadataContainer","NameField","ChipDataContainer","ChipNameField","ChipValueField","BodyWrapper","SemiLabelWrapper","CustomContainer","MetadataDetails","layout","component","minWidth","valueFontSize","fieldColor","labelSize","valueSize","getLightTint","hexColor","getStatusConfig","status","customText","$cardColorMode","$appColor","$dimmed","Logo","$grayscale","Info","Name","$titleColorMode","StaticBadge","ConnectedAppCard","logoPath","cardColorMode","titleColorMode","primaryAction","showStatus","statusText","dimmed","grayscaleLogo","logoAlt","statusConfig","isDimmed","isGrayscale","shouldShowStatus","renderAction","useAppColor","PRESET_SUPPORTED_FORMATS","DRAG_DROP_SUPPORTED_FORMATS","IMAGE_FORMATS","VIDEO_FORMATS","DOCUMENT_FORMATS","getFileExtension","filename","supportsPresets","mimetype","ext","mimeStr","format","supportsDragDrop","isVideoFile","isDocumentFile","getMimeType","getFileTypeIcon","formatFileSize","decimals","dm","formatDate","date","dateObj","defaultOptions","formatRelativeTime","diffMs","diffSec","diffMin","diffHour","diffDay","diffWeek","diffMonth","diffYear","truncateFilename","parts","extension","availableLength","truncateText","suffix","formatDimensions","formatNumber","num","pluralize","singular","plural","word","hasPermission","allowedActions","permission","hasAllPermissions","permissions","hasAnyPermission","getAvailableActions","isPublicAsset","isPublic","isRestrictedAsset","canDownload","isWebApp","canGeneratePublicLink","canCopy","canEdit","getPermissionSummary","dimensions","formatPresetDetails","preset","getPresetIcon","PresetSelector","presets","showDetails","categories","selectedPreset","filteredPresets","filteredCategories","category","presetId","originalPreset","renderOption","containerClasses","hasCategories","hasPresets","showNoResults","MediaContainer","SelectedBadge","RestrictedBadge","ContentInner","Metadata","FileType","FileSize","Dimensions","ActionsWrapper","PresetWrapper","CardWrapper","$isDraggable","presetToPresetOption","AssetCard","asset","onSelect","onDownload","onInsertLink","onCopy","onGoto","draggable","onDragStart","onDragEnd","selectedPresetId","onPresetChange","isRestricted","handleCardClick","handleDownload","handleInsertLink","handleCopy","handleGoto","handleDragStart","handleDragEnd","handlePresetChange","showDownload","showInsertLink","showCopy","showGoto","showPresets","hasActions","presetOptions","ListContainer","$restricted","ListThumbnail","ListThumbnailImage","ListContent","Count","EmptyText","ListNav","FolderCard","folder","isEmpty","handleDoubleClick","renderCardMedia","renderListThumbnail","renderCounts","BrowserContainer","BrowserWrapper","BrowserContent","GridLayout","ListLayout","SectionDivider","LoadingOverlay","EmptyStateIcon","EmptyStateMessage","PaginationContainer","PaginationButton","PaginationPages","halfVisible","Pagination","pagination","handleFirst","handlePrev","handleNext","handleLast","AssetBrowser","folders","assets","emptyMessage","selectedIds","onFolderClick","onAssetClick","onSelectionChange","handleSelect","newSelection","selectedId","handleFolderClick","handleFolderSelect","handleAssetClick","gridStyle","hasFoldersAndAssets","LayoutComponent","BrowserLoginConfirmation","logoSrc","loginUrl","onOpenBrowser","onContinue","onBack","handleOpenBrowser","wrapperClassNames","FiltersPanel","filters","values","onClearAll","clearButtonLabel","closeButtonLabel","showFilterCount","activeFilterCount","filterValues","handleFilterChange","filterKey","newValues","resolvedTestId","filter","getIndentClass","TreeItem","depth","indentSize","showCounts","expandedIds","onToggle","onLoadChildren","newExpandedState","handleToggleKeyDown","indentClass","FolderTree","onToggleExpand","showRoot","rootName","folderId","expand","rootFolder","isRootSelected","isRootExpanded","LoginForm","loginMethod","showSsoToggle","onSubmit","onSsoLogin","urlLabel","formId","setUrl","email","setEmail","password","setPassword","isCustomUrl","setIsCustomUrl","isBrowserLogin","setIsBrowserLogin","showCredentials","showBrowserLoginOption","getFullUrl","urlValue","trimmed","isValid","handleSubmit","fullUrl","credentials","handleUrlChange","handleCustomUrlToggle","_event","handleBrowserLoginToggle","formClassNames","isStringIcon","NavContainer","$sticky","LogoContainer","$clickable","CenterSection","ActionsContainer","MenuTriggerButton","NavBar","onLogoClick","menuLabel","dropdownMenuProps","collapseBreakpoint","sticky","isCollapsed","setIsCollapsed","navRef","checkCollapse","collapsedActionItems","regularMenuItems","allMenuItems","handleLogoClick","handleLogoKeyDown","renderActionButton","hasMenu","SearchForm","showButton","buttonText","debounceMs","debounceTimerRef","hasValue","getStatusColor","getStatusIconColor","getStatusIcon","getStatusText","Overlay","ContentContainer","HelperText","ProgressSummary","FileList","FileItem","FileInfo","FileName","StatusTextStyled","$status","StatusIconContainer","ReviewProcessing","isVisible","warningColor","renderSingleMode","totalFiles","completedFiles","failedFiles","inProgressCount","isInProgress","METADATA_PROPS","DetailsContainer","TextPreviewValue","TextPreviewEllipsis","ShowMoreButton","TextModalContent","FileListValue","FileListItem","getReviewTypeDisplay","hasPageUrl","isMultiFile","formatTimestampWithTimezone","timestamp","timeZone","ReviewDetails","review","multiFileResult","getFilterDisplayText","showTextModal","setShowTextModal","selectedFilters","connectedAppInfo","fileNames","entity","createElement","reviewType","getContentDisplay","getContentLabel","SummaryContainer","SummaryHeader","TitleSection","ReviewType","ReviewTitle","StatusBadge","$hasRisks","SummaryGrid","SummaryItem","SummaryLabel","SummaryValue","RisksMessageContent","RisksCount","RisksSubtext","NoActionsMessage","formatTimestamp","hasRisks","ReviewResults","results","onSendToIB","canSendToIB","showActions","risksCount","lastDotIndex","getFileIconColor","getFileIconSymbol","FileIconContainer","FileDetails","FileSizeTag","FileSourcePath","FileError","$maxHeight","FileCard","onToggleSelect","showSize","showSource","showErrors","customFormatSize","iconSymbol","sizeFormatter","ReviewFiles","selectionEnabled","maxSelection","showRemove","emptyState","shouldShowRemove","selectedIdsArray","fileId","handleToggleSelect","isFileDisabled","LoadingContainer","SkeletonLabel","SkeletonSelect","EmptyIconWrapper","ListIcon","CategorySelect","selectedValues","isRequired","isMultiple","filterValue","handleSingleChange","handleMultiChange","CategoryFilters","loadError","isResourceRestricted","getFileType","resource","adaptResource","adaptResources","resources","isWebAppResource","obj","adaptFolder","adaptFolders","adaptFolderToTree","parentId","adaptFoldersToTree","buildFolderTree","folderMap","rootFolders","treeFolder","parentFolder","isWebAppFolder","adaptPreset","isOriginal","createOriginalPreset","adaptPresets","singlePresets","globalPresets","includeOriginal","adaptPresetsWithCategories","findWebAppPreset","singlePreset","getFullPreset","webAppPreset","isWebAppPreset","calculatePagination","paginationData","pageNumber","getAssetBrowserProps","appStore","_authStore","gridData","currentFolder","getFolderTreeProps","getPaginationInfo","getFolderByIndex","getAssetByIndex","getCurrentFolder","getPresetCategories","getPresetOptions","createAssetCardActions","resourceId","createFolderCardActions","createFolderTreeSelectHandler","createSelectionHandlers","assetId","createDownloadWithPresetHandler","useAssetSelection","selectedAssets","setSelectedAssets","toggleSelection","selectAll","clearSelection","useFolderNavigation","rootFolderId","currentFolderId","setCurrentFolderId","folderHistory","setFolderHistory","navigateTo","goBack","previousFolderId","goToRoot","canGoBack","useSearch","debouncedQuery","setDebouncedQuery","isSearching","setIsSearching","updateQuery","clearSearch"],"mappings":"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","x_google_ignoreList":[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115]}