shadcn-glass-ui 2.1.4 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +13 -13
  3. package/context7.json +30 -4
  4. package/dist/cli/index.cjs +1 -1
  5. package/dist/components.cjs +4 -4
  6. package/dist/components.d.ts +18 -4
  7. package/dist/components.js +1 -1
  8. package/dist/hooks.cjs +2 -2
  9. package/dist/index.cjs +2320 -997
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.js +2284 -996
  12. package/dist/index.js.map +1 -1
  13. package/dist/shadcn-glass-ui.css +1 -1
  14. package/dist/{theme-context-Y98bGvcm.cjs → theme-context-D_cb9KzA.cjs} +2 -2
  15. package/dist/{theme-context-Y98bGvcm.cjs.map → theme-context-D_cb9KzA.cjs.map} +1 -1
  16. package/dist/themes.cjs +1 -1
  17. package/dist/{trust-score-card-glass-2rjz00d_.cjs → trust-score-card-glass-CTsEVRD3.cjs} +178 -35
  18. package/dist/{trust-score-card-glass-2rjz00d_.cjs.map → trust-score-card-glass-CTsEVRD3.cjs.map} +1 -1
  19. package/dist/{trust-score-card-glass-zjkx4OC2.js → trust-score-card-glass-CUStm4o_.js} +86 -15
  20. package/dist/{trust-score-card-glass-zjkx4OC2.js.map → trust-score-card-glass-CUStm4o_.js.map} +1 -1
  21. package/dist/{use-focus-DbpBEuee.cjs → use-focus--Hw2nevi.cjs} +2 -2
  22. package/dist/{use-focus-DbpBEuee.cjs.map → use-focus--Hw2nevi.cjs.map} +1 -1
  23. package/dist/{use-wallpaper-tint-DbawS9zh.cjs → use-wallpaper-tint-B4oMQsXQ.cjs} +2 -2
  24. package/dist/{use-wallpaper-tint-DbawS9zh.cjs.map → use-wallpaper-tint-B4oMQsXQ.cjs.map} +1 -1
  25. package/dist/{utils-XlyXIhuP.cjs → utils-BqeJ4aco.cjs} +2 -2
  26. package/dist/{utils-XlyXIhuP.cjs.map → utils-BqeJ4aco.cjs.map} +1 -1
  27. package/dist/utils.cjs +1 -1
  28. package/docs/AI_USAGE.md +5 -5
  29. package/docs/BEST_PRACTICES.md +1 -1
  30. package/docs/COMPONENTS_CATALOG.md +215 -0
  31. package/docs/EXPORTS_MAP.json +140 -14
  32. package/docs/EXPORTS_STRUCTURE.md +43 -9
  33. package/docs/GETTING_STARTED.md +1 -1
  34. package/docs/REGISTRY_USAGE.md +1 -1
  35. package/docs/api/README.md +1 -1
  36. package/docs/components/SIDEBAR_GLASS.md +555 -0
  37. package/docs/components/SPLIT_LAYOUT_GLASS.md +304 -365
  38. package/package.json +6 -3
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["StepperRoot: FC<StepperRootProps>","indicatorStyles: CSSProperties","connectorStyles: CSSProperties","labelStyles: CSSProperties","descriptionStyles: CSSProperties","StepperContent: FC<StepperContentProps>","SidebarProvider: FC<SidebarProviderProps>","menuButtonSizeClasses: Record<SidebarMenuButtonSize, string>","_extends","ownKeys","r","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","r","Slot","React","React","React","ScrollArea","React2","BREAKPOINT_VALUES: Record<Breakpoint, number>","SplitLayoutProvider: FC<SplitLayoutProviderProps>","configLabelKey: string"],"sources":["../src/lib/variants/stepper-glass-variants.ts","../src/components/glass/ui/stepper-glass.tsx","../src/components/glass/ui/sidebar-glass/sidebar-context.tsx","../src/components/glass/ui/sidebar-glass/sidebar-glass.tsx","../src/components/glass/ui/sidebar-glass/sidebar-menu.tsx","../src/components/glass/ui/sidebar-glass/index.ts","../node_modules/recharts/es6/component/DefaultLegendContent.js","../node_modules/recharts/es6/context/legendPayloadContext.js","../node_modules/recharts/es6/component/Legend.js","../node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-scroll-area/dist/index.mjs","../src/components/ui/scroll-area.tsx","../src/components/glass/composite/split-layout-glass/split-layout-context.tsx","../src/components/glass/composite/split-layout-glass/split-layout-accordion.tsx","../src/components/glass/composite/split-layout-glass/split-layout-glass.tsx","../src/components/ui/chart.tsx","../src/lib/variants/dropdown-glass-variants.ts","../src/lib/variants/tooltip-glass-variants.ts","../src/lib/variants/alert-variants.ts","../src/lib/variants/badge-variants.ts","../src/lib/variants/button-variants.ts"],"sourcesContent":["/**\n * StepperGlass CVA Variants\n *\n * Type-safe variant definitions for the StepperGlass compound component.\n * Extracted for Fast Refresh compatibility and reusability.\n *\n * @module stepper-glass-variants\n */\n\nimport { cva } from 'class-variance-authority';\n\n// ========================================\n// TYPE DEFINITIONS\n// ========================================\n\nexport type StepperOrientation = 'horizontal' | 'vertical';\nexport type StepperVariant = 'numbered' | 'icon' | 'dots';\nexport type StepperSize = 'sm' | 'md' | 'lg';\nexport type StepStatus = 'pending' | 'active' | 'completed' | 'disabled';\n\n// ========================================\n// ROOT VARIANTS\n// ========================================\n\nexport const stepperRootVariants = cva('flex w-full', {\n variants: {\n orientation: {\n horizontal: 'flex-col',\n vertical: 'flex-col',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// LIST VARIANTS\n// ========================================\n\nexport const stepperListVariants = cva('flex', {\n variants: {\n orientation: {\n horizontal: 'flex-row items-center w-full',\n vertical: 'flex-col gap-0',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// STEP CONTAINER VARIANTS\n// ========================================\n\nexport const stepperStepContainerVariants = cva('relative flex transition-all duration-300', {\n variants: {\n orientation: {\n horizontal: 'flex-col items-center flex-1',\n vertical: 'flex-row items-start gap-3',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// STEP INDICATOR VARIANTS\n// ========================================\n\nexport const stepperIndicatorVariants = cva(\n 'relative flex items-center justify-center rounded-full font-medium transition-all duration-300 shrink-0',\n {\n variants: {\n size: {\n sm: 'w-8 h-8 text-xs',\n md: 'w-10 h-10 text-sm',\n lg: 'w-12 h-12 text-base',\n },\n variant: {\n numbered: '',\n icon: '',\n dots: '',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'numbered',\n },\n compoundVariants: [\n // Dots variant has smaller indicators\n { variant: 'dots', size: 'sm', className: '!w-2.5 !h-2.5' },\n { variant: 'dots', size: 'md', className: '!w-3 !h-3' },\n { variant: 'dots', size: 'lg', className: '!w-4 !h-4' },\n ],\n }\n);\n\n// ========================================\n// CONNECTOR VARIANTS\n// ========================================\n\nexport const stepperConnectorVariants = cva('transition-all duration-500 ease-out', {\n variants: {\n orientation: {\n horizontal: 'h-0.5 flex-1 mx-2 md:mx-3',\n vertical: 'w-0.5 min-h-6 ml-5 my-1',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// LABEL VARIANTS\n// ========================================\n\nexport const stepperLabelVariants = cva(\n 'font-medium transition-colors duration-300 whitespace-nowrap',\n {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n orientation: {\n horizontal: 'mt-2 text-center',\n vertical: '',\n },\n },\n defaultVariants: {\n size: 'md',\n orientation: 'horizontal',\n },\n }\n);\n\n// ========================================\n// DESCRIPTION VARIANTS\n// ========================================\n\nexport const stepperDescriptionVariants = cva('transition-colors duration-300', {\n variants: {\n size: {\n sm: 'text-[10px]',\n md: 'text-xs',\n lg: 'text-sm',\n },\n orientation: {\n horizontal: 'text-center max-w-[100px] md:max-w-[120px]',\n vertical: 'max-w-[200px]',\n },\n },\n defaultVariants: {\n size: 'md',\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// CONTENT VARIANTS\n// ========================================\n\nexport const stepperContentVariants = cva('animate-in fade-in-0 duration-200', {\n variants: {\n orientation: {\n horizontal: 'mt-6',\n vertical: 'mt-4',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * StepperGlass Component (Compound API)\n *\n * Glass-themed step indicator with:\n * - Theme-aware styling (glass/light/aurora)\n * - Horizontal and vertical orientations\n * - Numbered, icon, and dots variants\n * - Linear mode (lock future steps)\n * - Animated connector lines\n * - Compound component API for advanced composition\n *\n * @example\n * ```tsx\n * <StepperGlass.Root value=\"step2\" onValueChange={setStep}>\n * <StepperGlass.List>\n * <StepperGlass.Step value=\"step1\" label=\"Account\" description=\"Create your account\" />\n * <StepperGlass.Step value=\"step2\" label=\"Profile\" description=\"Setup your profile\" />\n * <StepperGlass.Step value=\"step3\" label=\"Complete\" description=\"Finish setup\" />\n * </StepperGlass.List>\n * <StepperGlass.Content value=\"step1\">Step 1 content</StepperGlass.Content>\n * <StepperGlass.Content value=\"step2\">Step 2 content</StepperGlass.Content>\n * <StepperGlass.Content value=\"step3\">Step 3 content</StepperGlass.Content>\n * </StepperGlass.Root>\n * ```\n *\n * @accessibility\n * - **Keyboard Navigation:** Arrow keys navigate between steps (WCAG 2.1.1)\n * - **Focus Management:** Visible focus ring using `--focus-glow` (WCAG 2.4.7)\n * - **Screen Readers:** Uses `role=\"tablist\"`, `role=\"tab\"` (WCAG 4.1.3)\n * - **ARIA Attributes:** `aria-current=\"step\"`, `aria-disabled` for state\n * - **Touch Targets:** 44x44px minimum touch targets (WCAG 2.5.5)\n * - **Color Contrast:** All states meet WCAG AA 4.5:1 ratio\n * - **Motion:** Respects `prefers-reduced-motion`\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n useMemo,\n useState,\n useCallback,\n useLayoutEffect,\n type CSSProperties,\n type FC,\n type ReactNode,\n} from 'react';\nimport { cn } from '@/lib/utils';\nimport { useFocus } from '@/lib/hooks/use-focus';\nimport { Check } from 'lucide-react';\nimport {\n stepperRootVariants,\n stepperListVariants,\n stepperStepContainerVariants,\n stepperIndicatorVariants,\n stepperConnectorVariants,\n stepperLabelVariants,\n stepperDescriptionVariants,\n stepperContentVariants,\n type StepperOrientation,\n type StepperVariant,\n type StepperSize,\n type StepStatus,\n} from '@/lib/variants/stepper-glass-variants';\nimport '@/glass-theme.css';\n\n// ========================================\n// CONTEXT\n// ========================================\n\ninterface StepperContextValue {\n value: string;\n onValueChange?: (value: string) => void;\n orientation: StepperOrientation;\n variant: StepperVariant;\n size: StepperSize;\n linear: boolean;\n steps: string[];\n registerStep: (value: string, index: number) => void;\n unregisterStep: (value: string) => void;\n}\n\nconst StepperContext = createContext<StepperContextValue | null>(null);\n\nconst useStepperContext = () => {\n const context = useContext(StepperContext);\n if (!context) {\n throw new Error('Stepper compound components must be used within StepperGlass.Root');\n }\n return context;\n};\n\n// ========================================\n// UTILITY: GET STEP STATUS\n// ========================================\n\nfunction getStepStatus(\n stepValue: string,\n currentValue: string,\n steps: string[],\n linear: boolean,\n disabled?: boolean\n): StepStatus {\n if (disabled) return 'disabled';\n\n const stepIndex = steps.indexOf(stepValue);\n const currentIndex = steps.indexOf(currentValue);\n\n if (stepIndex === -1 || currentIndex === -1) return 'pending';\n if (stepIndex === currentIndex) return 'active';\n if (stepIndex < currentIndex) return 'completed';\n if (linear && stepIndex > currentIndex) return 'disabled';\n return 'pending';\n}\n\n// ========================================\n// ROOT COMPONENT\n// ========================================\n\ninterface StepperRootProps {\n /** Current active step value */\n value: string;\n /** Callback when step value changes */\n onValueChange?: (value: string) => void;\n /** Orientation of the stepper */\n orientation?: StepperOrientation;\n /** Visual variant */\n variant?: StepperVariant;\n /** Size of step indicators */\n size?: StepperSize;\n /** Lock future steps (require sequential completion) */\n linear?: boolean;\n /** Child components */\n children: ReactNode;\n /** Optional className */\n className?: string;\n}\n\nconst StepperRoot: FC<StepperRootProps> = ({\n value,\n onValueChange,\n orientation = 'horizontal',\n variant = 'numbered',\n size = 'md',\n linear = false,\n children,\n className,\n}) => {\n const [steps, setSteps] = useState<string[]>([]);\n\n const registerStep = useCallback((stepValue: string, index: number) => {\n setSteps((prev) => {\n if (prev.includes(stepValue)) return prev;\n const newSteps = [...prev];\n // Insert at correct position to maintain order\n newSteps.splice(index, 0, stepValue);\n return newSteps;\n });\n }, []);\n\n const unregisterStep = useCallback((stepValue: string) => {\n setSteps((prev) => prev.filter((s) => s !== stepValue));\n }, []);\n\n const contextValue = useMemo(\n () => ({\n value,\n onValueChange,\n orientation,\n variant,\n size,\n linear,\n steps,\n registerStep,\n unregisterStep,\n }),\n [value, onValueChange, orientation, variant, size, linear, steps, registerStep, unregisterStep]\n );\n\n return (\n <StepperContext.Provider value={contextValue}>\n <div\n className={cn(stepperRootVariants({ orientation }), className)}\n aria-label=\"Progress steps\"\n >\n {children}\n </div>\n </StepperContext.Provider>\n );\n};\n\n// ========================================\n// LIST COMPONENT\n// ========================================\n\ninterface StepperListProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n className?: string;\n}\n\nconst StepperList = forwardRef<HTMLDivElement, StepperListProps>(\n ({ children, className, ...props }, ref) => {\n const { orientation } = useStepperContext();\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-orientation={orientation}\n className={cn(stepperListVariants({ orientation }), className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nStepperList.displayName = 'StepperList';\n\n// ========================================\n// STEP COMPONENT\n// ========================================\n\ninterface StepperStepProps {\n /** Unique value for this step */\n value: string;\n /** Step label (required for accessibility) */\n label: string;\n /** Optional description */\n description?: string;\n /** Custom icon (for icon variant) */\n icon?: ReactNode;\n /** Completed icon override */\n completedIcon?: ReactNode;\n /** Force disabled state */\n disabled?: boolean;\n /** Optional className */\n className?: string;\n /** Step index for ordering (auto-detected) */\n index?: number;\n}\n\nconst StepperStep = forwardRef<HTMLButtonElement, StepperStepProps>(\n (\n {\n value: stepValue,\n label,\n description,\n icon,\n completedIcon,\n disabled: forcedDisabled,\n className,\n index: providedIndex,\n },\n ref\n ) => {\n const {\n value: currentValue,\n onValueChange,\n orientation,\n variant,\n size,\n linear,\n steps,\n registerStep,\n unregisterStep,\n } = useStepperContext();\n\n const { isFocusVisible, focusProps } = useFocus({ focusVisible: true });\n\n // Track mount order for step registration\n const [mountIndex] = useState(() => providedIndex ?? Date.now());\n\n // Register step on mount\n // Use useLayoutEffect to register before paint\n useLayoutEffect(() => {\n registerStep(stepValue, mountIndex);\n return () => unregisterStep(stepValue);\n }, [stepValue, mountIndex, registerStep, unregisterStep]);\n\n const status = getStepStatus(stepValue, currentValue, steps, linear, forcedDisabled);\n const stepIndex = steps.indexOf(stepValue);\n const isLast = stepIndex === steps.length - 1;\n const isClickable = status !== 'disabled';\n\n // Styles based on status\n const indicatorStyles: CSSProperties = {\n background:\n status === 'completed'\n ? 'var(--stepper-step-completed-bg)'\n : status === 'active'\n ? 'var(--stepper-step-active-bg)'\n : status === 'disabled'\n ? 'var(--stepper-step-disabled-bg)'\n : 'var(--stepper-step-bg)',\n border: `2px solid ${\n status === 'completed'\n ? 'var(--stepper-step-completed-border)'\n : status === 'active'\n ? 'var(--stepper-step-active-border)'\n : status === 'disabled'\n ? 'var(--stepper-step-disabled-border)'\n : 'var(--stepper-step-border)'\n }`,\n color:\n status === 'completed'\n ? 'var(--stepper-step-completed-text)'\n : status === 'active'\n ? 'var(--stepper-step-active-text)'\n : status === 'disabled'\n ? 'var(--stepper-step-disabled-text)'\n : 'var(--stepper-step-text)',\n boxShadow:\n status === 'active'\n ? 'var(--stepper-step-active-glow)'\n : status === 'completed'\n ? 'var(--stepper-step-glow)'\n : isFocusVisible\n ? 'var(--focus-glow)'\n : 'none',\n backdropFilter: 'blur(var(--blur-sm))',\n };\n\n const connectorStyles: CSSProperties = {\n background:\n stepIndex < steps.indexOf(currentValue)\n ? 'var(--stepper-connector-active-bg)'\n : 'var(--stepper-connector-bg)',\n };\n\n const labelStyles: CSSProperties = {\n color:\n status === 'active' || status === 'completed'\n ? 'var(--stepper-label-text)'\n : 'var(--stepper-description-text)',\n };\n\n const descriptionStyles: CSSProperties = {\n color: 'var(--stepper-description-text)',\n };\n\n // Render indicator content\n const renderIndicatorContent = () => {\n if (status === 'completed') {\n if (completedIcon) return completedIcon;\n return <Check className=\"w-4 h-4\" />;\n }\n if (variant === 'icon' && icon) return icon;\n if (variant === 'dots') return null;\n // Numbered variant\n return stepIndex >= 0 ? stepIndex + 1 : '';\n };\n\n const handleClick = () => {\n if (isClickable && onValueChange) {\n onValueChange(stepValue);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isClickable) return;\n\n const stepList = e.currentTarget.closest('[role=\"tablist\"]');\n if (!stepList) return;\n\n const allSteps = Array.from(\n stepList.querySelectorAll('[role=\"tab\"]:not([aria-disabled=\"true\"])')\n ) as HTMLButtonElement[];\n const currentIdx = allSteps.indexOf(e.currentTarget as HTMLButtonElement);\n\n let nextIdx = currentIdx;\n const isHorizontal = orientation === 'horizontal';\n\n switch (e.key) {\n case isHorizontal ? 'ArrowRight' : 'ArrowDown':\n e.preventDefault();\n nextIdx = (currentIdx + 1) % allSteps.length;\n break;\n case isHorizontal ? 'ArrowLeft' : 'ArrowUp':\n e.preventDefault();\n nextIdx = currentIdx - 1 < 0 ? allSteps.length - 1 : currentIdx - 1;\n break;\n case 'Home':\n e.preventDefault();\n nextIdx = 0;\n break;\n case 'End':\n e.preventDefault();\n nextIdx = allSteps.length - 1;\n break;\n default:\n return;\n }\n\n const nextStep = allSteps[nextIdx];\n if (nextStep) {\n nextStep.focus();\n const nextValue = nextStep.getAttribute('data-value');\n if (nextValue && onValueChange) {\n onValueChange(nextValue);\n }\n }\n };\n\n // For horizontal, we need step + connector inline\n // For vertical, step is a row with connector below\n if (orientation === 'horizontal') {\n return (\n <>\n <div className={cn(stepperStepContainerVariants({ orientation }), className)}>\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={status === 'active'}\n aria-disabled={!isClickable}\n aria-current={status === 'active' ? 'step' : undefined}\n data-value={stepValue}\n data-status={status}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n disabled={!isClickable}\n className={cn(\n stepperIndicatorVariants({ size, variant }),\n !isClickable && 'cursor-not-allowed opacity-60',\n isClickable && 'cursor-pointer hover:scale-105',\n // Ensure minimum touch target\n 'min-w-[44px] min-h-[44px]'\n )}\n style={indicatorStyles}\n >\n {renderIndicatorContent()}\n </button>\n\n {label && (\n <div className=\"flex flex-col items-center\">\n <span\n className={cn(stepperLabelVariants({ size, orientation }))}\n style={labelStyles}\n >\n {label}\n </span>\n {description && (\n <span\n className={cn(stepperDescriptionVariants({ size, orientation }))}\n style={descriptionStyles}\n >\n {description}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Connector line between steps */}\n {!isLast && (\n <div\n className={cn(stepperConnectorVariants({ orientation }))}\n style={connectorStyles}\n aria-hidden=\"true\"\n />\n )}\n </>\n );\n }\n\n // Vertical orientation\n return (\n <div className=\"flex flex-col\">\n <div className={cn(stepperStepContainerVariants({ orientation }), className)}>\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={status === 'active'}\n aria-disabled={!isClickable}\n aria-current={status === 'active' ? 'step' : undefined}\n data-value={stepValue}\n data-status={status}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n disabled={!isClickable}\n className={cn(\n stepperIndicatorVariants({ size, variant }),\n !isClickable && 'cursor-not-allowed opacity-60',\n isClickable && 'cursor-pointer hover:scale-105',\n 'min-w-[44px] min-h-[44px]'\n )}\n style={indicatorStyles}\n >\n {renderIndicatorContent()}\n </button>\n\n {label && (\n <div className=\"flex flex-col justify-center\">\n <span className={cn(stepperLabelVariants({ size, orientation }))} style={labelStyles}>\n {label}\n </span>\n {description && (\n <span\n className={cn(stepperDescriptionVariants({ size, orientation }))}\n style={descriptionStyles}\n >\n {description}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Vertical connector */}\n {!isLast && (\n <div\n className={cn(stepperConnectorVariants({ orientation }))}\n style={connectorStyles}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n }\n);\n\nStepperStep.displayName = 'StepperStep';\n\n// ========================================\n// CONTENT COMPONENT\n// ========================================\n\ninterface StepperContentProps {\n /** Value of the step this content belongs to */\n value: string;\n /** Content to display when step is active */\n children: ReactNode;\n /** Optional className */\n className?: string;\n}\n\nconst StepperContent: FC<StepperContentProps> = ({ value, children, className }) => {\n const { value: currentValue, orientation } = useStepperContext();\n const isActive = currentValue === value;\n\n if (!isActive) return null;\n\n return (\n <div\n role=\"tabpanel\"\n aria-hidden={!isActive}\n className={cn(stepperContentVariants({ orientation }), className)}\n >\n {children}\n </div>\n );\n};\n\n// ========================================\n// EXPORT COMPOUND COMPONENT\n// ========================================\n\nexport const StepperGlass = {\n Root: StepperRoot,\n List: StepperList,\n Step: StepperStep,\n Content: StepperContent,\n};\n\n// Also export individual components for flexibility\nexport { StepperRoot, StepperList, StepperStep, StepperContent };\n\n// Re-export types\nexport type {\n StepperRootProps,\n StepperListProps,\n StepperStepProps,\n StepperContentProps,\n StepperOrientation,\n StepperVariant,\n StepperSize,\n StepStatus,\n};\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SidebarGlass Context\n *\n * Provides state management for SidebarGlass compound component.\n * 100% compatible with shadcn/ui Sidebar API.\n *\n * @module sidebar-context\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n useEffect,\n type FC,\n type ReactNode,\n} from 'react';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport type SidebarSide = 'left' | 'right';\nexport type SidebarVariant = 'sidebar' | 'floating' | 'inset';\nexport type SidebarCollapsible = 'offcanvas' | 'icon' | 'none';\n\n/**\n * Context value for SidebarGlass compound components\n * 100% compatible with shadcn/ui useSidebar() hook\n */\nexport interface SidebarContextValue {\n /** Sidebar state: \"expanded\" | \"collapsed\" */\n state: 'expanded' | 'collapsed';\n /** Whether sidebar is open (desktop) */\n open: boolean;\n /** Set sidebar open state */\n setOpen: (open: boolean) => void;\n /** Whether mobile drawer is open */\n openMobile: boolean;\n /** Set mobile drawer open state */\n setOpenMobile: (open: boolean) => void;\n /** Whether viewport is mobile */\n isMobile: boolean;\n /** Toggle sidebar open/close */\n toggleSidebar: () => void;\n\n // === CONFIG ===\n /** Which side the sidebar is on */\n side: SidebarSide;\n /** Sidebar variant */\n variant: SidebarVariant;\n /** Collapsible mode */\n collapsible: SidebarCollapsible;\n}\n\n// ========================================\n// CONSTANTS\n// ========================================\n\nconst MOBILE_BREAKPOINT = 768;\nconst SIDEBAR_COOKIE_NAME = 'sidebar:state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; // 7 days\n\n// ========================================\n// CONTEXT\n// ========================================\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access Sidebar context (100% shadcn compatible)\n *\n * @throws Error if used outside of SidebarGlass.Provider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { state, open, toggleSidebar, isMobile } = useSidebar();\n *\n * return (\n * <button onClick={toggleSidebar}>\n * {state === 'expanded' ? 'Collapse' : 'Expand'}\n * </button>\n * );\n * }\n * ```\n */\nexport function useSidebar(): SidebarContextValue {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error(\n 'useSidebar must be used within SidebarGlass.Provider. ' +\n 'Wrap your component tree with <SidebarGlass.Provider>.'\n );\n }\n return context;\n}\n\n/**\n * Optional hook that returns null if outside provider (doesn't throw)\n */\nexport function useSidebarOptional(): SidebarContextValue | null {\n return useContext(SidebarContext);\n}\n\n// ========================================\n// PROVIDER\n// ========================================\n\n/**\n * Props for SidebarGlass.Provider (100% shadcn compatible)\n */\nexport interface SidebarProviderProps {\n children: ReactNode;\n\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state (uncontrolled) @default true */\n defaultOpen?: boolean;\n\n /** Which side the sidebar is on @default \"left\" */\n side?: SidebarSide;\n /** Sidebar variant @default \"sidebar\" */\n variant?: SidebarVariant;\n /** Collapsible mode @default \"offcanvas\" */\n collapsible?: SidebarCollapsible;\n\n /** Cookie name for persistence @default \"sidebar:state\" */\n cookieName?: string;\n /** Keyboard shortcut key (Cmd/Ctrl + key) @default \"b\" */\n keyboardShortcut?: string | false;\n}\n\n/**\n * Provider component for SidebarGlass compound components\n *\n * @example\n * ```tsx\n * <SidebarGlass.Provider defaultOpen>\n * <SidebarGlass.Root>\n * <SidebarGlass.Header />\n * <SidebarGlass.Content>\n * <SidebarGlass.Menu>...</SidebarGlass.Menu>\n * </SidebarGlass.Content>\n * <SidebarGlass.Footer />\n * </SidebarGlass.Root>\n * <SidebarGlass.Inset>\n * <main>Main content</main>\n * </SidebarGlass.Inset>\n * </SidebarGlass.Provider>\n * ```\n */\nexport const SidebarProvider: FC<SidebarProviderProps> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = true,\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n cookieName = SIDEBAR_COOKIE_NAME,\n keyboardShortcut = 'b',\n}) => {\n // === OPEN STATE (controlled/uncontrolled with cookie persistence) ===\n const [internalOpen, setInternalOpen] = useState(() => {\n // Try to read from cookie\n if (typeof document !== 'undefined') {\n const cookies = document.cookie.split(';');\n const sidebarCookie = cookies.find((c) => c.trim().startsWith(`${cookieName}=`));\n if (sidebarCookie) {\n return sidebarCookie.split('=')[1] === 'true';\n }\n }\n return defaultOpen;\n });\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setInternalOpen(value);\n }\n onOpenChange?.(value);\n\n // Persist to cookie\n if (typeof document !== 'undefined') {\n document.cookie = `${cookieName}=${value}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n }\n },\n [isControlled, onOpenChange, cookieName]\n );\n\n // === MOBILE STATE ===\n const [openMobile, setOpenMobile] = useState(false);\n\n // === RESPONSIVE DETECTION ===\n const [isMobile, setIsMobile] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.innerWidth < MOBILE_BREAKPOINT;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const checkMobile = () => {\n const mobile = window.innerWidth < MOBILE_BREAKPOINT;\n setIsMobile(mobile);\n // Close mobile drawer when switching to desktop (in same callback)\n if (!mobile) {\n setOpenMobile(false);\n }\n };\n\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n // === TOGGLE ACTION ===\n const toggleSidebar = useCallback(() => {\n if (isMobile) {\n setOpenMobile((prev) => !prev);\n } else {\n setOpen(!open);\n }\n }, [isMobile, open, setOpen]);\n\n // === KEYBOARD NAVIGATION ===\n useEffect(() => {\n if (!keyboardShortcut) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n // Cmd/Ctrl + key - toggle sidebar\n if (e.key === keyboardShortcut && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n toggleSidebar();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [keyboardShortcut, toggleSidebar]);\n\n // === CONTEXT VALUE ===\n const value = useMemo<SidebarContextValue>(\n () => ({\n state: open ? 'expanded' : 'collapsed',\n open,\n setOpen,\n openMobile,\n setOpenMobile,\n isMobile,\n toggleSidebar,\n side,\n variant,\n collapsible,\n }),\n [open, setOpen, openMobile, isMobile, toggleSidebar, side, variant, collapsible]\n );\n\n return <SidebarContext.Provider value={value}>{children}</SidebarContext.Provider>;\n};\n\nSidebarProvider.displayName = 'SidebarGlass.Provider';\n","/**\n * SidebarGlass Core Components\n *\n * Layout components for building sidebars with glassmorphism effects.\n * 100% API compatible with shadcn/ui Sidebar.\n *\n * @module sidebar-glass\n */\n\nimport {\n forwardRef,\n type ReactNode,\n type CSSProperties,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { PanelLeft } from 'lucide-react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\nimport {\n useSidebar,\n type SidebarSide,\n type SidebarVariant,\n type SidebarCollapsible,\n} from './sidebar-context';\nimport { ModalGlass } from '@/components/glass/ui/modal-glass';\nimport '@/glass-theme.css';\n\n// ========================================\n// SIDEBAR ROOT\n// ========================================\n\nexport interface SidebarRootProps extends ComponentPropsWithoutRef<'aside'> {\n children: ReactNode;\n /** Override side from provider */\n side?: SidebarSide;\n /** Override variant from provider */\n variant?: SidebarVariant;\n /** Override collapsible from provider */\n collapsible?: SidebarCollapsible;\n}\n\n/**\n * SidebarGlass.Root - Main sidebar container\n *\n * @example\n * ```tsx\n * <SidebarGlass.Root>\n * <SidebarGlass.Header />\n * <SidebarGlass.Content>...</SidebarGlass.Content>\n * <SidebarGlass.Footer />\n * </SidebarGlass.Root>\n * ```\n */\nexport const SidebarRoot = forwardRef<HTMLElement, SidebarRootProps>(\n (\n {\n children,\n side: sideProp,\n variant: variantProp,\n collapsible: collapsibleProp,\n className,\n ...props\n },\n ref\n ) => {\n const context = useSidebar();\n const side = sideProp ?? context.side;\n const variant = variantProp ?? context.variant;\n const collapsible = collapsibleProp ?? context.collapsible;\n const { state, open, openMobile, isMobile, setOpenMobile } = context;\n\n // Mobile: render as Sheet/Drawer\n if (isMobile) {\n return (\n <ModalGlass.Root open={openMobile} onOpenChange={setOpenMobile}>\n <ModalGlass.Overlay />\n <aside\n ref={ref}\n data-sidebar=\"sidebar\"\n data-side={side}\n data-variant={variant}\n data-collapsible={collapsible}\n data-state=\"expanded\"\n data-mobile=\"true\"\n className={cn(\n 'fixed inset-y-0 z-50 flex flex-col',\n 'w-[var(--sidebar-width-mobile)]',\n side === 'left' ? 'left-0' : 'right-0',\n className\n )}\n style={\n {\n background: 'var(--sidebar-bg)',\n color: 'var(--sidebar-foreground)',\n borderRight: side === 'left' ? '1px solid var(--sidebar-border)' : undefined,\n borderLeft: side === 'right' ? '1px solid var(--sidebar-border)' : undefined,\n backdropFilter: 'blur(var(--sidebar-backdrop-blur))',\n WebkitBackdropFilter: 'blur(var(--sidebar-backdrop-blur))',\n boxShadow: 'var(--sidebar-glow)',\n } as CSSProperties\n }\n {...props}\n >\n {children}\n </aside>\n </ModalGlass.Root>\n );\n }\n\n // Desktop: collapsible sidebar\n const isCollapsed = !open && collapsible !== 'none';\n const width =\n isCollapsed && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : 'var(--sidebar-width)';\n\n return (\n <aside\n ref={ref}\n data-sidebar=\"sidebar\"\n data-side={side}\n data-variant={variant}\n data-collapsible={collapsible}\n data-state={state}\n className={cn(\n 'group/sidebar relative flex flex-col',\n 'transition-[width] duration-300 ease-in-out',\n // Offcanvas: completely hidden when collapsed\n collapsible === 'offcanvas' && !open && 'w-0 overflow-hidden',\n // Variant-specific styles\n variant === 'floating' && 'rounded-xl m-2',\n variant === 'inset' && 'rounded-xl',\n className\n )}\n style={\n {\n width: collapsible === 'offcanvas' && !open ? 0 : width,\n background: 'var(--sidebar-bg)',\n color: 'var(--sidebar-foreground)',\n borderRight:\n side === 'left' && variant !== 'floating'\n ? '1px solid var(--sidebar-border)'\n : undefined,\n borderLeft:\n side === 'right' && variant !== 'floating'\n ? '1px solid var(--sidebar-border)'\n : undefined,\n border: variant === 'floating' ? '1px solid var(--sidebar-border)' : undefined,\n backdropFilter: 'blur(var(--sidebar-backdrop-blur))',\n WebkitBackdropFilter: 'blur(var(--sidebar-backdrop-blur))',\n boxShadow: variant === 'floating' ? 'var(--sidebar-glow)' : undefined,\n } as CSSProperties\n }\n {...props}\n >\n {children}\n </aside>\n );\n }\n);\n\nSidebarRoot.displayName = 'SidebarGlass.Root';\n\n// ========================================\n// SIDEBAR HEADER\n// ========================================\n\nexport interface SidebarHeaderProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Header - Sticky header section\n */\nexport const SidebarHeader = forwardRef<HTMLDivElement, SidebarHeaderProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn('flex shrink-0 flex-col gap-2 p-4', 'border-b', className)}\n style={{\n borderColor: 'var(--sidebar-border)',\n }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarHeader.displayName = 'SidebarGlass.Header';\n\n// ========================================\n// SIDEBAR CONTENT\n// ========================================\n\nexport interface SidebarContentProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Content - Scrollable content area\n */\nexport const SidebarContent = forwardRef<HTMLDivElement, SidebarContentProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n 'flex flex-1 flex-col gap-4 overflow-auto p-4',\n // Hide scrollbar but allow scrolling\n '[&::-webkit-scrollbar]:w-1.5',\n '[&::-webkit-scrollbar-track]:bg-transparent',\n '[&::-webkit-scrollbar-thumb]:rounded-full',\n '[&::-webkit-scrollbar-thumb]:bg-white/10',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarContent.displayName = 'SidebarGlass.Content';\n\n// ========================================\n// SIDEBAR FOOTER\n// ========================================\n\nexport interface SidebarFooterProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Footer - Sticky footer section\n */\nexport const SidebarFooter = forwardRef<HTMLDivElement, SidebarFooterProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn('flex shrink-0 flex-col gap-2 p-4', 'border-t', className)}\n style={{\n borderColor: 'var(--sidebar-border)',\n }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarFooter.displayName = 'SidebarGlass.Footer';\n\n// ========================================\n// SIDEBAR RAIL\n// ========================================\n\nexport type SidebarRailProps = ComponentPropsWithoutRef<'button'>;\n\n/**\n * SidebarGlass.Rail - Interactive rail for toggling sidebar\n *\n * Shows on hover and allows click to toggle collapsed/expanded state.\n */\nexport const SidebarRail = forwardRef<HTMLButtonElement, SidebarRailProps>(\n ({ className, ...props }, ref) => {\n const { toggleSidebar, side } = useSidebar();\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n className={cn(\n 'absolute inset-y-0 z-20 w-4',\n 'hidden group-hover/sidebar:block',\n '-translate-x-1/2 transition-all ease-linear',\n 'after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]',\n 'hover:after:bg-[var(--sidebar-border)]',\n 'cursor-col-resize',\n side === 'left' ? '-right-2' : '-left-2',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarRail.displayName = 'SidebarGlass.Rail';\n\n// ========================================\n// SIDEBAR INSET\n// ========================================\n\nexport interface SidebarInsetProps extends ComponentPropsWithoutRef<'main'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Inset - Main content area next to sidebar\n *\n * Use this for the main content that sits beside the sidebar.\n */\nexport const SidebarInset = forwardRef<HTMLElement, SidebarInsetProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <main\n ref={ref}\n data-sidebar=\"inset\"\n className={cn('flex flex-1 flex-col', 'min-h-screen', className)}\n {...props}\n >\n {children}\n </main>\n );\n }\n);\n\nSidebarInset.displayName = 'SidebarGlass.Inset';\n\n// ========================================\n// SIDEBAR TRIGGER\n// ========================================\n\nexport interface SidebarTriggerProps extends ComponentPropsWithoutRef<'button'> {\n /** Render as child element */\n asChild?: boolean;\n}\n\n/**\n * SidebarGlass.Trigger - Toggle button for sidebar\n *\n * @example\n * ```tsx\n * // Default button\n * <SidebarGlass.Trigger />\n *\n * // Custom trigger\n * <SidebarGlass.Trigger asChild>\n * <ButtonGlass variant=\"ghost\" size=\"icon\">\n * <Menu />\n * </ButtonGlass>\n * </SidebarGlass.Trigger>\n * ```\n */\nexport const SidebarTrigger = forwardRef<HTMLButtonElement, SidebarTriggerProps>(\n ({ asChild = false, className, children, ...props }, ref) => {\n const { toggleSidebar } = useSidebar();\n\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"trigger\"\n onClick={toggleSidebar}\n className={cn(\n 'inline-flex items-center justify-center',\n 'h-9 w-9 rounded-lg',\n 'text-sm font-medium',\n 'transition-colors',\n 'text-[var(--sidebar-foreground)]/60',\n 'hover:bg-[var(--sidebar-accent)]',\n 'hover:text-[var(--sidebar-accent-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--sidebar-ring)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n >\n {children ?? <PanelLeft className=\"h-6 w-6\" />}\n {!children && <span className=\"sr-only\">Toggle Sidebar</span>}\n </Comp>\n );\n }\n);\n\nSidebarTrigger.displayName = 'SidebarGlass.Trigger';\n\n// ========================================\n// SIDEBAR SEPARATOR\n// ========================================\n\nexport type SidebarSeparatorProps = ComponentPropsWithoutRef<'hr'>;\n\n/**\n * SidebarGlass.Separator - Visual divider\n */\nexport const SidebarSeparator = forwardRef<HTMLHRElement, SidebarSeparatorProps>(\n ({ className, ...props }, ref) => {\n return (\n <hr\n ref={ref}\n data-sidebar=\"separator\"\n className={cn('mx-4 my-2 h-px border-0', className)}\n style={{\n background: 'var(--sidebar-border)',\n }}\n {...props}\n />\n );\n }\n);\n\nSidebarSeparator.displayName = 'SidebarGlass.Separator';\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SidebarGlass Menu Components\n *\n * Menu components for building navigation within the sidebar.\n * 100% API compatible with shadcn/ui Sidebar menu components.\n *\n * @module sidebar-menu\n */\n\nimport {\n forwardRef,\n type ReactNode,\n type CSSProperties,\n type ComponentPropsWithoutRef,\n createContext,\n useContext,\n} from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\nimport { useSidebar } from './sidebar-context';\nimport { TooltipGlassSimple } from '@/components/glass/ui/tooltip-glass';\nimport { SkeletonGlass } from '@/components/glass/ui/skeleton-glass';\n\n// ========================================\n// SIDEBAR GROUP\n// ========================================\n\nexport interface SidebarGroupProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Group - Container for a group of menu items\n */\nexport const SidebarGroup = forwardRef<HTMLDivElement, SidebarGroupProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarGroup.displayName = 'SidebarGlass.Group';\n\n// ========================================\n// SIDEBAR GROUP LABEL\n// ========================================\n\nexport interface SidebarGroupLabelProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n /** Render as child element */\n asChild?: boolean;\n}\n\n/**\n * SidebarGlass.GroupLabel - Label for a group of menu items\n */\nexport const SidebarGroupLabel = forwardRef<HTMLDivElement, SidebarGroupLabelProps>(\n ({ children, asChild = false, className, ...props }, ref) => {\n const { state } = useSidebar();\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n data-state={state}\n className={cn(\n 'flex h-8 shrink-0 items-center px-2',\n 'text-xs font-medium text-[var(--sidebar-foreground)]/60',\n 'transition-[margin,opacity] duration-200 ease-linear',\n // Collapsed state\n 'group-data-[state=collapsed]/sidebar:h-0 group-data-[state=collapsed]/sidebar:overflow-hidden',\n 'group-data-[state=collapsed]/sidebar:opacity-0',\n className\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nSidebarGroupLabel.displayName = 'SidebarGlass.GroupLabel';\n\n// ========================================\n// SIDEBAR GROUP ACTION\n// ========================================\n\nexport interface SidebarGroupActionProps extends ComponentPropsWithoutRef<'button'> {\n /** Render as child element */\n asChild?: boolean;\n}\n\n/**\n * SidebarGlass.GroupAction - Action button in group header\n */\nexport const SidebarGroupAction = forwardRef<HTMLButtonElement, SidebarGroupActionProps>(\n ({ asChild = false, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n 'absolute right-2 top-2.5',\n 'flex aspect-square w-5 items-center justify-center',\n 'rounded-md p-0 text-[var(--sidebar-foreground)]/60',\n 'ring-[var(--sidebar-ring)]',\n 'transition-transform hover:bg-[var(--sidebar-accent)]',\n 'hover:text-[var(--sidebar-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n // Hide when collapsed\n 'group-data-[state=collapsed]/sidebar:hidden',\n // Show on hover\n 'after:absolute after:-inset-2 after:md:hidden',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarGroupAction.displayName = 'SidebarGlass.GroupAction';\n\n// ========================================\n// SIDEBAR GROUP CONTENT\n// ========================================\n\nexport interface SidebarGroupContentProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.GroupContent - Content wrapper for group items\n */\nexport const SidebarGroupContent = forwardRef<HTMLDivElement, SidebarGroupContentProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn('flex flex-col gap-1', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarGroupContent.displayName = 'SidebarGlass.GroupContent';\n\n// ========================================\n// SIDEBAR MENU\n// ========================================\n\nexport interface SidebarMenuProps extends ComponentPropsWithoutRef<'ul'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Menu - Container for menu items\n */\nexport const SidebarMenu = forwardRef<HTMLUListElement, SidebarMenuProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn('flex w-full flex-col gap-1', className)}\n {...props}\n >\n {children}\n </ul>\n );\n }\n);\n\nSidebarMenu.displayName = 'SidebarGlass.Menu';\n\n// ========================================\n// SIDEBAR MENU ITEM\n// ========================================\n\nexport interface SidebarMenuItemProps extends ComponentPropsWithoutRef<'li'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.MenuItem - Container for a single menu item\n */\nexport const SidebarMenuItem = forwardRef<HTMLLIElement, SidebarMenuItemProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative text-[var(--sidebar-foreground)]/60', className)}\n {...props}\n >\n {children}\n </li>\n );\n }\n);\n\nSidebarMenuItem.displayName = 'SidebarGlass.MenuItem';\n\n// ========================================\n// SIDEBAR MENU BUTTON\n// ========================================\n\nexport type SidebarMenuButtonSize = 'default' | 'sm' | 'lg';\nexport type SidebarMenuButtonVariant = 'default' | 'outline';\n\nexport interface SidebarMenuButtonProps extends ComponentPropsWithoutRef<'button'> {\n /** Render as child element */\n asChild?: boolean;\n /** Whether this item is active */\n isActive?: boolean;\n /** Tooltip text when collapsed */\n tooltip?: string | ReactNode;\n /** Button size */\n size?: SidebarMenuButtonSize;\n /** Button variant */\n variant?: SidebarMenuButtonVariant;\n}\n\nconst menuButtonSizeClasses: Record<SidebarMenuButtonSize, string> = {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-10 text-sm group-data-[state=collapsed]/sidebar:!p-0',\n};\n\n/**\n * SidebarGlass.MenuButton - Interactive menu button\n */\nexport const SidebarMenuButton = forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n (\n {\n asChild = false,\n isActive = false,\n tooltip,\n size = 'default',\n variant = 'default',\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { state, isMobile } = useSidebar();\n const Comp = asChild ? Slot : 'button';\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-active={isActive}\n data-size={size}\n className={cn(\n 'peer/menu-button flex w-full items-center gap-2',\n 'overflow-hidden rounded-md px-2',\n 'ring-[var(--sidebar-ring)]',\n 'transition-[width,height,padding] duration-200 ease-linear',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'active:bg-[var(--sidebar-accent)] active:text-[var(--sidebar-accent-foreground)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n // Size variants\n menuButtonSizeClasses[size],\n // Variant styles\n variant === 'default' && [\n 'hover:bg-[var(--sidebar-accent)] hover:text-[var(--sidebar-accent-foreground)]',\n ],\n variant === 'outline' && [\n 'bg-transparent shadow-none',\n 'hover:bg-[var(--sidebar-accent)] hover:text-[var(--sidebar-accent-foreground)]',\n 'hover:shadow-[0_0_0_1px_var(--sidebar-border)]',\n ],\n // Active state\n isActive && [\n 'bg-[var(--sidebar-primary)] text-[var(--sidebar-primary-foreground)]',\n 'hover:bg-[var(--sidebar-primary)] hover:text-[var(--sidebar-primary-foreground)]',\n ],\n // Collapsed state - icon only\n 'group-data-[state=collapsed]/sidebar:w-8 group-data-[state=collapsed]/sidebar:!px-0',\n 'group-data-[state=collapsed]/sidebar:justify-center',\n className\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n\n // No tooltip on mobile or expanded state\n if (!tooltip || isMobile || state === 'expanded') {\n return button;\n }\n\n return (\n <TooltipGlassSimple\n content={typeof tooltip === 'string' ? tooltip : String(tooltip)}\n side=\"right\"\n >\n {button}\n </TooltipGlassSimple>\n );\n }\n);\n\nSidebarMenuButton.displayName = 'SidebarGlass.MenuButton';\n\n// ========================================\n// SIDEBAR MENU ACTION\n// ========================================\n\nexport interface SidebarMenuActionProps extends ComponentPropsWithoutRef<'button'> {\n /** Render as child element */\n asChild?: boolean;\n /** Only show on hover */\n showOnHover?: boolean;\n}\n\n/**\n * SidebarGlass.MenuAction - Action button within menu item\n */\nexport const SidebarMenuAction = forwardRef<HTMLButtonElement, SidebarMenuActionProps>(\n ({ asChild = false, showOnHover = false, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n 'absolute right-1 top-1.5',\n 'flex aspect-square w-5 items-center justify-center',\n 'rounded-md p-0 text-[var(--sidebar-foreground)]/60',\n 'ring-[var(--sidebar-ring)]',\n 'transition-transform hover:bg-[var(--sidebar-accent)]',\n 'hover:text-[var(--sidebar-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n // Hide when collapsed\n 'group-data-[state=collapsed]/sidebar:hidden',\n // Show on hover\n showOnHover &&\n 'peer-hover/menu-button:opacity-100 group-focus-within/menu-item:opacity-100',\n showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',\n // Tap area for touch\n 'after:absolute after:-inset-2 after:md:hidden',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarMenuAction.displayName = 'SidebarGlass.MenuAction';\n\n// ========================================\n// SIDEBAR MENU BADGE\n// ========================================\n\nexport interface SidebarMenuBadgeProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.MenuBadge - Badge within menu item\n */\nexport const SidebarMenuBadge = forwardRef<HTMLDivElement, SidebarMenuBadgeProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n 'pointer-events-none absolute right-1 flex h-5 min-w-5',\n 'select-none items-center justify-center',\n 'rounded-md px-1 text-xs font-medium tabular-nums',\n 'text-[var(--sidebar-foreground)]/60',\n // Hide when collapsed\n 'group-data-[state=collapsed]/sidebar:hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarMenuBadge.displayName = 'SidebarGlass.MenuBadge';\n\n// ========================================\n// SIDEBAR MENU SKELETON\n// ========================================\n\nexport interface SidebarMenuSkeletonProps extends ComponentPropsWithoutRef<'div'> {\n /** Show icon placeholder */\n showIcon?: boolean;\n}\n\n/**\n * SidebarGlass.MenuSkeleton - Loading skeleton for menu items\n */\nexport const SidebarMenuSkeleton = forwardRef<HTMLDivElement, SidebarMenuSkeletonProps>(\n ({ showIcon = false, className, ...props }, ref) => {\n // Fixed width for consistent appearance (avoids Math.random during render)\n const width = '70%';\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <SkeletonGlass className=\"size-4 rounded-md\" />}\n <SkeletonGlass\n className=\"h-4 max-w-[var(--skeleton-width)] flex-1\"\n style={{ '--skeleton-width': width } as CSSProperties}\n />\n </div>\n );\n }\n);\n\nSidebarMenuSkeleton.displayName = 'SidebarGlass.MenuSkeleton';\n\n// ========================================\n// SIDEBAR MENU SUB (SUBMENU CONTAINER)\n// ========================================\n\n// Context for submenu state\ninterface SidebarMenuSubContextValue {\n open: boolean;\n}\n\nconst SidebarMenuSubContext = createContext<SidebarMenuSubContextValue | null>(null);\n\nexport interface SidebarMenuSubProps extends ComponentPropsWithoutRef<'ul'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.MenuSub - Container for submenu items\n */\nexport const SidebarMenuSub = forwardRef<HTMLUListElement, SidebarMenuSubProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <SidebarMenuSubContext.Provider value={{ open: true }}>\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n 'flex min-w-0 flex-col gap-1',\n 'mx-3.5 border-l border-[var(--sidebar-border)] px-2.5 py-0.5',\n // Hide when collapsed\n 'group-data-[state=collapsed]/sidebar:hidden',\n className\n )}\n {...props}\n >\n {children}\n </ul>\n </SidebarMenuSubContext.Provider>\n );\n }\n);\n\nSidebarMenuSub.displayName = 'SidebarGlass.MenuSub';\n\n// ========================================\n// SIDEBAR MENU SUB ITEM\n// ========================================\n\nexport interface SidebarMenuSubItemProps extends ComponentPropsWithoutRef<'li'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.MenuSubItem - Container for a submenu item\n */\nexport const SidebarMenuSubItem = forwardRef<HTMLLIElement, SidebarMenuSubItemProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <li ref={ref} data-sidebar=\"menu-sub-item\" className={cn(className)} {...props}>\n {children}\n </li>\n );\n }\n);\n\nSidebarMenuSubItem.displayName = 'SidebarGlass.MenuSubItem';\n\n// ========================================\n// SIDEBAR MENU SUB BUTTON\n// ========================================\n\nexport interface SidebarMenuSubButtonProps extends ComponentPropsWithoutRef<'a'> {\n /** Render as child element */\n asChild?: boolean;\n /** Whether this item is active */\n isActive?: boolean;\n /** Button size */\n size?: 'sm' | 'md';\n}\n\n/**\n * SidebarGlass.MenuSubButton - Interactive submenu button\n */\nexport const SidebarMenuSubButton = forwardRef<HTMLAnchorElement, SidebarMenuSubButtonProps>(\n ({ asChild = false, isActive = false, size = 'md', className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-active={isActive}\n data-size={size}\n className={cn(\n 'flex min-w-0 items-center gap-2',\n '-ml-px rounded-md border-l border-transparent',\n 'text-[var(--sidebar-foreground)]/60',\n 'ring-[var(--sidebar-ring)]',\n 'transition-colors',\n 'hover:border-[var(--sidebar-border)]',\n 'hover:bg-[var(--sidebar-accent)]',\n 'hover:text-[var(--sidebar-accent-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'active:bg-[var(--sidebar-accent)] active:text-[var(--sidebar-accent-foreground)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n // Size variants\n size === 'sm' && 'h-7 px-2 text-xs',\n size === 'md' && 'h-8 px-2 text-sm',\n // Active state\n isActive && ['border-[var(--sidebar-primary)]', 'text-[var(--sidebar-foreground)]'],\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarMenuSubButton.displayName = 'SidebarGlass.MenuSubButton';\n\n// Export hook for submenu context (optional use)\nexport function useSidebarMenuSub() {\n const context = useContext(SidebarMenuSubContext);\n return context;\n}\n","/**\n * SidebarGlass Component\n *\n * A glassmorphism sidebar component with 100% shadcn/ui Sidebar API compatibility.\n * Supports collapsible modes (offcanvas/icon/none), variants (sidebar/floating/inset),\n * mobile drawer, keyboard shortcuts, and cookie persistence.\n *\n * @example\n * ```tsx\n * import { SidebarGlass, useSidebar } from '@/components/glass/ui/sidebar-glass';\n *\n * function App() {\n * return (\n * <SidebarGlass.Provider>\n * <SidebarGlass.Root>\n * <SidebarGlass.Header>\n * <Logo />\n * </SidebarGlass.Header>\n * <SidebarGlass.Content>\n * <SidebarGlass.Group>\n * <SidebarGlass.GroupLabel>Navigation</SidebarGlass.GroupLabel>\n * <SidebarGlass.GroupContent>\n * <SidebarGlass.Menu>\n * <SidebarGlass.MenuItem>\n * <SidebarGlass.MenuButton isActive>\n * <Home /> Dashboard\n * </SidebarGlass.MenuButton>\n * </SidebarGlass.MenuItem>\n * </SidebarGlass.Menu>\n * </SidebarGlass.GroupContent>\n * </SidebarGlass.Group>\n * </SidebarGlass.Content>\n * <SidebarGlass.Footer>\n * <UserMenu />\n * </SidebarGlass.Footer>\n * <SidebarGlass.Rail />\n * </SidebarGlass.Root>\n * <SidebarGlass.Inset>\n * <main>Content</main>\n * </SidebarGlass.Inset>\n * </SidebarGlass.Provider>\n * );\n * }\n * ```\n *\n * @module sidebar-glass\n */\n\n// Context exports\nexport {\n SidebarProvider,\n useSidebar,\n type SidebarContextValue,\n type SidebarProviderProps,\n type SidebarSide,\n type SidebarVariant,\n type SidebarCollapsible,\n} from './sidebar-context';\n\n// Core component exports\nexport {\n SidebarRoot,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarRail,\n SidebarInset,\n SidebarTrigger,\n SidebarSeparator,\n type SidebarRootProps,\n type SidebarHeaderProps,\n type SidebarContentProps,\n type SidebarFooterProps,\n type SidebarRailProps,\n type SidebarInsetProps,\n type SidebarTriggerProps,\n type SidebarSeparatorProps,\n} from './sidebar-glass';\n\n// Menu component exports\nexport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubItem,\n SidebarMenuSubButton,\n useSidebarMenuSub,\n type SidebarGroupProps,\n type SidebarGroupLabelProps,\n type SidebarGroupActionProps,\n type SidebarGroupContentProps,\n type SidebarMenuProps,\n type SidebarMenuItemProps,\n type SidebarMenuButtonProps,\n type SidebarMenuButtonSize,\n type SidebarMenuButtonVariant,\n type SidebarMenuActionProps,\n type SidebarMenuBadgeProps,\n type SidebarMenuSkeletonProps,\n type SidebarMenuSubProps,\n type SidebarMenuSubItemProps,\n type SidebarMenuSubButtonProps,\n} from './sidebar-menu';\n\n// Import all components for compound export\nimport { SidebarProvider } from './sidebar-context';\nimport {\n SidebarRoot,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarRail,\n SidebarInset,\n SidebarTrigger,\n SidebarSeparator,\n} from './sidebar-glass';\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubItem,\n SidebarMenuSubButton,\n} from './sidebar-menu';\n\n/**\n * SidebarGlass compound component\n *\n * 100% API compatible with shadcn/ui Sidebar.\n *\n * @example\n * ```tsx\n * <SidebarGlass.Provider>\n * <SidebarGlass.Root>\n * <SidebarGlass.Header />\n * <SidebarGlass.Content>\n * <SidebarGlass.Menu>\n * <SidebarGlass.MenuItem>\n * <SidebarGlass.MenuButton>Item</SidebarGlass.MenuButton>\n * </SidebarGlass.MenuItem>\n * </SidebarGlass.Menu>\n * </SidebarGlass.Content>\n * <SidebarGlass.Footer />\n * </SidebarGlass.Root>\n * <SidebarGlass.Inset>\n * <main>Content</main>\n * </SidebarGlass.Inset>\n * </SidebarGlass.Provider>\n * ```\n */\nexport const SidebarGlass = {\n // Context\n Provider: SidebarProvider,\n\n // Layout\n Root: SidebarRoot,\n Header: SidebarHeader,\n Content: SidebarContent,\n Footer: SidebarFooter,\n Rail: SidebarRail,\n Inset: SidebarInset,\n Trigger: SidebarTrigger,\n Separator: SidebarSeparator,\n\n // Groups\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n GroupAction: SidebarGroupAction,\n GroupContent: SidebarGroupContent,\n\n // Menu\n Menu: SidebarMenu,\n MenuItem: SidebarMenuItem,\n MenuButton: SidebarMenuButton,\n MenuAction: SidebarMenuAction,\n MenuBadge: SidebarMenuBadge,\n MenuSkeleton: SidebarMenuSkeleton,\n\n // Submenu\n MenuSub: SidebarMenuSub,\n MenuSubItem: SidebarMenuSubItem,\n MenuSubButton: SidebarMenuSubButton,\n};\n","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * @fileOverview Default Legend Content\n */\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport { Surface } from '../container/Surface';\nimport { Symbols } from '../shape/Symbols';\nimport { adaptEventsOfChild } from '../util/types';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nvar SIZE = 32;\nvar defaultLegendContentDefaultProps = {\n align: 'center',\n iconSize: 14,\n inactiveColor: '#ccc',\n layout: 'horizontal',\n verticalAlign: 'middle'\n};\nfunction Icon(_ref) {\n var {\n data,\n iconType,\n inactiveColor\n } = _ref;\n var halfSize = SIZE / 2;\n var sixthSize = SIZE / 6;\n var thirdSize = SIZE / 3;\n var color = data.inactive ? inactiveColor : data.color;\n var preferredIcon = iconType !== null && iconType !== void 0 ? iconType : data.type;\n if (preferredIcon === 'none') {\n return null;\n }\n if (preferredIcon === 'plainline') {\n var _data$payload;\n return /*#__PURE__*/React.createElement(\"line\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n strokeDasharray: (_data$payload = data.payload) === null || _data$payload === void 0 ? void 0 : _data$payload.strokeDasharray,\n x1: 0,\n y1: halfSize,\n x2: SIZE,\n y2: halfSize,\n className: \"recharts-legend-icon\"\n });\n }\n if (preferredIcon === 'line') {\n return /*#__PURE__*/React.createElement(\"path\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n d: \"M0,\".concat(halfSize, \"h\").concat(thirdSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n H\").concat(SIZE, \"M\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(thirdSize, \",\").concat(halfSize),\n className: \"recharts-legend-icon\"\n });\n }\n if (preferredIcon === 'rect') {\n return /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"none\",\n fill: color,\n d: \"M0,\".concat(SIZE / 8, \"h\").concat(SIZE, \"v\").concat(SIZE * 3 / 4, \"h\").concat(-SIZE, \"z\"),\n className: \"recharts-legend-icon\"\n });\n }\n if (/*#__PURE__*/React.isValidElement(data.legendIcon)) {\n var iconProps = _objectSpread({}, data);\n delete iconProps.legendIcon;\n return /*#__PURE__*/React.cloneElement(data.legendIcon, iconProps);\n }\n return /*#__PURE__*/React.createElement(Symbols, {\n fill: color,\n cx: halfSize,\n cy: halfSize,\n size: SIZE,\n sizeType: \"diameter\",\n type: preferredIcon\n });\n}\nfunction Items(props) {\n var {\n payload,\n iconSize,\n layout,\n formatter,\n inactiveColor,\n iconType\n } = props;\n var viewBox = {\n x: 0,\n y: 0,\n width: SIZE,\n height: SIZE\n };\n var itemStyle = {\n display: layout === 'horizontal' ? 'inline-block' : 'block',\n marginRight: 10\n };\n var svgStyle = {\n display: 'inline-block',\n verticalAlign: 'middle',\n marginRight: 4\n };\n return payload.map((entry, i) => {\n var finalFormatter = entry.formatter || formatter;\n var className = clsx({\n 'recharts-legend-item': true,\n [\"legend-item-\".concat(i)]: true,\n inactive: entry.inactive\n });\n if (entry.type === 'none') {\n return null;\n }\n var color = entry.inactive ? inactiveColor : entry.color;\n var finalValue = finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value;\n return /*#__PURE__*/React.createElement(\"li\", _extends({\n className: className,\n style: itemStyle,\n key: \"legend-item-\".concat(i)\n }, adaptEventsOfChild(props, entry, i)), /*#__PURE__*/React.createElement(Surface, {\n width: iconSize,\n height: iconSize,\n viewBox: viewBox,\n style: svgStyle,\n \"aria-label\": \"\".concat(finalValue, \" legend icon\")\n }, /*#__PURE__*/React.createElement(Icon, {\n data: entry,\n iconType: iconType,\n inactiveColor: inactiveColor\n })), /*#__PURE__*/React.createElement(\"span\", {\n className: \"recharts-legend-item-text\",\n style: {\n color\n }\n }, finalValue));\n });\n}\nexport var DefaultLegendContent = outsideProps => {\n var props = resolveDefaultProps(outsideProps, defaultLegendContentDefaultProps);\n var {\n payload,\n layout,\n align\n } = props;\n if (!payload || !payload.length) {\n return null;\n }\n var finalStyle = {\n padding: 0,\n margin: 0,\n textAlign: layout === 'horizontal' ? align : 'left'\n };\n return /*#__PURE__*/React.createElement(\"ul\", {\n className: \"recharts-default-legend\",\n style: finalStyle\n }, /*#__PURE__*/React.createElement(Items, _extends({}, props, {\n payload: payload\n })));\n};","import { useAppSelector } from '../state/hooks';\nimport { selectLegendPayload } from '../state/selectors/legendSelectors';\n\n/**\n * Use this hook in Legend, or anywhere else where you want to read the current Legend items.\n * @return all Legend items ready to be rendered\n */\nexport function useLegendPayload() {\n return useAppSelector(selectLegendPayload);\n}","var _excluded = [\"contextPayload\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from 'react';\nimport { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useLegendPortal } from '../context/legendPortalContext';\nimport { DefaultLegendContent } from './DefaultLegendContent';\nimport { isNumber } from '../util/DataUtils';\nimport { getUniqPayload } from '../util/payload/getUniqPayload';\nimport { useLegendPayload } from '../context/legendPayloadContext';\nimport { useElementOffset } from '../util/useElementOffset';\nimport { useChartHeight, useChartWidth, useMargin } from '../context/chartLayoutContext';\nimport { setLegendSettings, setLegendSize } from '../state/legendSlice';\nimport { useAppDispatch } from '../state/hooks';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nfunction defaultUniqBy(entry) {\n return entry.value;\n}\nfunction LegendContent(props) {\n var {\n contextPayload\n } = props,\n otherProps = _objectWithoutProperties(props, _excluded);\n var finalPayload = getUniqPayload(contextPayload, props.payloadUniqBy, defaultUniqBy);\n var contentProps = _objectSpread(_objectSpread({}, otherProps), {}, {\n payload: finalPayload\n });\n if (/*#__PURE__*/React.isValidElement(props.content)) {\n return /*#__PURE__*/React.cloneElement(props.content, contentProps);\n }\n if (typeof props.content === 'function') {\n return /*#__PURE__*/React.createElement(props.content, contentProps);\n }\n return /*#__PURE__*/React.createElement(DefaultLegendContent, contentProps);\n}\nfunction getDefaultPosition(style, props, margin, chartWidth, chartHeight, box) {\n var {\n layout,\n align,\n verticalAlign\n } = props;\n var hPos, vPos;\n if (!style || (style.left === undefined || style.left === null) && (style.right === undefined || style.right === null)) {\n if (align === 'center' && layout === 'vertical') {\n hPos = {\n left: ((chartWidth || 0) - box.width) / 2\n };\n } else {\n hPos = align === 'right' ? {\n right: margin && margin.right || 0\n } : {\n left: margin && margin.left || 0\n };\n }\n }\n if (!style || (style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null)) {\n if (verticalAlign === 'middle') {\n vPos = {\n top: ((chartHeight || 0) - box.height) / 2\n };\n } else {\n vPos = verticalAlign === 'bottom' ? {\n bottom: margin && margin.bottom || 0\n } : {\n top: margin && margin.top || 0\n };\n }\n }\n return _objectSpread(_objectSpread({}, hPos), vPos);\n}\nfunction LegendSettingsDispatcher(props) {\n var dispatch = useAppDispatch();\n useEffect(() => {\n dispatch(setLegendSettings(props));\n }, [dispatch, props]);\n return null;\n}\nfunction LegendSizeDispatcher(props) {\n var dispatch = useAppDispatch();\n useEffect(() => {\n dispatch(setLegendSize(props));\n return () => {\n dispatch(setLegendSize({\n width: 0,\n height: 0\n }));\n };\n }, [dispatch, props]);\n return null;\n}\nfunction getWidthOrHeight(layout, height, width, maxWidth) {\n if (layout === 'vertical' && isNumber(height)) {\n return {\n height\n };\n }\n if (layout === 'horizontal') {\n return {\n width: width || maxWidth\n };\n }\n return null;\n}\nexport var legendDefaultProps = {\n align: 'center',\n iconSize: 14,\n itemSorter: 'value',\n layout: 'horizontal',\n verticalAlign: 'bottom'\n};\nexport function Legend(outsideProps) {\n var props = resolveDefaultProps(outsideProps, legendDefaultProps);\n var contextPayload = useLegendPayload();\n var legendPortalFromContext = useLegendPortal();\n var margin = useMargin();\n var {\n width: widthFromProps,\n height: heightFromProps,\n wrapperStyle,\n portal: portalFromProps\n } = props;\n // The contextPayload is not used directly inside the hook, but we need the onBBoxUpdate call\n // when the payload changes, therefore it's here as a dependency.\n var [lastBoundingBox, updateBoundingBox] = useElementOffset([contextPayload]);\n var chartWidth = useChartWidth();\n var chartHeight = useChartHeight();\n if (chartWidth == null || chartHeight == null) {\n return null;\n }\n var maxWidth = chartWidth - ((margin === null || margin === void 0 ? void 0 : margin.left) || 0) - ((margin === null || margin === void 0 ? void 0 : margin.right) || 0);\n var widthOrHeight = getWidthOrHeight(props.layout, heightFromProps, widthFromProps, maxWidth);\n // if the user supplies their own portal, only use their defined wrapper styles\n var outerStyle = portalFromProps ? wrapperStyle : _objectSpread(_objectSpread({\n position: 'absolute',\n width: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.width) || widthFromProps || 'auto',\n height: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.height) || heightFromProps || 'auto'\n }, getDefaultPosition(wrapperStyle, props, margin, chartWidth, chartHeight, lastBoundingBox)), wrapperStyle);\n var legendPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : legendPortalFromContext;\n if (legendPortal == null || contextPayload == null) {\n return null;\n }\n var legendElement = /*#__PURE__*/React.createElement(\"div\", {\n className: \"recharts-legend-wrapper\",\n style: outerStyle,\n ref: updateBoundingBox\n }, /*#__PURE__*/React.createElement(LegendSettingsDispatcher, {\n layout: props.layout,\n align: props.align,\n verticalAlign: props.verticalAlign,\n itemSorter: props.itemSorter\n }), !portalFromProps && /*#__PURE__*/React.createElement(LegendSizeDispatcher, {\n width: lastBoundingBox.width,\n height: lastBoundingBox.height\n }), /*#__PURE__*/React.createElement(LegendContent, _extends({}, props, widthOrHeight, {\n margin: margin,\n chartWidth: chartWidth,\n chartHeight: chartHeight,\n contextPayload: contextPayload\n })));\n return /*#__PURE__*/createPortal(legendElement, legendPortal);\n}\nLegend.displayName = 'Legend';","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/scroll-area.tsx\nimport * as React2 from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\n// src/use-state-machine.ts\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/scroll-area.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SCROLL_AREA_NAME = \"ScrollArea\";\nvar [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\nvar [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);\nvar ScrollArea = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeScrollArea,\n type = \"hover\",\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React2.useState(null);\n const [viewport, setViewport] = React2.useState(null);\n const [content, setContent] = React2.useState(null);\n const [scrollbarX, setScrollbarX] = React2.useState(null);\n const [scrollbarY, setScrollbarY] = React2.useState(null);\n const [cornerWidth, setCornerWidth] = React2.useState(0);\n const [cornerHeight, setCornerHeight] = React2.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React2.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React2.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setScrollArea(node));\n const direction = useDirection(dir);\n return /* @__PURE__ */ jsx(\n ScrollAreaProvider,\n {\n scope: __scopeScrollArea,\n type,\n dir: direction,\n scrollHideDelay,\n scrollArea,\n viewport,\n onViewportChange: setViewport,\n content,\n onContentChange: setContent,\n scrollbarX,\n onScrollbarXChange: setScrollbarX,\n scrollbarXEnabled,\n onScrollbarXEnabledChange: setScrollbarXEnabled,\n scrollbarY,\n onScrollbarYChange: setScrollbarY,\n scrollbarYEnabled,\n onScrollbarYEnabledChange: setScrollbarYEnabled,\n onCornerWidthChange: setCornerWidth,\n onCornerHeightChange: setCornerHeight,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n ...scrollAreaProps,\n ref: composedRefs,\n style: {\n position: \"relative\",\n // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n [\"--radix-scroll-area-corner-width\"]: cornerWidth + \"px\",\n [\"--radix-scroll-area-corner-height\"]: cornerHeight + \"px\",\n ...props.style\n }\n }\n )\n }\n );\n }\n);\nScrollArea.displayName = SCROLL_AREA_NAME;\nvar VIEWPORT_NAME = \"ScrollAreaViewport\";\nvar ScrollAreaViewport = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-scroll-area-viewport\": \"\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n /**\n * We don't support `visible` because the intention is to have at least one scrollbar\n * if this component is used and `visible` will behave like `auto` in that case\n * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n *\n * We don't handle `auto` because the intention is for the native implementation\n * to be hidden if using this component. We just want to ensure the node is scrollable\n * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n * the browser from having to work out whether to render native scrollbars or not,\n * we tell it to with the intention of hiding them in CSS.\n */\n overflowX: context.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: context.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n ...props.style\n },\n children: /* @__PURE__ */ jsx(\"div\", { ref: context.onContentChange, style: { minWidth: \"100%\", display: \"table\" }, children })\n }\n )\n ] });\n }\n);\nScrollAreaViewport.displayName = VIEWPORT_NAME;\nvar SCROLLBAR_NAME = \"ScrollAreaScrollbar\";\nvar ScrollAreaScrollbar = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === \"horizontal\";\n React2.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n return context.type === \"hover\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"scroll\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"auto\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"always\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef }) : null;\n }\n);\nScrollAreaScrollbar.displayName = SCROLLBAR_NAME;\nvar ScrollAreaScrollbarHover = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React2.useState(false);\n React2.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = () => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n };\n const handlePointerLeave = () => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n };\n scrollArea.addEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.addEventListener(\"pointerleave\", handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarAuto,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarScroll = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === \"horizontal\";\n const debounceScrollEnd = useDebounceCallback(() => send(\"SCROLL_END\"), 100);\n const [state, send] = useStateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\"\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\"\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\"\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\"\n }\n });\n React2.useEffect(() => {\n if (state === \"idle\") {\n const hideTimer = window.setTimeout(() => send(\"HIDE\"), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n React2.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n if (viewport) {\n let prevScrollPos = viewport[scrollDirection];\n const handleScroll = () => {\n const scrollPos = viewport[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n send(\"SCROLL\");\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n };\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || state !== \"hidden\", children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": state === \"hidden\" ? \"hidden\" : \"visible\",\n ...scrollbarProps,\n ref: forwardedRef,\n onPointerEnter: composeEventHandlers(props.onPointerEnter, () => send(\"POINTER_ENTER\")),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => send(\"POINTER_LEAVE\"))\n }\n ) });\n});\nvar ScrollAreaScrollbarAuto = React2.forwardRef((props, forwardedRef) => {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React2.useState(false);\n const isHorizontal = props.orientation === \"horizontal\";\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarVisible = React2.forwardRef((props, forwardedRef) => {\n const { orientation = \"vertical\", ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React2.useRef(null);\n const pointerOffsetRef = React2.useRef(0);\n const [sizes, setSizes] = React2.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n const commonProps = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: (thumb) => thumbRef.current = thumb,\n onThumbPointerUp: () => pointerOffsetRef.current = 0,\n onThumbPointerDown: (pointerPos) => pointerOffsetRef.current = pointerPos\n };\n function getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n if (orientation === \"horizontal\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarX,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollLeft;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }\n }\n );\n }\n if (orientation === \"vertical\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarY,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollTop;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }\n }\n );\n }\n return null;\n});\nvar ScrollAreaScrollbarX = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"horizontal\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n bottom: 0,\n left: context.dir === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n right: context.dir === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n [\"--radix-scroll-area-thumb-width\"]: getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight)\n }\n });\n }\n }\n }\n );\n});\nvar ScrollAreaScrollbarY = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"vertical\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n top: 0,\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: \"var(--radix-scroll-area-corner-height)\",\n [\"--radix-scroll-area-thumb-height\"]: getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom)\n }\n });\n }\n }\n }\n );\n});\nvar [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);\nvar ScrollAreaScrollbarImpl = React2.forwardRef((props, forwardedRef) => {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React2.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, (node) => setScrollbar(node));\n const rectRef = React2.useRef(null);\n const prevWebkitUserSelectRef = React2.useRef(\"\");\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n function handleDragScroll(event) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n React2.useEffect(() => {\n const handleWheel = (event) => {\n const element = event.target;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n };\n document.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => document.removeEventListener(\"wheel\", handleWheel, { passive: false });\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n React2.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(\n ScrollbarProvider,\n {\n scope: __scopeScrollArea,\n scrollbar,\n hasThumb,\n onThumbChange: useCallbackRef(onThumbChange),\n onThumbPointerUp: useCallbackRef(onThumbPointerUp),\n onThumbPositionChange: handleThumbPositionChange,\n onThumbPointerDown: useCallbackRef(onThumbPointerDown),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...scrollbarProps,\n ref: composeRefs,\n style: { position: \"absolute\", ...scrollbarProps.style },\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar.getBoundingClientRect();\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = \"none\";\n if (context.viewport) context.viewport.style.scrollBehavior = \"auto\";\n handleDragScroll(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, handleDragScroll),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = \"\";\n rectRef.current = null;\n })\n }\n )\n }\n );\n});\nvar THUMB_NAME = \"ScrollAreaThumb\";\nvar ScrollAreaThumb = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || scrollbarContext.hasThumb, children: /* @__PURE__ */ jsx(ScrollAreaThumbImpl, { ref: forwardedRef, ...thumbProps }) });\n }\n);\nvar ScrollAreaThumbImpl = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(\n forwardedRef,\n (node) => scrollbarContext.onThumbChange(node)\n );\n const removeUnlinkedScrollListenerRef = React2.useRef(void 0);\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = void 0;\n }\n }, 100);\n React2.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\n if (viewport) {\n const handleScroll = () => {\n debounceScrollEnd();\n if (!removeUnlinkedScrollListenerRef.current) {\n const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n removeUnlinkedScrollListenerRef.current = listener;\n onThumbPositionChange();\n }\n };\n onThumbPositionChange();\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": scrollbarContext.hasThumb ? \"visible\" : \"hidden\",\n ...thumbProps,\n ref: composedRef,\n style: {\n width: \"var(--radix-scroll-area-thumb-width)\",\n height: \"var(--radix-scroll-area-thumb-height)\",\n ...style\n },\n onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, (event) => {\n const thumb = event.target;\n const thumbRect = thumb.getBoundingClientRect();\n const x = event.clientX - thumbRect.left;\n const y = event.clientY - thumbRect.top;\n scrollbarContext.onThumbPointerDown({ x, y });\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)\n }\n );\n }\n);\nScrollAreaThumb.displayName = THUMB_NAME;\nvar CORNER_NAME = \"ScrollAreaCorner\";\nvar ScrollAreaCorner = React2.forwardRef(\n (props, forwardedRef) => {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== \"scroll\" && hasBothScrollbarsVisible;\n return hasCorner ? /* @__PURE__ */ jsx(ScrollAreaCornerImpl, { ...props, ref: forwardedRef }) : null;\n }\n);\nScrollAreaCorner.displayName = CORNER_NAME;\nvar ScrollAreaCornerImpl = React2.forwardRef((props, forwardedRef) => {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React2.useState(0);\n const [height, setHeight] = React2.useState(0);\n const hasSize = Boolean(width && height);\n useResizeObserver(context.scrollbarX, () => {\n const height2 = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height2);\n setHeight(height2);\n });\n useResizeObserver(context.scrollbarY, () => {\n const width2 = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width2);\n setWidth(width2);\n });\n return hasSize ? /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...cornerProps,\n ref: forwardedRef,\n style: {\n width,\n height,\n position: \"absolute\",\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: 0,\n ...props.style\n }\n }\n ) : null;\n});\nfunction toInt(value) {\n return value ? parseInt(value, 10) : 0;\n}\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\nfunction getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\nfunction getThumbOffsetFromScroll(scrollPos, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\nvar addUnlinkedScrollListener = (node, handler = () => {\n}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n })();\n return () => window.cancelAnimationFrame(rAF);\n};\nfunction useDebounceCallback(callback, delay) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React2.useRef(0);\n React2.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React2.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\nfunction useResizeObserver(element, onResize) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\nvar Root = ScrollArea;\nvar Viewport = ScrollAreaViewport;\nvar Scrollbar = ScrollAreaScrollbar;\nvar Thumb = ScrollAreaThumb;\nvar Corner = ScrollAreaCorner;\nexport {\n Corner,\n Root,\n ScrollArea,\n ScrollAreaCorner,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n Scrollbar,\n Thumb,\n Viewport,\n createScrollAreaScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SplitLayoutGlass Context\n *\n * Provides state management for compound SplitLayoutGlass component.\n * Handles selection state, mobile detection, and toggle functionality.\n *\n * @module split-layout-context\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n useEffect,\n type FC,\n type ReactNode,\n} from 'react';\n\n// ========================================\n// TYPES\n// ========================================\n\nimport type { IntensityType } from '@/lib/variants/glass-card-variants';\n\nexport type Breakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type MobileMode = 'stack' | 'accordion' | 'drawer';\n\n/**\n * Context value for SplitLayoutGlass compound components\n *\n * API is designed to be consistent with shadcn/ui Sidebar patterns.\n */\nexport interface SplitLayoutContextValue {\n // === STATE ===\n /** Currently selected key for master-detail pattern */\n selectedKey: string | null;\n /** Set selected key */\n setSelectedKey: (key: string | null) => void;\n\n /** Sidebar open state (desktop) */\n isOpen: boolean;\n /** Set sidebar open state */\n setIsOpen: (open: boolean) => void;\n\n /** Mobile drawer/accordion open state */\n isMobileOpen: boolean;\n /** Set mobile open state */\n setMobileOpen: (open: boolean) => void;\n\n // === SHADCN ALIASES ===\n /** Sidebar state: \"expanded\" | \"collapsed\" (shadcn pattern) */\n state: 'expanded' | 'collapsed';\n /** Alias for isOpen (shadcn naming) */\n open: boolean;\n /** Alias for setIsOpen (shadcn naming) */\n setOpen: (open: boolean) => void;\n /** Alias for isMobileOpen (shadcn naming) */\n openMobile: boolean;\n /** Alias for setMobileOpen (shadcn naming) */\n setOpenMobile: (open: boolean) => void;\n /** Alias for toggle (shadcn naming) */\n toggleSidebar: () => void;\n\n // === RESPONSIVE ===\n /** Current viewport is below breakpoint */\n isMobile: boolean;\n\n // === CONFIG ===\n /** Breakpoint for desktop layout */\n breakpoint: Breakpoint;\n /** Mobile layout mode */\n mobileMode: MobileMode;\n /** Glass intensity for panels */\n intensity: IntensityType;\n /** Sticky offset from viewport top */\n stickyOffset: number;\n\n // === ACTIONS ===\n /** Toggle sidebar (desktop) or drawer (mobile) */\n toggle: () => void;\n}\n\n// ========================================\n// CONTEXT\n// ========================================\n\nconst SplitLayoutContext = createContext<SplitLayoutContextValue | null>(null);\n\n/**\n * Hook to access SplitLayout context\n *\n * @throws Error if used outside of SplitLayoutGlass.Provider\n *\n * @example\n * ```tsx\n * function YearCard({ year }) {\n * const { selectedKey, setSelectedKey, isMobile } = useSplitLayout();\n * const isSelected = selectedKey === year.id;\n *\n * return (\n * <button\n * onClick={() => setSelectedKey(year.id)}\n * className={cn('p-3', isSelected && 'bg-primary/10')}\n * >\n * {year.year}\n * </button>\n * );\n * }\n * ```\n */\nexport function useSplitLayout(): SplitLayoutContextValue {\n const context = useContext(SplitLayoutContext);\n if (!context) {\n throw new Error(\n 'useSplitLayout must be used within SplitLayoutGlass.Provider. ' +\n 'Wrap your component tree with <SplitLayoutGlass.Provider>.'\n );\n }\n return context;\n}\n\n/**\n * Optional hook that returns null if outside provider (doesn't throw)\n */\nexport function useSplitLayoutOptional(): SplitLayoutContextValue | null {\n return useContext(SplitLayoutContext);\n}\n\n// ========================================\n// BREAKPOINT MAP\n// ========================================\n\nconst BREAKPOINT_VALUES: Record<Breakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1440,\n '2xl': 1536,\n};\n\n// ========================================\n// PROVIDER\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Provider\n */\nexport interface SplitLayoutProviderProps {\n children: ReactNode;\n\n // === SELECTION STATE ===\n /** Controlled selected key */\n selectedKey?: string | null;\n /** Callback when selected key changes */\n onSelectedKeyChange?: (key: string | null) => void;\n /** Default selected key (uncontrolled) */\n defaultSelectedKey?: string | null;\n\n // === OPEN STATE ===\n /** Controlled open state (desktop) */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state */\n defaultOpen?: boolean;\n\n // === CONFIG ===\n /** Breakpoint for mobile/desktop switch @default \"md\" */\n breakpoint?: Breakpoint;\n /** Mobile layout mode @default \"stack\" */\n mobileMode?: MobileMode;\n /** Glass intensity for panels @default \"medium\" */\n intensity?: IntensityType;\n /** Sticky offset from viewport top @default 24 */\n stickyOffset?: number;\n\n // === PERSISTENCE ===\n /** URL param name for selectedKey persistence */\n urlParamName?: string;\n\n // === KEYBOARD ===\n /** Keyboard shortcut key for toggle (Cmd/Ctrl + key) @default \"b\" */\n keyboardShortcut?: string | false;\n}\n\n/**\n * Provider component for SplitLayoutGlass compound components\n *\n * @example\n * ```tsx\n * <SplitLayoutGlass.Provider\n * defaultSelectedKey=\"2024\"\n * mobileMode=\"accordion\"\n * onSelectedKeyChange={(key) => console.log('Selected:', key)}\n * >\n * <SplitLayoutGlass.Root>\n * ...\n * </SplitLayoutGlass.Root>\n * </SplitLayoutGlass.Provider>\n * ```\n */\nexport const SplitLayoutProvider: FC<SplitLayoutProviderProps> = ({\n children,\n selectedKey: controlledSelectedKey,\n onSelectedKeyChange,\n defaultSelectedKey = null,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = true,\n breakpoint = 'md',\n mobileMode = 'stack',\n intensity = 'medium',\n stickyOffset = 24,\n urlParamName,\n keyboardShortcut = 'b',\n}) => {\n // === SELECTION STATE (controlled/uncontrolled) ===\n const [internalSelectedKey, setInternalSelectedKey] = useState<string | null>(() => {\n // Try to read from URL if urlParamName is provided\n if (urlParamName && typeof window !== 'undefined') {\n const params = new URLSearchParams(window.location.search);\n const urlValue = params.get(urlParamName);\n if (urlValue) return urlValue;\n }\n return defaultSelectedKey;\n });\n\n const isSelectedKeyControlled = controlledSelectedKey !== undefined;\n const selectedKey = isSelectedKeyControlled ? controlledSelectedKey : internalSelectedKey;\n\n const setSelectedKey = useCallback(\n (key: string | null) => {\n if (!isSelectedKeyControlled) {\n setInternalSelectedKey(key);\n }\n onSelectedKeyChange?.(key);\n\n // Update URL if urlParamName is provided\n if (urlParamName && typeof window !== 'undefined') {\n const url = new URL(window.location.href);\n if (key) {\n url.searchParams.set(urlParamName, key);\n } else {\n url.searchParams.delete(urlParamName);\n }\n window.history.replaceState({}, '', url.toString());\n }\n },\n [isSelectedKeyControlled, onSelectedKeyChange, urlParamName]\n );\n\n // === OPEN STATE (controlled/uncontrolled) ===\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isOpenControlled = controlledOpen !== undefined;\n const isOpen = isOpenControlled ? controlledOpen : internalOpen;\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (!isOpenControlled) {\n setInternalOpen(open);\n }\n onOpenChange?.(open);\n },\n [isOpenControlled, onOpenChange]\n );\n\n // === MOBILE OPEN STATE ===\n const [isMobileOpen, setMobileOpen] = useState(false);\n\n // === RESPONSIVE DETECTION ===\n const [isMobile, setIsMobile] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.innerWidth < BREAKPOINT_VALUES[breakpoint];\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const checkMobile = () => {\n setIsMobile(window.innerWidth < BREAKPOINT_VALUES[breakpoint]);\n };\n\n // Check on mount\n checkMobile();\n\n // Listen for resize\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, [breakpoint]);\n\n // === TOGGLE ACTION ===\n const toggle = useCallback(() => {\n if (isMobile) {\n setMobileOpen((prev) => !prev);\n } else {\n setIsOpen(!isOpen);\n }\n }, [isMobile, isOpen, setIsOpen]);\n\n // === KEYBOARD NAVIGATION ===\n useEffect(() => {\n if (!keyboardShortcut) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n // Escape - close mobile drawer/accordion\n if (e.key === 'Escape' && isMobile && isMobileOpen) {\n e.preventDefault();\n setMobileOpen(false);\n return;\n }\n\n // Cmd/Ctrl + key - toggle sidebar\n if (e.key === keyboardShortcut && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n toggle();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [keyboardShortcut, isMobile, isMobileOpen, toggle]);\n\n // === CONTEXT VALUE ===\n const value = useMemo<SplitLayoutContextValue>(\n () => ({\n // Original API\n selectedKey,\n setSelectedKey,\n isOpen,\n setIsOpen,\n isMobileOpen,\n setMobileOpen,\n isMobile,\n breakpoint,\n mobileMode,\n intensity,\n stickyOffset,\n toggle,\n\n // shadcn aliases\n state: isOpen ? 'expanded' : 'collapsed',\n open: isOpen,\n setOpen: setIsOpen,\n openMobile: isMobileOpen,\n setOpenMobile: setMobileOpen,\n toggleSidebar: toggle,\n }),\n [\n selectedKey,\n setSelectedKey,\n isOpen,\n setIsOpen,\n isMobileOpen,\n isMobile,\n breakpoint,\n mobileMode,\n intensity,\n stickyOffset,\n toggle,\n ]\n );\n\n return <SplitLayoutContext.Provider value={value}>{children}</SplitLayoutContext.Provider>;\n};\n\nSplitLayoutProvider.displayName = 'SplitLayoutGlass.Provider';\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SplitLayoutGlass Accordion Components\n *\n * Mobile-specific components that render content in accordion pattern.\n * Details expand below the selected item instead of showing in a separate panel.\n *\n * @module split-layout-accordion\n */\n\nimport { forwardRef, type ReactNode, useId, useRef, useEffect, useCallback, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { GlassCard } from '@/components/glass/ui/glass-card';\nimport { useSplitLayout, useSplitLayoutOptional } from './split-layout-context';\n\n// ========================================\n// ACCORDION ROOT\n// ========================================\n\n/**\n * Props for SplitLayoutAccordion.Root component\n * Container for accordion items in mobile view\n */\nexport interface SplitLayoutAccordionRootProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * ARIA label for the accordion region\n * @default \"Content accordion\"\n */\n label?: string;\n}\n\nconst SplitLayoutAccordionRoot = forwardRef<HTMLDivElement, SplitLayoutAccordionRootProps>(\n ({ children, label = 'Content accordion', className, ...props }, ref) => {\n const context = useSplitLayoutOptional();\n const intensity = context?.intensity ?? 'medium';\n\n return (\n <GlassCard\n asChild\n intensity={intensity}\n padding=\"none\"\n className={cn('divide-y divide-white/10', className)}\n >\n <div ref={ref} role=\"region\" aria-label={label} data-split-accordion=\"\" {...props}>\n {children}\n </div>\n </GlassCard>\n );\n }\n);\n\nSplitLayoutAccordionRoot.displayName = 'SplitLayoutAccordion.Root';\n\n// ========================================\n// ACCORDION ITEM\n// ========================================\n\n/**\n * Props for SplitLayoutAccordion.Item component\n * A single accordion item with trigger and collapsible content\n */\nexport interface SplitLayoutAccordionItemProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /**\n * Unique key for this item (used for selection)\n */\n itemKey: string;\n /**\n * Content shown in the trigger/header area\n */\n trigger: ReactNode;\n /**\n * Content shown when expanded (details)\n */\n children: ReactNode;\n /**\n * Disable this item\n * @default false\n */\n disabled?: boolean;\n}\n\nconst SplitLayoutAccordionItem = forwardRef<HTMLDivElement, SplitLayoutAccordionItemProps>(\n ({ itemKey, trigger, children, disabled = false, className, ...props }, ref) => {\n const { selectedKey, setSelectedKey } = useSplitLayout();\n const isExpanded = selectedKey === itemKey;\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number | null>(null);\n const triggerId = useId();\n const contentId = useId();\n\n // Measure content height for smooth animation\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [children, isExpanded]);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setSelectedKey(isExpanded ? null : itemKey);\n }, [disabled, isExpanded, itemKey, setSelectedKey]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown': {\n e.preventDefault();\n // Focus next item trigger\n const next = (e.currentTarget as HTMLElement).parentElement?.nextElementSibling;\n const nextTrigger = next?.querySelector('[data-accordion-trigger]') as HTMLElement;\n nextTrigger?.focus();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n // Focus previous item trigger\n const prev = (e.currentTarget as HTMLElement).parentElement?.previousElementSibling;\n const prevTrigger = prev?.querySelector('[data-accordion-trigger]') as HTMLElement;\n prevTrigger?.focus();\n break;\n }\n case 'Home': {\n e.preventDefault();\n // Focus first item trigger\n const first = (e.currentTarget as HTMLElement)\n .closest('[data-split-accordion]')\n ?.querySelector('[data-accordion-trigger]') as HTMLElement;\n first?.focus();\n break;\n }\n case 'End': {\n e.preventDefault();\n // Focus last item trigger\n const triggers = (e.currentTarget as HTMLElement)\n .closest('[data-split-accordion]')\n ?.querySelectorAll('[data-accordion-trigger]');\n const last = triggers?.[triggers.length - 1] as HTMLElement;\n last?.focus();\n break;\n }\n }\n },\n [disabled, handleToggle]\n );\n\n return (\n <div\n ref={ref}\n data-accordion-item=\"\"\n data-state={isExpanded ? 'open' : 'closed'}\n data-disabled={disabled || undefined}\n className={cn('overflow-hidden', disabled && 'opacity-50 cursor-not-allowed', className)}\n {...props}\n >\n {/* Trigger/Header */}\n <button\n type=\"button\"\n id={triggerId}\n data-accordion-trigger=\"\"\n aria-expanded={isExpanded}\n aria-controls={contentId}\n aria-disabled={disabled}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex w-full items-center justify-between gap-4',\n 'p-4 text-left',\n 'transition-colors duration-200',\n 'hover:bg-white/5 focus-visible:bg-white/5',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-white/20 focus-visible:ring-inset',\n disabled && 'pointer-events-none'\n )}\n >\n <div className=\"flex-1\">{trigger}</div>\n <ChevronDown\n className={cn(\n 'h-4 w-4 shrink-0 text-white/60',\n 'transition-transform duration-300 ease-out',\n isExpanded && 'rotate-180'\n )}\n />\n </button>\n\n {/* Content */}\n <div\n id={contentId}\n ref={contentRef}\n role=\"region\"\n aria-labelledby={triggerId}\n data-accordion-content=\"\"\n data-state={isExpanded ? 'open' : 'closed'}\n className={cn('overflow-hidden', 'transition-[max-height,opacity] duration-300 ease-out')}\n style={{\n maxHeight: isExpanded ? (contentHeight ?? 'auto') : 0,\n opacity: isExpanded ? 1 : 0,\n }}\n >\n <div className=\"p-4 pt-0 border-t border-white/5\">{children}</div>\n </div>\n </div>\n );\n }\n);\n\nSplitLayoutAccordionItem.displayName = 'SplitLayoutAccordion.Item';\n\n// ========================================\n// COMPOUND EXPORT\n// ========================================\n\n/**\n * SplitLayoutAccordion compound component for mobile accordion view\n *\n * @example\n * ```tsx\n * // Use with mobileMode=\"accordion\" in Provider\n * <SplitLayoutGlass.Provider mobileMode=\"accordion\">\n * {isMobile ? (\n * <SplitLayoutAccordion.Root>\n * {years.map((year) => (\n * <SplitLayoutAccordion.Item\n * key={year.id}\n * itemKey={year.id}\n * trigger={<YearTitle year={year} />}\n * >\n * <YearDetails year={year} />\n * </SplitLayoutAccordion.Item>\n * ))}\n * </SplitLayoutAccordion.Root>\n * ) : (\n * <SplitLayoutGlass.Root>...</SplitLayoutGlass.Root>\n * )}\n * </SplitLayoutGlass.Provider>\n * ```\n */\nexport const SplitLayoutAccordion = {\n Root: SplitLayoutAccordionRoot,\n Item: SplitLayoutAccordionItem,\n};\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SplitLayoutGlass Component (Compound API only)\n *\n * A responsive two-column layout with sticky scroll behavior and glassmorphism styling.\n * Features independent scrolling in each panel after sticky positioning activates.\n *\n * @pattern MDN, GitHub Docs, Linear, shadcn Sidebar\n *\n * @example\n * ```tsx\n * <SplitLayoutGlass.Provider defaultSelectedKey=\"2024\">\n * <SplitLayoutGlass.Root ratio={{ sidebar: 1, main: 2 }}>\n * <SplitLayoutGlass.Sidebar>\n * <SplitLayoutGlass.SidebarHeader>Header</SplitLayoutGlass.SidebarHeader>\n * <SplitLayoutGlass.SidebarContent>Content</SplitLayoutGlass.SidebarContent>\n * </SplitLayoutGlass.Sidebar>\n * <SplitLayoutGlass.Main>\n * <SplitLayoutGlass.MainContent>Content</SplitLayoutGlass.MainContent>\n * </SplitLayoutGlass.Main>\n * </SplitLayoutGlass.Root>\n * </SplitLayoutGlass.Provider>\n * ```\n *\n * @since v2.2.0 - Legacy props API removed, Compound API only\n * @module split-layout-glass\n */\n\nimport { forwardRef, type CSSProperties, type ReactNode } from 'react';\nimport { Menu, X, PanelLeftClose, PanelLeftOpen } from 'lucide-react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\nimport { GlassCard } from '@/components/glass/ui/glass-card';\nimport { ButtonGlass } from '@/components/glass/ui/button-glass';\nimport { ScrollArea } from '@/components/ui/scroll-area';\n\n// Import context\nimport {\n SplitLayoutProvider,\n useSplitLayout,\n useSplitLayoutOptional,\n type SplitLayoutProviderProps,\n type SplitLayoutContextValue,\n type Breakpoint,\n type MobileMode,\n} from './split-layout-context';\n\nimport '@/glass-theme.css';\n\n// ========================================\n// GRID STYLES HOOK\n// ========================================\n\ninterface GridStylesConfig {\n ratio?: { sidebar: number; main: number };\n minSidebarWidth?: string;\n maxSidebarWidth?: string;\n gap?: number | { mobile?: number; desktop?: number };\n stickyOffset?: number;\n}\n\nfunction useGridStyles(config: GridStylesConfig) {\n const {\n ratio = { sidebar: 1, main: 2 },\n minSidebarWidth = '280px',\n maxSidebarWidth,\n gap = { mobile: 16, desktop: 24 },\n stickyOffset = 24,\n } = config;\n\n const gapMobile = typeof gap === 'number' ? gap : (gap.mobile ?? 16);\n const gapDesktop = typeof gap === 'number' ? gap : (gap.desktop ?? 24);\n\n const gridTemplate = maxSidebarWidth\n ? `minmax(${minSidebarWidth}, ${maxSidebarWidth}) ${ratio.main}fr`\n : `minmax(${minSidebarWidth}, ${ratio.sidebar}fr) ${ratio.main}fr`;\n\n const cssVars = {\n '--grid-template': gridTemplate,\n '--sticky-offset': `${stickyOffset}px`,\n '--sticky-max-height': `calc(100vh - calc(${stickyOffset}px * 2))`,\n '--gap-mobile': `${gapMobile}px`,\n '--gap-desktop': `${gapDesktop}px`,\n } as CSSProperties;\n\n return { cssVars };\n}\n\n// ========================================\n// ROOT COMPONENT\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Root component\n */\nexport interface SplitLayoutRootProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * Sidebar to main ratio in fr units\n * @default { sidebar: 1, main: 2 } (33% / 67%)\n * @example { sidebar: 1, main: 3 } = 25% / 75%\n */\n ratio?: { sidebar: number; main: number };\n /**\n * Minimum sidebar width (CSS value)\n * Prevents sidebar from shrinking below this on tablet\n * @default \"280px\"\n */\n minSidebarWidth?: string;\n /**\n * Maximum sidebar width (CSS value)\n * @example \"400px\" - sidebar won't exceed 400px\n */\n maxSidebarWidth?: string;\n /**\n * Gap between panels\n * @default { mobile: 16, desktop: 24 }\n */\n gap?: number | { mobile?: number; desktop?: number };\n /**\n * Breakpoint for desktop layout (overrides Provider's breakpoint)\n * @default \"md\" (768px)\n */\n breakpoint?: Breakpoint;\n /**\n * Mobile layout mode (below breakpoint)\n * - \"stack\": sidebar above main\n * - \"main-only\": hide sidebar\n * - \"sidebar-only\": hide main\n * @default \"stack\"\n */\n mobileLayout?: 'stack' | 'main-only' | 'sidebar-only';\n}\n\nconst SplitLayoutRoot = forwardRef<HTMLDivElement, SplitLayoutRootProps>(\n (\n {\n children,\n ratio = { sidebar: 1, main: 2 },\n minSidebarWidth = '300px',\n maxSidebarWidth,\n gap = { mobile: 16, desktop: 24 },\n breakpoint: breakpointProp,\n mobileLayout = 'stack',\n className,\n ...props\n },\n ref\n ) => {\n const context = useSplitLayoutOptional();\n const breakpoint = breakpointProp ?? context?.breakpoint ?? 'md';\n const stickyOffset = context?.stickyOffset ?? 24;\n\n const { cssVars } = useGridStyles({\n ratio,\n minSidebarWidth,\n maxSidebarWidth,\n gap,\n stickyOffset,\n });\n\n const bp = breakpoint;\n\n // Build gap classes based on breakpoint\n const gapClasses = {\n sm: 'gap-[var(--gap-mobile)] sm:gap-[var(--gap-desktop)]',\n md: 'gap-[var(--gap-mobile)] md:gap-[var(--gap-desktop)]',\n lg: 'gap-[var(--gap-mobile)] lg:gap-[var(--gap-desktop)]',\n xl: 'gap-[var(--gap-mobile)] xl:gap-[var(--gap-desktop)]',\n '2xl': 'gap-[var(--gap-mobile)] 2xl:gap-[var(--gap-desktop)]',\n };\n\n const gridClasses = {\n sm: 'sm:grid-cols-(--grid-template)',\n md: 'md:grid-cols-(--grid-template)',\n lg: 'lg:grid-cols-(--grid-template)',\n xl: 'xl:grid-cols-(--grid-template)',\n '2xl': '2xl:grid-cols-(--grid-template)',\n };\n\n return (\n <div\n ref={ref}\n data-split-layout-root=\"\"\n data-state={context?.state ?? 'expanded'}\n className={cn(\n 'grid',\n // Align items to start so each column has height based on content\n 'items-start',\n mobileLayout === 'stack' && 'grid-cols-1',\n mobileLayout === 'main-only' && 'grid-cols-1 *:data-split-sidebar:hidden',\n mobileLayout === 'sidebar-only' && 'grid-cols-1 *:data-split-main:hidden',\n gridClasses[bp],\n gapClasses[bp],\n className\n )}\n style={cssVars}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSplitLayoutRoot.displayName = 'SplitLayoutGlass.Root';\n\n// ========================================\n// SIDEBAR COMPONENTS\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Sidebar component\n */\nexport interface SplitLayoutSidebarProps extends React.HTMLAttributes<HTMLElement> {\n children: ReactNode;\n /**\n * ARIA label for accessibility\n * @default \"Sidebar navigation\"\n */\n label?: string;\n}\n\nconst SplitLayoutSidebar = forwardRef<HTMLElement, SplitLayoutSidebarProps>(\n ({ children, label = 'Sidebar navigation', className, ...props }, ref) => {\n const context = useSplitLayoutOptional();\n const breakpoint = context?.breakpoint ?? 'md';\n const intensity = context?.intensity ?? 'medium';\n const bp = breakpoint;\n\n return (\n <GlassCard\n asChild\n intensity={intensity}\n padding=\"none\"\n className={cn(\n 'overflow-hidden rounded-xl',\n `${bp}:sticky`,\n `${bp}:top-[var(--sticky-offset)]`,\n `${bp}:max-h-[var(--sticky-max-height)]`,\n `${bp}:flex`,\n `${bp}:flex-col`,\n className\n )}\n >\n <aside ref={ref} data-split-sidebar=\"\" aria-label={label} {...props}>\n {children}\n </aside>\n </GlassCard>\n );\n }\n);\n\nSplitLayoutSidebar.displayName = 'SplitLayoutGlass.Sidebar';\n\n/**\n * Props for SplitLayoutGlass.SidebarHeader component\n * Header stays pinned at top when sidebar content scrolls\n */\nexport interface SplitLayoutSidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst SplitLayoutSidebarHeader = forwardRef<HTMLDivElement, SplitLayoutSidebarHeaderProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n data-split-sidebar-header=\"\"\n className={cn('shrink-0 p-4 border-b border-white/10', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nSplitLayoutSidebarHeader.displayName = 'SplitLayoutGlass.SidebarHeader';\n\n/**\n * Props for SplitLayoutGlass.SidebarContent component\n * Scrollable area for sidebar items\n */\nexport interface SplitLayoutSidebarContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * Auto-wrap in ScrollArea for independent scrolling\n * @default true\n */\n scrollable?: boolean;\n}\n\nconst SplitLayoutSidebarContent = forwardRef<HTMLDivElement, SplitLayoutSidebarContentProps>(\n ({ children, scrollable = true, className, ...props }, ref) => {\n if (scrollable) {\n // Extract only div-compatible props (ScrollArea doesn't accept all HTML div props)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { dir, ...divProps } = props;\n return (\n <ScrollArea\n ref={ref as React.Ref<HTMLDivElement>}\n data-split-sidebar-content=\"\"\n className={cn('flex-1 min-h-0', className)}\n {...divProps}\n >\n <div className=\"p-4\">{children}</div>\n </ScrollArea>\n );\n }\n\n return (\n <div\n ref={ref}\n data-split-sidebar-content=\"\"\n className={cn('flex-1 min-h-0 overflow-auto p-4', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSplitLayoutSidebarContent.displayName = 'SplitLayoutGlass.SidebarContent';\n\n/**\n * Props for SplitLayoutGlass.SidebarFooter component\n * Footer stays pinned at bottom when sidebar content scrolls\n */\nexport interface SplitLayoutSidebarFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst SplitLayoutSidebarFooter = forwardRef<HTMLDivElement, SplitLayoutSidebarFooterProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n data-split-sidebar-footer=\"\"\n className={cn('shrink-0 p-4 border-t border-white/10', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nSplitLayoutSidebarFooter.displayName = 'SplitLayoutGlass.SidebarFooter';\n\n// ========================================\n// MAIN COMPONENTS\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Main component\n */\nexport interface SplitLayoutMainProps extends React.HTMLAttributes<HTMLElement> {\n children: ReactNode;\n /**\n * ARIA label for accessibility\n * @default \"Main content\"\n */\n label?: string;\n}\n\nconst SplitLayoutMain = forwardRef<HTMLElement, SplitLayoutMainProps>(\n ({ children, label = 'Main content', className, ...props }, ref) => {\n const context = useSplitLayoutOptional();\n const breakpoint = context?.breakpoint ?? 'md';\n const intensity = context?.intensity ?? 'medium';\n const bp = breakpoint;\n\n return (\n <GlassCard\n asChild\n intensity={intensity}\n padding=\"none\"\n className={cn(\n 'overflow-hidden rounded-xl',\n `${bp}:sticky`,\n `${bp}:top-[var(--sticky-offset)]`,\n `${bp}:max-h-[var(--sticky-max-height)]`,\n `${bp}:flex`,\n `${bp}:flex-col`,\n className\n )}\n >\n <main ref={ref} data-split-main=\"\" aria-label={label} {...props}>\n {children}\n </main>\n </GlassCard>\n );\n }\n);\n\nSplitLayoutMain.displayName = 'SplitLayoutGlass.Main';\n\n/**\n * Props for SplitLayoutGlass.MainHeader component\n * Header stays pinned at top when main content scrolls\n */\nexport interface SplitLayoutMainHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst SplitLayoutMainHeader = forwardRef<HTMLDivElement, SplitLayoutMainHeaderProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n data-split-main-header=\"\"\n className={cn('shrink-0 p-6 border-b border-white/10', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nSplitLayoutMainHeader.displayName = 'SplitLayoutGlass.MainHeader';\n\n/**\n * Props for SplitLayoutGlass.MainContent component\n * Scrollable area for main content\n */\nexport interface SplitLayoutMainContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * Auto-wrap in ScrollArea for independent scrolling\n * @default true\n */\n scrollable?: boolean;\n}\n\nconst SplitLayoutMainContent = forwardRef<HTMLDivElement, SplitLayoutMainContentProps>(\n ({ children, scrollable = true, className, ...props }, ref) => {\n if (scrollable) {\n // Extract only div-compatible props (ScrollArea doesn't accept all HTML div props)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { dir, ...divProps } = props;\n return (\n <ScrollArea\n ref={ref as React.Ref<HTMLDivElement>}\n data-split-main-content=\"\"\n className={cn('flex-1 min-h-0', className)}\n {...divProps}\n >\n <div className=\"p-6\">{children}</div>\n </ScrollArea>\n );\n }\n\n return (\n <div\n ref={ref}\n data-split-main-content=\"\"\n className={cn('flex-1 min-h-0 overflow-auto p-6', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSplitLayoutMainContent.displayName = 'SplitLayoutGlass.MainContent';\n\n/**\n * Props for SplitLayoutGlass.MainFooter component\n * Footer stays pinned at bottom when main content scrolls\n */\nexport interface SplitLayoutMainFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst SplitLayoutMainFooter = forwardRef<HTMLDivElement, SplitLayoutMainFooterProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n data-split-main-footer=\"\"\n className={cn('shrink-0 p-6 border-t border-white/10', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nSplitLayoutMainFooter.displayName = 'SplitLayoutGlass.MainFooter';\n\n// ========================================\n// TRIGGER COMPONENT\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Trigger component\n * Toggle button for sidebar collapse/expand\n */\nexport interface SplitLayoutTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Use Radix Slot for custom trigger elements\n * @default false\n */\n asChild?: boolean;\n /**\n * Show on desktop (hidden by default)\n * @default false\n */\n showOnDesktop?: boolean;\n /**\n * Icon variant\n * - \"menu\": hamburger/X icons\n * - \"panel\": panel collapse/expand icons\n * @default \"menu\"\n */\n variant?: 'menu' | 'panel';\n}\n\nconst SplitLayoutTrigger = forwardRef<HTMLButtonElement, SplitLayoutTriggerProps>(\n (\n { asChild = false, showOnDesktop = false, variant = 'menu', className, children, ...props },\n ref\n ) => {\n const { toggle, isOpen, isMobileOpen, isMobile, breakpoint } = useSplitLayout();\n\n const currentOpen = isMobile ? isMobileOpen : isOpen;\n\n const Icon =\n variant === 'menu' ? (currentOpen ? X : Menu) : currentOpen ? PanelLeftClose : PanelLeftOpen;\n\n const bp = breakpoint;\n const visibilityClass = showOnDesktop ? '' : `${bp}:hidden`;\n\n if (asChild) {\n return (\n <Slot\n ref={ref}\n onClick={toggle}\n aria-label={currentOpen ? 'Close sidebar' : 'Open sidebar'}\n aria-expanded={currentOpen}\n data-state={currentOpen ? 'open' : 'closed'}\n className={cn(visibilityClass, className)}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <ButtonGlass\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n onClick={toggle}\n aria-label={currentOpen ? 'Close sidebar' : 'Open sidebar'}\n aria-expanded={currentOpen}\n data-state={currentOpen ? 'open' : 'closed'}\n className={cn(visibilityClass, className)}\n {...props}\n >\n {children ?? <Icon className=\"h-5 w-5\" />}\n </ButtonGlass>\n );\n }\n);\n\nSplitLayoutTrigger.displayName = 'SplitLayoutGlass.Trigger';\n\n// ========================================\n// COMPOUND COMPONENT EXPORT\n// ========================================\n\n/**\n * SplitLayoutGlass compound component\n *\n * @example\n * ```tsx\n * <SplitLayoutGlass.Provider>\n * <SplitLayoutGlass.Root>\n * <SplitLayoutGlass.Sidebar>...</SplitLayoutGlass.Sidebar>\n * <SplitLayoutGlass.Main>...</SplitLayoutGlass.Main>\n * </SplitLayoutGlass.Root>\n * </SplitLayoutGlass.Provider>\n * ```\n */\nexport const SplitLayoutGlass = {\n Provider: SplitLayoutProvider,\n Root: SplitLayoutRoot,\n Sidebar: SplitLayoutSidebar,\n SidebarHeader: SplitLayoutSidebarHeader,\n SidebarContent: SplitLayoutSidebarContent,\n SidebarFooter: SplitLayoutSidebarFooter,\n Main: SplitLayoutMain,\n MainHeader: SplitLayoutMainHeader,\n MainContent: SplitLayoutMainContent,\n MainFooter: SplitLayoutMainFooter,\n Trigger: SplitLayoutTrigger,\n};\n\n// ========================================\n// ACCORDION EXPORT (re-export from separate file)\n// ========================================\n\nexport { SplitLayoutAccordion } from './split-layout-accordion';\nexport type {\n SplitLayoutAccordionRootProps,\n SplitLayoutAccordionItemProps,\n} from './split-layout-accordion';\n\n// ========================================\n// TYPE EXPORTS\n// ========================================\n\nexport type { SplitLayoutProviderProps, SplitLayoutContextValue, Breakpoint, MobileMode };\n\nexport { useSplitLayout, useSplitLayoutOptional };\n","/* eslint-disable react-refresh/only-export-components */\n// ========================================\n// CHART COMPONENTS (shadcn/ui pattern)\n// Base chart utilities following shadcn/ui Charts API\n// ========================================\n\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport { cn } from '@/lib/utils';\n\n// ========================================\n// CHART CONFIG TYPE\n// ========================================\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: { light: string; dark: string } }\n );\n};\n\n// ========================================\n// CHART CONTEXT\n// ========================================\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\n// ========================================\n// CHART CONTAINER\n// ========================================\n\ninterface ChartContainerProps\n extends React.ComponentProps<'div'>, Pick<ChartContextProps, 'config'> {\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n}\n\nconst ChartContainer = React.forwardRef<HTMLDivElement, ChartContainerProps>(\n ({ id, className, children, config, ...props }, ref) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-[var(--text-muted)] [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-[var(--glass-border)] [&_.recharts-curve.recharts-tooltip-cursor]:stroke-[var(--glass-border)] [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-[var(--glass-border)] [&_.recharts-radial-bar-background-sector]:fill-[var(--glass-frost-5)] [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-[var(--glass-frost-10)] [&_.recharts-reference-line_[stroke='#ccc']]:stroke-[var(--glass-border)] [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>{children}</RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n }\n);\nChartContainer.displayName = 'ChartContainer';\n\n// ========================================\n// CHART STYLE (CSS Variables injection)\n// ========================================\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, itemConfig]) => itemConfig.color || itemConfig.theme\n );\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: `\n[data-chart=\"${id}\"] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.color || itemConfig.theme?.light;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .filter(Boolean)\n .join('\\n')}\n}\n\n[data-theme=\"glass\"] [data-chart=\"${id}\"],\n.dark [data-chart=\"${id}\"] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.theme?.dark || itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .filter(Boolean)\n .join('\\n')}\n}\n`,\n }}\n />\n );\n};\n\n// ========================================\n// CHART TOOLTIP\n// ========================================\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\ninterface TooltipPayloadItem {\n dataKey?: string | number;\n name?: string;\n value?: number;\n color?: string;\n payload?: Record<string, unknown>;\n fill?: string;\n type?: string;\n}\n\ninterface ChartTooltipContentProps {\n active?: boolean;\n payload?: TooltipPayloadItem[];\n label?: string;\n className?: string;\n labelClassName?: string;\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: 'line' | 'dot' | 'dashed';\n nameKey?: string;\n labelKey?: string;\n labelFormatter?: (label: string, payload: TooltipPayloadItem[]) => React.ReactNode;\n valueFormatter?: (value: number) => string;\n}\n\nconst ChartTooltipContent = React.forwardRef<HTMLDivElement, ChartTooltipContentProps>(\n (\n {\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n nameKey,\n labelKey,\n valueFormatter,\n },\n ref\n ) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === 'string'\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter && typeof label === 'string') {\n return (\n <div className={cn('font-medium', labelClassName)}>{labelFormatter(label, payload)}</div>\n );\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-[var(--glass-border)] bg-[var(--glass-bg)] px-2.5 py-1.5 text-xs shadow-xl backdrop-blur-md',\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload.map((item: TooltipPayloadItem, index: number) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = item.fill || item.color;\n\n return (\n <div\n key={`${item.dataKey}-${index}`}\n className={cn(\n 'flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-[var(--text-muted)]',\n indicator === 'dot' && 'items-center'\n )}\n >\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n 'shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]',\n {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n }\n )}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center'\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-[var(--text-muted)]\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value !== undefined && (\n <span className=\"font-mono font-medium tabular-nums text-[var(--text-primary)]\">\n {valueFormatter ? valueFormatter(item.value) : item.value.toLocaleString()}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\nChartTooltipContent.displayName = 'ChartTooltipContent';\n\n// ========================================\n// CHART LEGEND\n// ========================================\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\ninterface LegendPayloadItem {\n value?: string;\n dataKey?: string | number;\n color?: string;\n}\n\ninterface ChartLegendContentProps extends React.ComponentProps<'div'> {\n payload?: LegendPayloadItem[];\n verticalAlign?: 'top' | 'bottom';\n hideIcon?: boolean;\n nameKey?: string;\n}\n\nconst ChartLegendContent = React.forwardRef<HTMLDivElement, ChartLegendContentProps>(\n ({ className, hideIcon = false, payload, verticalAlign = 'bottom', nameKey }, ref) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-center gap-4',\n verticalAlign === 'top' ? 'pb-3' : 'pt-3',\n className\n )}\n >\n {payload.map((item: LegendPayloadItem) => {\n const key = `${nameKey || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn(\n 'flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-[var(--text-muted)]'\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n }\n);\nChartLegendContent.displayName = 'ChartLegendContent';\n\n// ========================================\n// HELPER FUNCTIONS\n// ========================================\n\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (key in config) {\n return config[key];\n }\n\n if (payloadPayload && key in payloadPayload) {\n configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key];\n}\n\n// ========================================\n// EXPORTS\n// ========================================\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n useChart,\n};\n","/**\n * DropdownGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type DropdownAlign = 'left' | 'right';\n\nexport const dropdownAlign = cva('absolute mt-2 min-w-[160px] md:min-w-[200px] rounded-2xl py-1.5 md:py-2', {\n variants: {\n align: {\n left: 'left-0',\n right: 'right-0',\n },\n },\n defaultVariants: {\n align: 'left',\n },\n});\n","/**\n * TooltipGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\nexport const tooltipPositions = cva(\n 'absolute z-50 px-2 py-1 md:px-3 md:py-1.5 rounded-lg text-[10px] md:text-xs font-medium whitespace-nowrap transition-opacity duration-200',\n {\n variants: {\n position: {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n },\n },\n defaultVariants: {\n position: 'top',\n },\n }\n);\n","/**\n * Alert CVA Variants (shadcn/ui)\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport const alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n","/**\n * Badge CVA Variants (shadcn/ui)\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport const badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n","/**\n * Button CVA Variants (shadcn/ui)\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n"],"x_google_ignoreList":[6,7,8,9,10,11],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["StepperRoot: FC<StepperRootProps>","indicatorStyles: CSSProperties","connectorStyles: CSSProperties","labelStyles: CSSProperties","descriptionStyles: CSSProperties","StepperContent: FC<StepperContentProps>","createContextScope","React","composeContextScopes","Primitive","Slot","React","createContextScope","React","composeContextScopes","Primitive","Slot","React","createContextScope","React","Primitive","ITEM_NAME","useId","Root","createContextScope","useRovingFocusGroupScope","ToggleGroupContext","RovingFocusGroup.Root","Primitive","ITEM_NAME","RovingFocusGroup.Item","Root2","Item2","SidebarProvider: FC<SidebarProviderProps>","menuButtonSizeClasses: Record<SidebarMenuButtonSize, string>","React","Primitive","Root","Primitive","Slot","React","createContextScope","React","composeContextScopes","React","createContextScope","ScrollArea","React2","Primitive","Root","createContextScope","React","composeContextScopes","Primitive","Slot","React","createContextScope","React","useId","Primitive","getState","React","Slot","React","React","createContextScope2","React2","RovingFocusGroup.Root","Primitive2","useComposedRefs2","RovingFocusGroup.Item","composeEventHandlers2","_extends","ownKeys","r","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","r","BREAKPOINT_VALUES: Record<Breakpoint, number>","SplitLayoutProvider: FC<SplitLayoutProviderProps>","configLabelKey: string"],"sources":["../src/lib/variants/stepper-glass-variants.ts","../src/components/glass/ui/stepper-glass.tsx","../node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../node_modules/@radix-ui/react-toggle-group/dist/index.mjs","../src/components/glass/ui/toggle-group-glass.tsx","../src/components/glass/ui/sidebar-glass/sidebar-context.tsx","../src/components/glass/ui/sidebar-glass/sidebar-glass.tsx","../src/components/glass/ui/sidebar-glass/sidebar-menu.tsx","../src/components/glass/ui/sidebar-glass/index.ts","../node_modules/@radix-ui/react-separator/dist/index.mjs","../src/components/glass/ui/separator-glass.tsx","../node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-scroll-area/dist/index.mjs","../src/components/glass/ui/scroll-area-glass.tsx","../node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-collapsible/dist/index.mjs","../src/components/glass/ui/collapsible-glass.tsx","../node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-radio-group/dist/index.mjs","../src/components/glass/ui/radio-group-glass.tsx","../src/components/glass/ui/sheet-glass.tsx","../node_modules/recharts/es6/component/DefaultLegendContent.js","../node_modules/recharts/es6/context/legendPayloadContext.js","../node_modules/recharts/es6/component/Legend.js","../src/components/ui/scroll-area.tsx","../src/components/glass/composite/split-layout-glass/split-layout-context.tsx","../src/components/glass/composite/split-layout-glass/split-layout-accordion.tsx","../src/components/glass/composite/split-layout-glass/split-layout-glass.tsx","../src/components/ui/chart.tsx","../src/lib/variants/dropdown-glass-variants.ts","../src/lib/variants/tooltip-glass-variants.ts","../src/lib/variants/alert-variants.ts","../src/lib/variants/badge-variants.ts","../src/lib/variants/button-variants.ts"],"sourcesContent":["/**\n * StepperGlass CVA Variants\n *\n * Type-safe variant definitions for the StepperGlass compound component.\n * Extracted for Fast Refresh compatibility and reusability.\n *\n * @module stepper-glass-variants\n */\n\nimport { cva } from 'class-variance-authority';\n\n// ========================================\n// TYPE DEFINITIONS\n// ========================================\n\nexport type StepperOrientation = 'horizontal' | 'vertical';\nexport type StepperVariant = 'numbered' | 'icon' | 'dots';\nexport type StepperSize = 'sm' | 'md' | 'lg';\nexport type StepStatus = 'pending' | 'active' | 'completed' | 'disabled';\n\n// ========================================\n// ROOT VARIANTS\n// ========================================\n\nexport const stepperRootVariants = cva('flex w-full', {\n variants: {\n orientation: {\n horizontal: 'flex-col',\n vertical: 'flex-col',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// LIST VARIANTS\n// ========================================\n\nexport const stepperListVariants = cva('flex', {\n variants: {\n orientation: {\n horizontal: 'flex-row items-center w-full',\n vertical: 'flex-col gap-0',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// STEP CONTAINER VARIANTS\n// ========================================\n\nexport const stepperStepContainerVariants = cva('relative flex transition-all duration-300', {\n variants: {\n orientation: {\n horizontal: 'flex-col items-center flex-1',\n vertical: 'flex-row items-start gap-3',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// STEP INDICATOR VARIANTS\n// ========================================\n\nexport const stepperIndicatorVariants = cva(\n 'relative flex items-center justify-center rounded-full font-medium transition-all duration-300 shrink-0',\n {\n variants: {\n size: {\n sm: 'w-8 h-8 text-xs',\n md: 'w-10 h-10 text-sm',\n lg: 'w-12 h-12 text-base',\n },\n variant: {\n numbered: '',\n icon: '',\n dots: '',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'numbered',\n },\n compoundVariants: [\n // Dots variant has smaller indicators\n { variant: 'dots', size: 'sm', className: '!w-2.5 !h-2.5' },\n { variant: 'dots', size: 'md', className: '!w-3 !h-3' },\n { variant: 'dots', size: 'lg', className: '!w-4 !h-4' },\n ],\n }\n);\n\n// ========================================\n// CONNECTOR VARIANTS\n// ========================================\n\nexport const stepperConnectorVariants = cva('transition-all duration-500 ease-out', {\n variants: {\n orientation: {\n horizontal: 'h-0.5 flex-1 mx-2 md:mx-3',\n vertical: 'w-0.5 min-h-6 ml-5 my-1',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// LABEL VARIANTS\n// ========================================\n\nexport const stepperLabelVariants = cva(\n 'font-medium transition-colors duration-300 whitespace-nowrap',\n {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n orientation: {\n horizontal: 'mt-2 text-center',\n vertical: '',\n },\n },\n defaultVariants: {\n size: 'md',\n orientation: 'horizontal',\n },\n }\n);\n\n// ========================================\n// DESCRIPTION VARIANTS\n// ========================================\n\nexport const stepperDescriptionVariants = cva('transition-colors duration-300', {\n variants: {\n size: {\n sm: 'text-[10px]',\n md: 'text-xs',\n lg: 'text-sm',\n },\n orientation: {\n horizontal: 'text-center max-w-[100px] md:max-w-[120px]',\n vertical: 'max-w-[200px]',\n },\n },\n defaultVariants: {\n size: 'md',\n orientation: 'horizontal',\n },\n});\n\n// ========================================\n// CONTENT VARIANTS\n// ========================================\n\nexport const stepperContentVariants = cva('animate-in fade-in-0 duration-200', {\n variants: {\n orientation: {\n horizontal: 'mt-6',\n vertical: 'mt-4',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * StepperGlass Component (Compound API)\n *\n * Glass-themed step indicator with:\n * - Theme-aware styling (glass/light/aurora)\n * - Horizontal and vertical orientations\n * - Numbered, icon, and dots variants\n * - Linear mode (lock future steps)\n * - Animated connector lines\n * - Compound component API for advanced composition\n *\n * @example\n * ```tsx\n * <StepperGlass.Root value=\"step2\" onValueChange={setStep}>\n * <StepperGlass.List>\n * <StepperGlass.Step value=\"step1\" label=\"Account\" description=\"Create your account\" />\n * <StepperGlass.Step value=\"step2\" label=\"Profile\" description=\"Setup your profile\" />\n * <StepperGlass.Step value=\"step3\" label=\"Complete\" description=\"Finish setup\" />\n * </StepperGlass.List>\n * <StepperGlass.Content value=\"step1\">Step 1 content</StepperGlass.Content>\n * <StepperGlass.Content value=\"step2\">Step 2 content</StepperGlass.Content>\n * <StepperGlass.Content value=\"step3\">Step 3 content</StepperGlass.Content>\n * </StepperGlass.Root>\n * ```\n *\n * @accessibility\n * - **Keyboard Navigation:** Arrow keys navigate between steps (WCAG 2.1.1)\n * - **Focus Management:** Visible focus ring using `--focus-glow` (WCAG 2.4.7)\n * - **Screen Readers:** Uses `role=\"tablist\"`, `role=\"tab\"` (WCAG 4.1.3)\n * - **ARIA Attributes:** `aria-current=\"step\"`, `aria-disabled` for state\n * - **Touch Targets:** 44x44px minimum touch targets (WCAG 2.5.5)\n * - **Color Contrast:** All states meet WCAG AA 4.5:1 ratio\n * - **Motion:** Respects `prefers-reduced-motion`\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n useMemo,\n useState,\n useCallback,\n useLayoutEffect,\n type CSSProperties,\n type FC,\n type ReactNode,\n} from 'react';\nimport { cn } from '@/lib/utils';\nimport { useFocus } from '@/lib/hooks/use-focus';\nimport { Check } from 'lucide-react';\nimport {\n stepperRootVariants,\n stepperListVariants,\n stepperStepContainerVariants,\n stepperIndicatorVariants,\n stepperConnectorVariants,\n stepperLabelVariants,\n stepperDescriptionVariants,\n stepperContentVariants,\n type StepperOrientation,\n type StepperVariant,\n type StepperSize,\n type StepStatus,\n} from '@/lib/variants/stepper-glass-variants';\nimport '@/glass-theme.css';\n\n// ========================================\n// CONTEXT\n// ========================================\n\ninterface StepperContextValue {\n value: string;\n onValueChange?: (value: string) => void;\n orientation: StepperOrientation;\n variant: StepperVariant;\n size: StepperSize;\n linear: boolean;\n steps: string[];\n registerStep: (value: string, index: number) => void;\n unregisterStep: (value: string) => void;\n}\n\nconst StepperContext = createContext<StepperContextValue | null>(null);\n\nconst useStepperContext = () => {\n const context = useContext(StepperContext);\n if (!context) {\n throw new Error('Stepper compound components must be used within StepperGlass.Root');\n }\n return context;\n};\n\n// ========================================\n// UTILITY: GET STEP STATUS\n// ========================================\n\nfunction getStepStatus(\n stepValue: string,\n currentValue: string,\n steps: string[],\n linear: boolean,\n disabled?: boolean\n): StepStatus {\n if (disabled) return 'disabled';\n\n const stepIndex = steps.indexOf(stepValue);\n const currentIndex = steps.indexOf(currentValue);\n\n if (stepIndex === -1 || currentIndex === -1) return 'pending';\n if (stepIndex === currentIndex) return 'active';\n if (stepIndex < currentIndex) return 'completed';\n if (linear && stepIndex > currentIndex) return 'disabled';\n return 'pending';\n}\n\n// ========================================\n// ROOT COMPONENT\n// ========================================\n\ninterface StepperRootProps {\n /** Current active step value */\n value: string;\n /** Callback when step value changes */\n onValueChange?: (value: string) => void;\n /** Orientation of the stepper */\n orientation?: StepperOrientation;\n /** Visual variant */\n variant?: StepperVariant;\n /** Size of step indicators */\n size?: StepperSize;\n /** Lock future steps (require sequential completion) */\n linear?: boolean;\n /** Child components */\n children: ReactNode;\n /** Optional className */\n className?: string;\n}\n\nconst StepperRoot: FC<StepperRootProps> = ({\n value,\n onValueChange,\n orientation = 'horizontal',\n variant = 'numbered',\n size = 'md',\n linear = false,\n children,\n className,\n}) => {\n const [steps, setSteps] = useState<string[]>([]);\n\n const registerStep = useCallback((stepValue: string, index: number) => {\n setSteps((prev) => {\n if (prev.includes(stepValue)) return prev;\n const newSteps = [...prev];\n // Insert at correct position to maintain order\n newSteps.splice(index, 0, stepValue);\n return newSteps;\n });\n }, []);\n\n const unregisterStep = useCallback((stepValue: string) => {\n setSteps((prev) => prev.filter((s) => s !== stepValue));\n }, []);\n\n const contextValue = useMemo(\n () => ({\n value,\n onValueChange,\n orientation,\n variant,\n size,\n linear,\n steps,\n registerStep,\n unregisterStep,\n }),\n [value, onValueChange, orientation, variant, size, linear, steps, registerStep, unregisterStep]\n );\n\n return (\n <StepperContext.Provider value={contextValue}>\n <div\n className={cn(stepperRootVariants({ orientation }), className)}\n aria-label=\"Progress steps\"\n >\n {children}\n </div>\n </StepperContext.Provider>\n );\n};\n\n// ========================================\n// LIST COMPONENT\n// ========================================\n\ninterface StepperListProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n className?: string;\n}\n\nconst StepperList = forwardRef<HTMLDivElement, StepperListProps>(\n ({ children, className, ...props }, ref) => {\n const { orientation } = useStepperContext();\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-orientation={orientation}\n className={cn(stepperListVariants({ orientation }), className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nStepperList.displayName = 'StepperList';\n\n// ========================================\n// STEP COMPONENT\n// ========================================\n\ninterface StepperStepProps {\n /** Unique value for this step */\n value: string;\n /** Step label (required for accessibility) */\n label: string;\n /** Optional description */\n description?: string;\n /** Custom icon (for icon variant) */\n icon?: ReactNode;\n /** Completed icon override */\n completedIcon?: ReactNode;\n /** Force disabled state */\n disabled?: boolean;\n /** Optional className */\n className?: string;\n /** Step index for ordering (auto-detected) */\n index?: number;\n}\n\nconst StepperStep = forwardRef<HTMLButtonElement, StepperStepProps>(\n (\n {\n value: stepValue,\n label,\n description,\n icon,\n completedIcon,\n disabled: forcedDisabled,\n className,\n index: providedIndex,\n },\n ref\n ) => {\n const {\n value: currentValue,\n onValueChange,\n orientation,\n variant,\n size,\n linear,\n steps,\n registerStep,\n unregisterStep,\n } = useStepperContext();\n\n const { isFocusVisible, focusProps } = useFocus({ focusVisible: true });\n\n // Track mount order for step registration\n const [mountIndex] = useState(() => providedIndex ?? Date.now());\n\n // Register step on mount\n // Use useLayoutEffect to register before paint\n useLayoutEffect(() => {\n registerStep(stepValue, mountIndex);\n return () => unregisterStep(stepValue);\n }, [stepValue, mountIndex, registerStep, unregisterStep]);\n\n const status = getStepStatus(stepValue, currentValue, steps, linear, forcedDisabled);\n const stepIndex = steps.indexOf(stepValue);\n const isLast = stepIndex === steps.length - 1;\n const isClickable = status !== 'disabled';\n\n // Styles based on status\n const indicatorStyles: CSSProperties = {\n background:\n status === 'completed'\n ? 'var(--stepper-step-completed-bg)'\n : status === 'active'\n ? 'var(--stepper-step-active-bg)'\n : status === 'disabled'\n ? 'var(--stepper-step-disabled-bg)'\n : 'var(--stepper-step-bg)',\n border: `2px solid ${\n status === 'completed'\n ? 'var(--stepper-step-completed-border)'\n : status === 'active'\n ? 'var(--stepper-step-active-border)'\n : status === 'disabled'\n ? 'var(--stepper-step-disabled-border)'\n : 'var(--stepper-step-border)'\n }`,\n color:\n status === 'completed'\n ? 'var(--stepper-step-completed-text)'\n : status === 'active'\n ? 'var(--stepper-step-active-text)'\n : status === 'disabled'\n ? 'var(--stepper-step-disabled-text)'\n : 'var(--stepper-step-text)',\n boxShadow:\n status === 'active'\n ? 'var(--stepper-step-active-glow)'\n : status === 'completed'\n ? 'var(--stepper-step-glow)'\n : isFocusVisible\n ? 'var(--focus-glow)'\n : 'none',\n backdropFilter: 'blur(var(--blur-sm))',\n };\n\n const connectorStyles: CSSProperties = {\n background:\n stepIndex < steps.indexOf(currentValue)\n ? 'var(--stepper-connector-active-bg)'\n : 'var(--stepper-connector-bg)',\n };\n\n const labelStyles: CSSProperties = {\n color:\n status === 'active' || status === 'completed'\n ? 'var(--stepper-label-text)'\n : 'var(--stepper-description-text)',\n };\n\n const descriptionStyles: CSSProperties = {\n color: 'var(--stepper-description-text)',\n };\n\n // Render indicator content\n const renderIndicatorContent = () => {\n if (status === 'completed') {\n if (completedIcon) return completedIcon;\n return <Check className=\"w-4 h-4\" />;\n }\n if (variant === 'icon' && icon) return icon;\n if (variant === 'dots') return null;\n // Numbered variant\n return stepIndex >= 0 ? stepIndex + 1 : '';\n };\n\n const handleClick = () => {\n if (isClickable && onValueChange) {\n onValueChange(stepValue);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isClickable) return;\n\n const stepList = e.currentTarget.closest('[role=\"tablist\"]');\n if (!stepList) return;\n\n const allSteps = Array.from(\n stepList.querySelectorAll('[role=\"tab\"]:not([aria-disabled=\"true\"])')\n ) as HTMLButtonElement[];\n const currentIdx = allSteps.indexOf(e.currentTarget as HTMLButtonElement);\n\n let nextIdx = currentIdx;\n const isHorizontal = orientation === 'horizontal';\n\n switch (e.key) {\n case isHorizontal ? 'ArrowRight' : 'ArrowDown':\n e.preventDefault();\n nextIdx = (currentIdx + 1) % allSteps.length;\n break;\n case isHorizontal ? 'ArrowLeft' : 'ArrowUp':\n e.preventDefault();\n nextIdx = currentIdx - 1 < 0 ? allSteps.length - 1 : currentIdx - 1;\n break;\n case 'Home':\n e.preventDefault();\n nextIdx = 0;\n break;\n case 'End':\n e.preventDefault();\n nextIdx = allSteps.length - 1;\n break;\n default:\n return;\n }\n\n const nextStep = allSteps[nextIdx];\n if (nextStep) {\n nextStep.focus();\n const nextValue = nextStep.getAttribute('data-value');\n if (nextValue && onValueChange) {\n onValueChange(nextValue);\n }\n }\n };\n\n // For horizontal, we need step + connector inline\n // For vertical, step is a row with connector below\n if (orientation === 'horizontal') {\n return (\n <>\n <div className={cn(stepperStepContainerVariants({ orientation }), className)}>\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={status === 'active'}\n aria-disabled={!isClickable}\n aria-current={status === 'active' ? 'step' : undefined}\n data-value={stepValue}\n data-status={status}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n disabled={!isClickable}\n className={cn(\n stepperIndicatorVariants({ size, variant }),\n !isClickable && 'cursor-not-allowed opacity-60',\n isClickable && 'cursor-pointer hover:scale-105',\n // Ensure minimum touch target\n 'min-w-[44px] min-h-[44px]'\n )}\n style={indicatorStyles}\n >\n {renderIndicatorContent()}\n </button>\n\n {label && (\n <div className=\"flex flex-col items-center\">\n <span\n className={cn(stepperLabelVariants({ size, orientation }))}\n style={labelStyles}\n >\n {label}\n </span>\n {description && (\n <span\n className={cn(stepperDescriptionVariants({ size, orientation }))}\n style={descriptionStyles}\n >\n {description}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Connector line between steps */}\n {!isLast && (\n <div\n className={cn(stepperConnectorVariants({ orientation }))}\n style={connectorStyles}\n aria-hidden=\"true\"\n />\n )}\n </>\n );\n }\n\n // Vertical orientation\n return (\n <div className=\"flex flex-col\">\n <div className={cn(stepperStepContainerVariants({ orientation }), className)}>\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={status === 'active'}\n aria-disabled={!isClickable}\n aria-current={status === 'active' ? 'step' : undefined}\n data-value={stepValue}\n data-status={status}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n disabled={!isClickable}\n className={cn(\n stepperIndicatorVariants({ size, variant }),\n !isClickable && 'cursor-not-allowed opacity-60',\n isClickable && 'cursor-pointer hover:scale-105',\n 'min-w-[44px] min-h-[44px]'\n )}\n style={indicatorStyles}\n >\n {renderIndicatorContent()}\n </button>\n\n {label && (\n <div className=\"flex flex-col justify-center\">\n <span className={cn(stepperLabelVariants({ size, orientation }))} style={labelStyles}>\n {label}\n </span>\n {description && (\n <span\n className={cn(stepperDescriptionVariants({ size, orientation }))}\n style={descriptionStyles}\n >\n {description}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Vertical connector */}\n {!isLast && (\n <div\n className={cn(stepperConnectorVariants({ orientation }))}\n style={connectorStyles}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n }\n);\n\nStepperStep.displayName = 'StepperStep';\n\n// ========================================\n// CONTENT COMPONENT\n// ========================================\n\ninterface StepperContentProps {\n /** Value of the step this content belongs to */\n value: string;\n /** Content to display when step is active */\n children: ReactNode;\n /** Optional className */\n className?: string;\n}\n\nconst StepperContent: FC<StepperContentProps> = ({ value, children, className }) => {\n const { value: currentValue, orientation } = useStepperContext();\n const isActive = currentValue === value;\n\n if (!isActive) return null;\n\n return (\n <div\n role=\"tabpanel\"\n aria-hidden={!isActive}\n className={cn(stepperContentVariants({ orientation }), className)}\n >\n {children}\n </div>\n );\n};\n\n// ========================================\n// EXPORT COMPOUND COMPONENT\n// ========================================\n\nexport const StepperGlass = {\n Root: StepperRoot,\n List: StepperList,\n Step: StepperStep,\n Content: StepperContent,\n};\n\n// Also export individual components for flexibility\nexport { StepperRoot, StepperList, StepperStep, StepperContent };\n\n// Re-export types\nexport type {\n StepperRootProps,\n StepperListProps,\n StepperStepProps,\n StepperContentProps,\n StepperOrientation,\n StepperVariant,\n StepperSize,\n StepStatus,\n};\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/toggle-group.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Toggle } from \"@radix-ui/react-toggle\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TOGGLE_GROUP_NAME = \"ToggleGroup\";\nvar [createToggleGroupContext, createToggleGroupScope] = createContextScope(TOGGLE_GROUP_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar ToggleGroup = React.forwardRef((props, forwardedRef) => {\n const { type, ...toggleGroupProps } = props;\n if (type === \"single\") {\n const singleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplSingle, { ...singleProps, ref: forwardedRef });\n }\n if (type === \"multiple\") {\n const multipleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplMultiple, { ...multipleProps, ref: forwardedRef });\n }\n throw new Error(`Missing prop \\`type\\` expected on \\`${TOGGLE_GROUP_NAME}\\``);\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupValueProvider, useToggleGroupValueContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImplSingle = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"single\",\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemActivate: setValue,\n onItemDeactivate: React.useCallback(() => setValue(\"\"), [setValue]),\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupSingleProps, ref: forwardedRef })\n }\n );\n});\nvar ToggleGroupImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n const handleButtonActivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleButtonDeactivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"multiple\",\n value,\n onItemActivate: handleButtonActivate,\n onItemDeactivate: handleButtonDeactivate,\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupMultipleProps, ref: forwardedRef })\n }\n );\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupContext, useToggleGroupContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeToggleGroup,\n disabled = false,\n rovingFocus = true,\n orientation,\n dir,\n loop = true,\n ...toggleGroupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeToggleGroup);\n const direction = useDirection(dir);\n const commonProps = { role: \"group\", dir: direction, ...toggleGroupProps };\n return /* @__PURE__ */ jsx(ToggleGroupContext, { scope: __scopeToggleGroup, rovingFocus, disabled, children: rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef }) });\n }\n);\nvar ITEM_NAME = \"ToggleGroupItem\";\nvar ToggleGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const valueContext = useToggleGroupValueContext(ITEM_NAME, props.__scopeToggleGroup);\n const context = useToggleGroupContext(ITEM_NAME, props.__scopeToggleGroup);\n const rovingFocusGroupScope = useRovingFocusGroupScope(props.__scopeToggleGroup);\n const pressed = valueContext.value.includes(props.value);\n const disabled = context.disabled || props.disabled;\n const commonProps = { ...props, pressed, disabled };\n const ref = React.useRef(null);\n return context.rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: pressed,\n ref,\n children: /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef });\n }\n);\nToggleGroupItem.displayName = ITEM_NAME;\nvar ToggleGroupItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeToggleGroup, value, ...itemProps } = props;\n const valueContext = useToggleGroupValueContext(ITEM_NAME, __scopeToggleGroup);\n const singleProps = { role: \"radio\", \"aria-checked\": props.pressed, \"aria-pressed\": void 0 };\n const typeProps = valueContext.type === \"single\" ? singleProps : void 0;\n return /* @__PURE__ */ jsx(\n Toggle,\n {\n ...typeProps,\n ...itemProps,\n ref: forwardedRef,\n onPressedChange: (pressed) => {\n if (pressed) {\n valueContext.onItemActivate(value);\n } else {\n valueContext.onItemDeactivate(value);\n }\n }\n }\n );\n }\n);\nvar Root2 = ToggleGroup;\nvar Item2 = ToggleGroupItem;\nexport {\n Item2 as Item,\n Root2 as Root,\n ToggleGroup,\n ToggleGroupItem,\n createToggleGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * ToggleGroupGlass Component\n *\n * Glass-themed toggle group with:\n * - Theme-aware styling (glass/light/aurora)\n * - Single or multiple selection modes\n * - Size variants (default, sm, lg)\n * - Variant styles (default, outline)\n * - 100% shadcn/ui ToggleGroup API compatible\n *\n * @accessibility\n * - Uses roving tabindex for keyboard navigation\n * - Arrow keys move between items\n * - Space/Enter toggles selection\n * - `aria-pressed` indicates selection state\n * - Focus ring visible on keyboard navigation\n *\n * @example\n * ```tsx\n * // Single selection (default)\n * <ToggleGroupGlass.Root type=\"single\" defaultValue=\"center\">\n * <ToggleGroupGlass.Item value=\"left\">\n * <AlignLeft className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * <ToggleGroupGlass.Item value=\"center\">\n * <AlignCenter className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * <ToggleGroupGlass.Item value=\"right\">\n * <AlignRight className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * </ToggleGroupGlass.Root>\n *\n * // Multiple selection\n * <ToggleGroupGlass.Root type=\"multiple\" value={selected} onValueChange={setSelected}>\n * ...\n * </ToggleGroupGlass.Root>\n * ```\n */\n\nimport * as React from 'react';\nimport * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// CONTEXT FOR GROUP-LEVEL PROPS\n// ========================================\n\ninterface ToggleGroupContextValue {\n size: 'default' | 'sm' | 'lg';\n variant: 'default' | 'outline';\n}\n\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({\n size: 'default',\n variant: 'default',\n});\n\n// ========================================\n// VARIANTS\n// ========================================\n\nconst toggleGroupItemVariants = cva(\n // Base styles\n [\n 'inline-flex items-center justify-center rounded-md text-sm font-medium',\n 'transition-all duration-200',\n 'focus:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n ],\n {\n variants: {\n variant: {\n default: [\n // Glass background for default variant\n 'bg-[var(--toggle-group-item-bg,transparent)]',\n 'hover:bg-[var(--toggle-group-item-hover-bg,var(--glass-bg-subtle))]',\n 'data-[state=on]:bg-[var(--toggle-group-item-active-bg,var(--semantic-primary-subtle))]',\n 'data-[state=on]:text-[var(--toggle-group-item-active-text,var(--semantic-primary))]',\n ],\n outline: [\n // Outline variant\n 'border border-[var(--toggle-group-item-border,var(--glass-border))]',\n 'bg-transparent',\n 'hover:bg-[var(--toggle-group-item-hover-bg,var(--glass-bg-subtle))]',\n 'data-[state=on]:border-[var(--semantic-primary)]',\n 'data-[state=on]:bg-[var(--toggle-group-item-active-bg,var(--semantic-primary-subtle))]',\n 'data-[state=on]:text-[var(--toggle-group-item-active-text,var(--semantic-primary))]',\n ],\n },\n size: {\n default: 'h-10 px-3',\n sm: 'h-8 px-2',\n lg: 'h-11 px-4',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\n// ========================================\n// ROOT COMPONENT\n// ========================================\n\n// Base props shared by both single and multiple modes\ninterface ToggleGroupGlassBaseProps extends VariantProps<typeof toggleGroupItemVariants> {\n className?: string;\n children?: React.ReactNode;\n}\n\n// Props for single selection mode\nexport interface ToggleGroupGlassSingleProps extends ToggleGroupGlassBaseProps {\n type: 'single';\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\n// Props for multiple selection mode\nexport interface ToggleGroupGlassMultipleProps extends ToggleGroupGlassBaseProps {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport type ToggleGroupGlassRootProps = ToggleGroupGlassSingleProps | ToggleGroupGlassMultipleProps;\n\nfunction ToggleGroupGlassRootImpl(\n props: ToggleGroupGlassRootProps,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const { className, variant = 'default', size = 'default', children, ...rest } = props;\n\n const containerClasses = cn(\n 'inline-flex items-center justify-center gap-1',\n // Glass container background\n 'rounded-lg p-1',\n 'bg-[var(--toggle-group-bg,var(--glass-bg-subtle))]',\n 'border border-[var(--toggle-group-border,var(--glass-border))]',\n className\n );\n\n const contextValue = { size: size ?? 'default', variant: variant ?? 'default' };\n\n if (props.type === 'multiple') {\n const multipleRest = rest as Omit<\n ToggleGroupGlassMultipleProps,\n 'className' | 'children' | 'variant' | 'size'\n >;\n return (\n <ToggleGroupPrimitive.Root ref={ref} className={containerClasses} {...multipleRest}>\n <ToggleGroupContext.Provider value={contextValue}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n }\n\n const singleRest = rest as Omit<\n ToggleGroupGlassSingleProps,\n 'className' | 'children' | 'variant' | 'size'\n >;\n return (\n <ToggleGroupPrimitive.Root ref={ref} className={containerClasses} {...singleRest}>\n <ToggleGroupContext.Provider value={contextValue}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nconst ToggleGroupGlassRoot = React.forwardRef(ToggleGroupGlassRootImpl);\nToggleGroupGlassRoot.displayName = 'ToggleGroupGlassRoot';\n\n// ========================================\n// ITEM COMPONENT\n// ========================================\n\nexport interface ToggleGroupGlassItemProps\n extends\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item>,\n VariantProps<typeof toggleGroupItemVariants> {}\n\nconst ToggleGroupGlassItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n ToggleGroupGlassItemProps\n>(({ className, children, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(\n toggleGroupItemVariants({\n variant: variant ?? context.variant,\n size: size ?? context.size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n );\n});\n\nToggleGroupGlassItem.displayName = 'ToggleGroupGlassItem';\n\n// ========================================\n// COMPOUND EXPORT\n// ========================================\n\n/**\n * ToggleGroupGlass - A glass-themed segmented control / toggle button group\n *\n * @example\n * ```tsx\n * // Text alignment toolbar\n * <ToggleGroupGlass.Root type=\"single\" defaultValue=\"left\" aria-label=\"Text alignment\">\n * <ToggleGroupGlass.Item value=\"left\" aria-label=\"Align left\">\n * <AlignLeft className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * <ToggleGroupGlass.Item value=\"center\" aria-label=\"Align center\">\n * <AlignCenter className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * <ToggleGroupGlass.Item value=\"right\" aria-label=\"Align right\">\n * <AlignRight className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * <ToggleGroupGlass.Item value=\"justify\" aria-label=\"Justify\">\n * <AlignJustify className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * </ToggleGroupGlass.Root>\n *\n * // View mode selector\n * <ToggleGroupGlass.Root type=\"single\" value={view} onValueChange={setView}>\n * <ToggleGroupGlass.Item value=\"grid\">\n * <Grid className=\"h-4 w-4 mr-2\" />\n * Grid\n * </ToggleGroupGlass.Item>\n * <ToggleGroupGlass.Item value=\"list\">\n * <List className=\"h-4 w-4 mr-2\" />\n * List\n * </ToggleGroupGlass.Item>\n * </ToggleGroupGlass.Root>\n *\n * // Multiple selection with outline variant\n * <ToggleGroupGlass.Root type=\"multiple\" variant=\"outline\">\n * <ToggleGroupGlass.Item value=\"bold\">\n * <Bold className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * <ToggleGroupGlass.Item value=\"italic\">\n * <Italic className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * <ToggleGroupGlass.Item value=\"underline\">\n * <Underline className=\"h-4 w-4\" />\n * </ToggleGroupGlass.Item>\n * </ToggleGroupGlass.Root>\n * ```\n */\nexport const ToggleGroupGlass = {\n Root: ToggleGroupGlassRoot,\n Item: ToggleGroupGlassItem,\n};\n\n// Named exports for direct imports\nexport { ToggleGroupGlassRoot, ToggleGroupGlassItem };\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SidebarGlass Context\n *\n * Provides state management for SidebarGlass compound component.\n * 100% compatible with shadcn/ui Sidebar API.\n *\n * @module sidebar-context\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n useEffect,\n type FC,\n type ReactNode,\n} from 'react';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport type SidebarSide = 'left' | 'right';\nexport type SidebarVariant = 'sidebar' | 'floating' | 'inset';\nexport type SidebarCollapsible = 'offcanvas' | 'icon' | 'none';\n\n/**\n * Context value for SidebarGlass compound components\n * 100% compatible with shadcn/ui useSidebar() hook\n */\nexport interface SidebarContextValue {\n /** Sidebar state: \"expanded\" | \"collapsed\" */\n state: 'expanded' | 'collapsed';\n /** Whether sidebar is open (desktop) */\n open: boolean;\n /** Set sidebar open state */\n setOpen: (open: boolean) => void;\n /** Whether mobile drawer is open */\n openMobile: boolean;\n /** Set mobile drawer open state */\n setOpenMobile: (open: boolean) => void;\n /** Whether viewport is mobile */\n isMobile: boolean;\n /** Toggle sidebar open/close */\n toggleSidebar: () => void;\n\n // === CONFIG ===\n /** Which side the sidebar is on */\n side: SidebarSide;\n /** Sidebar variant */\n variant: SidebarVariant;\n /** Collapsible mode */\n collapsible: SidebarCollapsible;\n}\n\n// ========================================\n// CONSTANTS\n// ========================================\n\nconst MOBILE_BREAKPOINT = 768;\nconst SIDEBAR_COOKIE_NAME = 'sidebar:state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; // 7 days\n\n// ========================================\n// CONTEXT\n// ========================================\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access Sidebar context (100% shadcn compatible)\n *\n * @throws Error if used outside of SidebarGlass.Provider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { state, open, toggleSidebar, isMobile } = useSidebar();\n *\n * return (\n * <button onClick={toggleSidebar}>\n * {state === 'expanded' ? 'Collapse' : 'Expand'}\n * </button>\n * );\n * }\n * ```\n */\nexport function useSidebar(): SidebarContextValue {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error(\n 'useSidebar must be used within SidebarGlass.Provider. ' +\n 'Wrap your component tree with <SidebarGlass.Provider>.'\n );\n }\n return context;\n}\n\n/**\n * Optional hook that returns null if outside provider (doesn't throw)\n */\nexport function useSidebarOptional(): SidebarContextValue | null {\n return useContext(SidebarContext);\n}\n\n// ========================================\n// PROVIDER\n// ========================================\n\n/**\n * Props for SidebarGlass.Provider (100% shadcn compatible)\n */\nexport interface SidebarProviderProps {\n children: ReactNode;\n\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state (uncontrolled) @default true */\n defaultOpen?: boolean;\n\n /** Which side the sidebar is on @default \"left\" */\n side?: SidebarSide;\n /** Sidebar variant @default \"sidebar\" */\n variant?: SidebarVariant;\n /** Collapsible mode @default \"offcanvas\" */\n collapsible?: SidebarCollapsible;\n\n /** Cookie name for persistence @default \"sidebar:state\" */\n cookieName?: string;\n /** Keyboard shortcut key (Cmd/Ctrl + key) @default \"b\" */\n keyboardShortcut?: string | false;\n}\n\n/**\n * Provider component for SidebarGlass compound components\n *\n * @example\n * ```tsx\n * <SidebarGlass.Provider defaultOpen>\n * <SidebarGlass.Root>\n * <SidebarGlass.Header />\n * <SidebarGlass.Content>\n * <SidebarGlass.Menu>...</SidebarGlass.Menu>\n * </SidebarGlass.Content>\n * <SidebarGlass.Footer />\n * </SidebarGlass.Root>\n * <SidebarGlass.Inset>\n * <main>Main content</main>\n * </SidebarGlass.Inset>\n * </SidebarGlass.Provider>\n * ```\n */\nexport const SidebarProvider: FC<SidebarProviderProps> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = true,\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n cookieName = SIDEBAR_COOKIE_NAME,\n keyboardShortcut = 'b',\n}) => {\n // === OPEN STATE (controlled/uncontrolled with cookie persistence) ===\n const [internalOpen, setInternalOpen] = useState(() => {\n // Try to read from cookie\n if (typeof document !== 'undefined') {\n const cookies = document.cookie.split(';');\n const sidebarCookie = cookies.find((c) => c.trim().startsWith(`${cookieName}=`));\n if (sidebarCookie) {\n return sidebarCookie.split('=')[1] === 'true';\n }\n }\n return defaultOpen;\n });\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setInternalOpen(value);\n }\n onOpenChange?.(value);\n\n // Persist to cookie\n if (typeof document !== 'undefined') {\n document.cookie = `${cookieName}=${value}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n }\n },\n [isControlled, onOpenChange, cookieName]\n );\n\n // === MOBILE STATE ===\n const [openMobile, setOpenMobile] = useState(false);\n\n // === RESPONSIVE DETECTION ===\n const [isMobile, setIsMobile] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.innerWidth < MOBILE_BREAKPOINT;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const checkMobile = () => {\n const mobile = window.innerWidth < MOBILE_BREAKPOINT;\n setIsMobile(mobile);\n // Close mobile drawer when switching to desktop (in same callback)\n if (!mobile) {\n setOpenMobile(false);\n }\n };\n\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n // === TOGGLE ACTION ===\n const toggleSidebar = useCallback(() => {\n if (isMobile) {\n setOpenMobile((prev) => !prev);\n } else {\n setOpen(!open);\n }\n }, [isMobile, open, setOpen]);\n\n // === KEYBOARD NAVIGATION ===\n useEffect(() => {\n if (!keyboardShortcut) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n // Cmd/Ctrl + key - toggle sidebar\n if (e.key === keyboardShortcut && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n toggleSidebar();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [keyboardShortcut, toggleSidebar]);\n\n // === CONTEXT VALUE ===\n const value = useMemo<SidebarContextValue>(\n () => ({\n state: open ? 'expanded' : 'collapsed',\n open,\n setOpen,\n openMobile,\n setOpenMobile,\n isMobile,\n toggleSidebar,\n side,\n variant,\n collapsible,\n }),\n [open, setOpen, openMobile, isMobile, toggleSidebar, side, variant, collapsible]\n );\n\n return <SidebarContext.Provider value={value}>{children}</SidebarContext.Provider>;\n};\n\nSidebarProvider.displayName = 'SidebarGlass.Provider';\n","/**\n * SidebarGlass Core Components\n *\n * Layout components for building sidebars with glassmorphism effects.\n * 100% API compatible with shadcn/ui Sidebar.\n *\n * @module sidebar-glass\n */\n\nimport {\n forwardRef,\n type ReactNode,\n type CSSProperties,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { PanelLeft } from 'lucide-react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\nimport {\n useSidebar,\n type SidebarSide,\n type SidebarVariant,\n type SidebarCollapsible,\n} from './sidebar-context';\nimport { ModalGlass } from '@/components/glass/ui/modal-glass';\nimport '@/glass-theme.css';\n\n// ========================================\n// SIDEBAR ROOT\n// ========================================\n\nexport interface SidebarRootProps extends ComponentPropsWithoutRef<'aside'> {\n children: ReactNode;\n /** Override side from provider */\n side?: SidebarSide;\n /** Override variant from provider */\n variant?: SidebarVariant;\n /** Override collapsible from provider */\n collapsible?: SidebarCollapsible;\n}\n\n/**\n * SidebarGlass.Root - Main sidebar container\n *\n * @example\n * ```tsx\n * <SidebarGlass.Root>\n * <SidebarGlass.Header />\n * <SidebarGlass.Content>...</SidebarGlass.Content>\n * <SidebarGlass.Footer />\n * </SidebarGlass.Root>\n * ```\n */\nexport const SidebarRoot = forwardRef<HTMLElement, SidebarRootProps>(\n (\n {\n children,\n side: sideProp,\n variant: variantProp,\n collapsible: collapsibleProp,\n className,\n ...props\n },\n ref\n ) => {\n const context = useSidebar();\n const side = sideProp ?? context.side;\n const variant = variantProp ?? context.variant;\n const collapsible = collapsibleProp ?? context.collapsible;\n const { state, open, openMobile, isMobile, setOpenMobile } = context;\n\n // Mobile: render as Sheet/Drawer\n if (isMobile) {\n return (\n <ModalGlass.Root open={openMobile} onOpenChange={setOpenMobile}>\n <ModalGlass.Overlay />\n <aside\n ref={ref}\n data-sidebar=\"sidebar\"\n data-side={side}\n data-variant={variant}\n data-collapsible={collapsible}\n data-state=\"expanded\"\n data-mobile=\"true\"\n className={cn(\n 'fixed inset-y-0 z-50 flex flex-col',\n 'w-[var(--sidebar-width-mobile)]',\n side === 'left' ? 'left-0' : 'right-0',\n className\n )}\n style={\n {\n background: 'var(--sidebar-bg)',\n color: 'var(--sidebar-foreground)',\n borderRight: side === 'left' ? '1px solid var(--sidebar-border)' : undefined,\n borderLeft: side === 'right' ? '1px solid var(--sidebar-border)' : undefined,\n backdropFilter: 'blur(var(--sidebar-backdrop-blur))',\n WebkitBackdropFilter: 'blur(var(--sidebar-backdrop-blur))',\n boxShadow: 'var(--sidebar-glow)',\n } as CSSProperties\n }\n {...props}\n >\n {children}\n </aside>\n </ModalGlass.Root>\n );\n }\n\n // Desktop: collapsible sidebar\n const isCollapsed = !open && collapsible !== 'none';\n const width =\n isCollapsed && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : 'var(--sidebar-width)';\n\n return (\n <aside\n ref={ref}\n data-sidebar=\"sidebar\"\n data-side={side}\n data-variant={variant}\n data-collapsible={collapsible}\n data-state={state}\n className={cn(\n 'group/sidebar relative flex flex-col',\n 'transition-[width] duration-300 ease-in-out',\n // Offcanvas: completely hidden when collapsed\n collapsible === 'offcanvas' && !open && 'w-0 overflow-hidden',\n // Variant-specific styles\n variant === 'floating' && 'rounded-xl m-2',\n variant === 'inset' && 'rounded-xl',\n className\n )}\n style={\n {\n width: collapsible === 'offcanvas' && !open ? 0 : width,\n background: 'var(--sidebar-bg)',\n color: 'var(--sidebar-foreground)',\n borderRight:\n side === 'left' && variant !== 'floating'\n ? '1px solid var(--sidebar-border)'\n : undefined,\n borderLeft:\n side === 'right' && variant !== 'floating'\n ? '1px solid var(--sidebar-border)'\n : undefined,\n border: variant === 'floating' ? '1px solid var(--sidebar-border)' : undefined,\n backdropFilter: 'blur(var(--sidebar-backdrop-blur))',\n WebkitBackdropFilter: 'blur(var(--sidebar-backdrop-blur))',\n boxShadow: variant === 'floating' ? 'var(--sidebar-glow)' : undefined,\n } as CSSProperties\n }\n {...props}\n >\n {children}\n </aside>\n );\n }\n);\n\nSidebarRoot.displayName = 'SidebarGlass.Root';\n\n// ========================================\n// SIDEBAR HEADER\n// ========================================\n\nexport interface SidebarHeaderProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Header - Sticky header section\n */\nexport const SidebarHeader = forwardRef<HTMLDivElement, SidebarHeaderProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"header\"\n className={cn('flex shrink-0 flex-col gap-2 p-4', 'border-b', className)}\n style={{\n borderColor: 'var(--sidebar-border)',\n }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarHeader.displayName = 'SidebarGlass.Header';\n\n// ========================================\n// SIDEBAR CONTENT\n// ========================================\n\nexport interface SidebarContentProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Content - Scrollable content area\n */\nexport const SidebarContent = forwardRef<HTMLDivElement, SidebarContentProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n 'flex flex-1 flex-col gap-4 overflow-auto p-4',\n // Hide scrollbar but allow scrolling\n '[&::-webkit-scrollbar]:w-1.5',\n '[&::-webkit-scrollbar-track]:bg-transparent',\n '[&::-webkit-scrollbar-thumb]:rounded-full',\n '[&::-webkit-scrollbar-thumb]:bg-white/10',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarContent.displayName = 'SidebarGlass.Content';\n\n// ========================================\n// SIDEBAR FOOTER\n// ========================================\n\nexport interface SidebarFooterProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Footer - Sticky footer section\n */\nexport const SidebarFooter = forwardRef<HTMLDivElement, SidebarFooterProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"footer\"\n className={cn('flex shrink-0 flex-col gap-2 p-4', 'border-t', className)}\n style={{\n borderColor: 'var(--sidebar-border)',\n }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarFooter.displayName = 'SidebarGlass.Footer';\n\n// ========================================\n// SIDEBAR RAIL\n// ========================================\n\nexport type SidebarRailProps = ComponentPropsWithoutRef<'button'>;\n\n/**\n * SidebarGlass.Rail - Interactive rail for toggling sidebar\n *\n * Shows on hover and allows click to toggle collapsed/expanded state.\n */\nexport const SidebarRail = forwardRef<HTMLButtonElement, SidebarRailProps>(\n ({ className, ...props }, ref) => {\n const { toggleSidebar, side } = useSidebar();\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n className={cn(\n 'absolute inset-y-0 z-20 w-4',\n 'hidden group-hover/sidebar:block',\n '-translate-x-1/2 transition-all ease-linear',\n 'after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]',\n 'hover:after:bg-[var(--sidebar-border)]',\n 'cursor-col-resize',\n side === 'left' ? '-right-2' : '-left-2',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarRail.displayName = 'SidebarGlass.Rail';\n\n// ========================================\n// SIDEBAR INSET\n// ========================================\n\nexport interface SidebarInsetProps extends ComponentPropsWithoutRef<'main'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Inset - Main content area next to sidebar\n *\n * Use this for the main content that sits beside the sidebar.\n */\nexport const SidebarInset = forwardRef<HTMLElement, SidebarInsetProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <main\n ref={ref}\n data-sidebar=\"inset\"\n className={cn('flex flex-1 flex-col', 'min-h-screen', className)}\n {...props}\n >\n {children}\n </main>\n );\n }\n);\n\nSidebarInset.displayName = 'SidebarGlass.Inset';\n\n// ========================================\n// SIDEBAR TRIGGER\n// ========================================\n\nexport interface SidebarTriggerProps extends ComponentPropsWithoutRef<'button'> {\n /** Render as child element */\n asChild?: boolean;\n}\n\n/**\n * SidebarGlass.Trigger - Toggle button for sidebar\n *\n * @example\n * ```tsx\n * // Default button\n * <SidebarGlass.Trigger />\n *\n * // Custom trigger\n * <SidebarGlass.Trigger asChild>\n * <ButtonGlass variant=\"ghost\" size=\"icon\">\n * <Menu />\n * </ButtonGlass>\n * </SidebarGlass.Trigger>\n * ```\n */\nexport const SidebarTrigger = forwardRef<HTMLButtonElement, SidebarTriggerProps>(\n ({ asChild = false, className, children, ...props }, ref) => {\n const { toggleSidebar } = useSidebar();\n\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"trigger\"\n onClick={toggleSidebar}\n className={cn(\n 'inline-flex items-center justify-center',\n 'h-9 w-9 rounded-lg',\n 'text-sm font-medium',\n 'transition-colors',\n 'text-[var(--sidebar-foreground)]/60',\n 'hover:bg-[var(--sidebar-accent)]',\n 'hover:text-[var(--sidebar-accent-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--sidebar-ring)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n >\n {children ?? <PanelLeft className=\"h-6 w-6\" />}\n {!children && <span className=\"sr-only\">Toggle Sidebar</span>}\n </Comp>\n );\n }\n);\n\nSidebarTrigger.displayName = 'SidebarGlass.Trigger';\n\n// ========================================\n// SIDEBAR SEPARATOR\n// ========================================\n\nexport type SidebarSeparatorProps = ComponentPropsWithoutRef<'hr'>;\n\n/**\n * SidebarGlass.Separator - Visual divider\n */\nexport const SidebarSeparator = forwardRef<HTMLHRElement, SidebarSeparatorProps>(\n ({ className, ...props }, ref) => {\n return (\n <hr\n ref={ref}\n data-sidebar=\"separator\"\n className={cn('mx-4 my-2 h-px border-0', className)}\n style={{\n background: 'var(--sidebar-border)',\n }}\n {...props}\n />\n );\n }\n);\n\nSidebarSeparator.displayName = 'SidebarGlass.Separator';\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SidebarGlass Menu Components\n *\n * Menu components for building navigation within the sidebar.\n * 100% API compatible with shadcn/ui Sidebar menu components.\n *\n * @module sidebar-menu\n */\n\nimport {\n forwardRef,\n type ReactNode,\n type CSSProperties,\n type ComponentPropsWithoutRef,\n createContext,\n useContext,\n} from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\nimport { useSidebar } from './sidebar-context';\nimport { TooltipGlassSimple } from '@/components/glass/ui/tooltip-glass';\nimport { SkeletonGlass } from '@/components/glass/ui/skeleton-glass';\n\n// ========================================\n// SIDEBAR GROUP\n// ========================================\n\nexport interface SidebarGroupProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Group - Container for a group of menu items\n */\nexport const SidebarGroup = forwardRef<HTMLDivElement, SidebarGroupProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarGroup.displayName = 'SidebarGlass.Group';\n\n// ========================================\n// SIDEBAR GROUP LABEL\n// ========================================\n\nexport interface SidebarGroupLabelProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n /** Render as child element */\n asChild?: boolean;\n}\n\n/**\n * SidebarGlass.GroupLabel - Label for a group of menu items\n */\nexport const SidebarGroupLabel = forwardRef<HTMLDivElement, SidebarGroupLabelProps>(\n ({ children, asChild = false, className, ...props }, ref) => {\n const { state } = useSidebar();\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n data-state={state}\n className={cn(\n 'flex h-8 shrink-0 items-center px-2',\n 'text-xs font-medium text-[var(--sidebar-foreground)]/60',\n 'transition-[margin,opacity] duration-200 ease-linear',\n // Collapsed state\n 'group-data-[state=collapsed]/sidebar:h-0 group-data-[state=collapsed]/sidebar:overflow-hidden',\n 'group-data-[state=collapsed]/sidebar:opacity-0',\n className\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nSidebarGroupLabel.displayName = 'SidebarGlass.GroupLabel';\n\n// ========================================\n// SIDEBAR GROUP ACTION\n// ========================================\n\nexport interface SidebarGroupActionProps extends ComponentPropsWithoutRef<'button'> {\n /** Render as child element */\n asChild?: boolean;\n}\n\n/**\n * SidebarGlass.GroupAction - Action button in group header\n */\nexport const SidebarGroupAction = forwardRef<HTMLButtonElement, SidebarGroupActionProps>(\n ({ asChild = false, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n 'absolute right-2 top-2.5',\n 'flex aspect-square w-5 items-center justify-center',\n 'rounded-md p-0 text-[var(--sidebar-foreground)]/60',\n 'ring-[var(--sidebar-ring)]',\n 'transition-transform hover:bg-[var(--sidebar-accent)]',\n 'hover:text-[var(--sidebar-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n // Hide when collapsed\n 'group-data-[state=collapsed]/sidebar:hidden',\n // Show on hover\n 'after:absolute after:-inset-2 after:md:hidden',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarGroupAction.displayName = 'SidebarGlass.GroupAction';\n\n// ========================================\n// SIDEBAR GROUP CONTENT\n// ========================================\n\nexport interface SidebarGroupContentProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.GroupContent - Content wrapper for group items\n */\nexport const SidebarGroupContent = forwardRef<HTMLDivElement, SidebarGroupContentProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group-content\"\n className={cn('flex flex-col gap-1', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarGroupContent.displayName = 'SidebarGlass.GroupContent';\n\n// ========================================\n// SIDEBAR MENU\n// ========================================\n\nexport interface SidebarMenuProps extends ComponentPropsWithoutRef<'ul'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.Menu - Container for menu items\n */\nexport const SidebarMenu = forwardRef<HTMLUListElement, SidebarMenuProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n data-sidebar=\"menu\"\n className={cn('flex w-full flex-col gap-1', className)}\n {...props}\n >\n {children}\n </ul>\n );\n }\n);\n\nSidebarMenu.displayName = 'SidebarGlass.Menu';\n\n// ========================================\n// SIDEBAR MENU ITEM\n// ========================================\n\nexport interface SidebarMenuItemProps extends ComponentPropsWithoutRef<'li'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.MenuItem - Container for a single menu item\n */\nexport const SidebarMenuItem = forwardRef<HTMLLIElement, SidebarMenuItemProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <li\n ref={ref}\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative text-[var(--sidebar-foreground)]/60', className)}\n {...props}\n >\n {children}\n </li>\n );\n }\n);\n\nSidebarMenuItem.displayName = 'SidebarGlass.MenuItem';\n\n// ========================================\n// SIDEBAR MENU BUTTON\n// ========================================\n\nexport type SidebarMenuButtonSize = 'default' | 'sm' | 'lg';\nexport type SidebarMenuButtonVariant = 'default' | 'outline';\n\nexport interface SidebarMenuButtonProps extends ComponentPropsWithoutRef<'button'> {\n /** Render as child element */\n asChild?: boolean;\n /** Whether this item is active */\n isActive?: boolean;\n /** Tooltip text when collapsed */\n tooltip?: string | ReactNode;\n /** Button size */\n size?: SidebarMenuButtonSize;\n /** Button variant */\n variant?: SidebarMenuButtonVariant;\n}\n\nconst menuButtonSizeClasses: Record<SidebarMenuButtonSize, string> = {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-10 text-sm group-data-[state=collapsed]/sidebar:!p-0',\n};\n\n/**\n * SidebarGlass.MenuButton - Interactive menu button\n */\nexport const SidebarMenuButton = forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n (\n {\n asChild = false,\n isActive = false,\n tooltip,\n size = 'default',\n variant = 'default',\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { state, isMobile } = useSidebar();\n const Comp = asChild ? Slot : 'button';\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-active={isActive}\n data-size={size}\n className={cn(\n 'peer/menu-button flex w-full items-center gap-2',\n 'overflow-hidden rounded-md px-2',\n 'ring-[var(--sidebar-ring)]',\n 'transition-[width,height,padding] duration-200 ease-linear',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'active:bg-[var(--sidebar-accent)] active:text-[var(--sidebar-accent-foreground)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n // Size variants\n menuButtonSizeClasses[size],\n // Variant styles\n variant === 'default' && [\n 'hover:bg-[var(--sidebar-accent)] hover:text-[var(--sidebar-accent-foreground)]',\n ],\n variant === 'outline' && [\n 'bg-transparent shadow-none',\n 'hover:bg-[var(--sidebar-accent)] hover:text-[var(--sidebar-accent-foreground)]',\n 'hover:shadow-[0_0_0_1px_var(--sidebar-border)]',\n ],\n // Active state\n isActive && [\n 'bg-[var(--sidebar-primary)] text-[var(--sidebar-primary-foreground)]',\n 'hover:bg-[var(--sidebar-primary)] hover:text-[var(--sidebar-primary-foreground)]',\n ],\n // Collapsed state - icon only\n 'group-data-[state=collapsed]/sidebar:w-8 group-data-[state=collapsed]/sidebar:!px-0',\n 'group-data-[state=collapsed]/sidebar:justify-center',\n className\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n\n // No tooltip on mobile or expanded state\n if (!tooltip || isMobile || state === 'expanded') {\n return button;\n }\n\n return (\n <TooltipGlassSimple\n content={typeof tooltip === 'string' ? tooltip : String(tooltip)}\n side=\"right\"\n >\n {button}\n </TooltipGlassSimple>\n );\n }\n);\n\nSidebarMenuButton.displayName = 'SidebarGlass.MenuButton';\n\n// ========================================\n// SIDEBAR MENU ACTION\n// ========================================\n\nexport interface SidebarMenuActionProps extends ComponentPropsWithoutRef<'button'> {\n /** Render as child element */\n asChild?: boolean;\n /** Only show on hover */\n showOnHover?: boolean;\n}\n\n/**\n * SidebarGlass.MenuAction - Action button within menu item\n */\nexport const SidebarMenuAction = forwardRef<HTMLButtonElement, SidebarMenuActionProps>(\n ({ asChild = false, showOnHover = false, className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n 'absolute right-1 top-1.5',\n 'flex aspect-square w-5 items-center justify-center',\n 'rounded-md p-0 text-[var(--sidebar-foreground)]/60',\n 'ring-[var(--sidebar-ring)]',\n 'transition-transform hover:bg-[var(--sidebar-accent)]',\n 'hover:text-[var(--sidebar-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n // Hide when collapsed\n 'group-data-[state=collapsed]/sidebar:hidden',\n // Show on hover\n showOnHover &&\n 'peer-hover/menu-button:opacity-100 group-focus-within/menu-item:opacity-100',\n showOnHover && 'data-[state=open]:opacity-100 md:opacity-0',\n // Tap area for touch\n 'after:absolute after:-inset-2 after:md:hidden',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarMenuAction.displayName = 'SidebarGlass.MenuAction';\n\n// ========================================\n// SIDEBAR MENU BADGE\n// ========================================\n\nexport interface SidebarMenuBadgeProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.MenuBadge - Badge within menu item\n */\nexport const SidebarMenuBadge = forwardRef<HTMLDivElement, SidebarMenuBadgeProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n 'pointer-events-none absolute right-1 flex h-5 min-w-5',\n 'select-none items-center justify-center',\n 'rounded-md px-1 text-xs font-medium tabular-nums',\n 'text-[var(--sidebar-foreground)]/60',\n // Hide when collapsed\n 'group-data-[state=collapsed]/sidebar:hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarMenuBadge.displayName = 'SidebarGlass.MenuBadge';\n\n// ========================================\n// SIDEBAR MENU SKELETON\n// ========================================\n\nexport interface SidebarMenuSkeletonProps extends ComponentPropsWithoutRef<'div'> {\n /** Show icon placeholder */\n showIcon?: boolean;\n}\n\n/**\n * SidebarGlass.MenuSkeleton - Loading skeleton for menu items\n */\nexport const SidebarMenuSkeleton = forwardRef<HTMLDivElement, SidebarMenuSkeletonProps>(\n ({ showIcon = false, className, ...props }, ref) => {\n // Fixed width for consistent appearance (avoids Math.random during render)\n const width = '70%';\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <SkeletonGlass className=\"size-4 rounded-md\" />}\n <SkeletonGlass\n className=\"h-4 max-w-[var(--skeleton-width)] flex-1\"\n style={{ '--skeleton-width': width } as CSSProperties}\n />\n </div>\n );\n }\n);\n\nSidebarMenuSkeleton.displayName = 'SidebarGlass.MenuSkeleton';\n\n// ========================================\n// SIDEBAR MENU SUB (SUBMENU CONTAINER)\n// ========================================\n\n// Context for submenu state\ninterface SidebarMenuSubContextValue {\n open: boolean;\n}\n\nconst SidebarMenuSubContext = createContext<SidebarMenuSubContextValue | null>(null);\n\nexport interface SidebarMenuSubProps extends ComponentPropsWithoutRef<'ul'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.MenuSub - Container for submenu items\n */\nexport const SidebarMenuSub = forwardRef<HTMLUListElement, SidebarMenuSubProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <SidebarMenuSubContext.Provider value={{ open: true }}>\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n 'flex min-w-0 flex-col gap-1',\n 'mx-3.5 border-l border-[var(--sidebar-border)] px-2.5 py-0.5',\n // Hide when collapsed\n 'group-data-[state=collapsed]/sidebar:hidden',\n className\n )}\n {...props}\n >\n {children}\n </ul>\n </SidebarMenuSubContext.Provider>\n );\n }\n);\n\nSidebarMenuSub.displayName = 'SidebarGlass.MenuSub';\n\n// ========================================\n// SIDEBAR MENU SUB ITEM\n// ========================================\n\nexport interface SidebarMenuSubItemProps extends ComponentPropsWithoutRef<'li'> {\n children: ReactNode;\n}\n\n/**\n * SidebarGlass.MenuSubItem - Container for a submenu item\n */\nexport const SidebarMenuSubItem = forwardRef<HTMLLIElement, SidebarMenuSubItemProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <li ref={ref} data-sidebar=\"menu-sub-item\" className={cn(className)} {...props}>\n {children}\n </li>\n );\n }\n);\n\nSidebarMenuSubItem.displayName = 'SidebarGlass.MenuSubItem';\n\n// ========================================\n// SIDEBAR MENU SUB BUTTON\n// ========================================\n\nexport interface SidebarMenuSubButtonProps extends ComponentPropsWithoutRef<'a'> {\n /** Render as child element */\n asChild?: boolean;\n /** Whether this item is active */\n isActive?: boolean;\n /** Button size */\n size?: 'sm' | 'md';\n}\n\n/**\n * SidebarGlass.MenuSubButton - Interactive submenu button\n */\nexport const SidebarMenuSubButton = forwardRef<HTMLAnchorElement, SidebarMenuSubButtonProps>(\n ({ asChild = false, isActive = false, size = 'md', className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-active={isActive}\n data-size={size}\n className={cn(\n 'flex min-w-0 items-center gap-2',\n '-ml-px rounded-md border-l border-transparent',\n 'text-[var(--sidebar-foreground)]/60',\n 'ring-[var(--sidebar-ring)]',\n 'transition-colors',\n 'hover:border-[var(--sidebar-border)]',\n 'hover:bg-[var(--sidebar-accent)]',\n 'hover:text-[var(--sidebar-accent-foreground)]',\n 'focus-visible:outline-none focus-visible:ring-2',\n 'active:bg-[var(--sidebar-accent)] active:text-[var(--sidebar-accent-foreground)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&>span:last-child]:truncate',\n '[&>svg]:size-4 [&>svg]:shrink-0',\n // Size variants\n size === 'sm' && 'h-7 px-2 text-xs',\n size === 'md' && 'h-8 px-2 text-sm',\n // Active state\n isActive && ['border-[var(--sidebar-primary)]', 'text-[var(--sidebar-foreground)]'],\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSidebarMenuSubButton.displayName = 'SidebarGlass.MenuSubButton';\n\n// Export hook for submenu context (optional use)\nexport function useSidebarMenuSub() {\n const context = useContext(SidebarMenuSubContext);\n return context;\n}\n","/**\n * SidebarGlass Component\n *\n * A glassmorphism sidebar component with 100% shadcn/ui Sidebar API compatibility.\n * Supports collapsible modes (offcanvas/icon/none), variants (sidebar/floating/inset),\n * mobile drawer, keyboard shortcuts, and cookie persistence.\n *\n * @example\n * ```tsx\n * import { SidebarGlass, useSidebar } from '@/components/glass/ui/sidebar-glass';\n *\n * function App() {\n * return (\n * <SidebarGlass.Provider>\n * <SidebarGlass.Root>\n * <SidebarGlass.Header>\n * <Logo />\n * </SidebarGlass.Header>\n * <SidebarGlass.Content>\n * <SidebarGlass.Group>\n * <SidebarGlass.GroupLabel>Navigation</SidebarGlass.GroupLabel>\n * <SidebarGlass.GroupContent>\n * <SidebarGlass.Menu>\n * <SidebarGlass.MenuItem>\n * <SidebarGlass.MenuButton isActive>\n * <Home /> Dashboard\n * </SidebarGlass.MenuButton>\n * </SidebarGlass.MenuItem>\n * </SidebarGlass.Menu>\n * </SidebarGlass.GroupContent>\n * </SidebarGlass.Group>\n * </SidebarGlass.Content>\n * <SidebarGlass.Footer>\n * <UserMenu />\n * </SidebarGlass.Footer>\n * <SidebarGlass.Rail />\n * </SidebarGlass.Root>\n * <SidebarGlass.Inset>\n * <main>Content</main>\n * </SidebarGlass.Inset>\n * </SidebarGlass.Provider>\n * );\n * }\n * ```\n *\n * @module sidebar-glass\n */\n\n// Context exports\nexport {\n SidebarProvider,\n useSidebar,\n type SidebarContextValue,\n type SidebarProviderProps,\n type SidebarSide,\n type SidebarVariant,\n type SidebarCollapsible,\n} from './sidebar-context';\n\n// Core component exports\nexport {\n SidebarRoot,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarRail,\n SidebarInset,\n SidebarTrigger,\n SidebarSeparator,\n type SidebarRootProps,\n type SidebarHeaderProps,\n type SidebarContentProps,\n type SidebarFooterProps,\n type SidebarRailProps,\n type SidebarInsetProps,\n type SidebarTriggerProps,\n type SidebarSeparatorProps,\n} from './sidebar-glass';\n\n// Menu component exports\nexport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubItem,\n SidebarMenuSubButton,\n useSidebarMenuSub,\n type SidebarGroupProps,\n type SidebarGroupLabelProps,\n type SidebarGroupActionProps,\n type SidebarGroupContentProps,\n type SidebarMenuProps,\n type SidebarMenuItemProps,\n type SidebarMenuButtonProps,\n type SidebarMenuButtonSize,\n type SidebarMenuButtonVariant,\n type SidebarMenuActionProps,\n type SidebarMenuBadgeProps,\n type SidebarMenuSkeletonProps,\n type SidebarMenuSubProps,\n type SidebarMenuSubItemProps,\n type SidebarMenuSubButtonProps,\n} from './sidebar-menu';\n\n// Import all components for compound export\nimport { SidebarProvider } from './sidebar-context';\nimport {\n SidebarRoot,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarRail,\n SidebarInset,\n SidebarTrigger,\n SidebarSeparator,\n} from './sidebar-glass';\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubItem,\n SidebarMenuSubButton,\n} from './sidebar-menu';\n\n/**\n * SidebarGlass compound component\n *\n * 100% API compatible with shadcn/ui Sidebar.\n *\n * @example\n * ```tsx\n * <SidebarGlass.Provider>\n * <SidebarGlass.Root>\n * <SidebarGlass.Header />\n * <SidebarGlass.Content>\n * <SidebarGlass.Menu>\n * <SidebarGlass.MenuItem>\n * <SidebarGlass.MenuButton>Item</SidebarGlass.MenuButton>\n * </SidebarGlass.MenuItem>\n * </SidebarGlass.Menu>\n * </SidebarGlass.Content>\n * <SidebarGlass.Footer />\n * </SidebarGlass.Root>\n * <SidebarGlass.Inset>\n * <main>Content</main>\n * </SidebarGlass.Inset>\n * </SidebarGlass.Provider>\n * ```\n */\nexport const SidebarGlass = {\n // Context\n Provider: SidebarProvider,\n\n // Layout\n Root: SidebarRoot,\n Header: SidebarHeader,\n Content: SidebarContent,\n Footer: SidebarFooter,\n Rail: SidebarRail,\n Inset: SidebarInset,\n Trigger: SidebarTrigger,\n Separator: SidebarSeparator,\n\n // Groups\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n GroupAction: SidebarGroupAction,\n GroupContent: SidebarGroupContent,\n\n // Menu\n Menu: SidebarMenu,\n MenuItem: SidebarMenuItem,\n MenuButton: SidebarMenuButton,\n MenuAction: SidebarMenuAction,\n MenuBadge: SidebarMenuBadge,\n MenuSkeleton: SidebarMenuSkeleton,\n\n // Submenu\n MenuSub: SidebarMenuSub,\n MenuSubItem: SidebarMenuSubItem,\n MenuSubButton: SidebarMenuSubButton,\n};\n","// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * SeparatorGlass Component\n *\n * Glass-themed separator with:\n * - Theme-aware styling (glass/light/aurora)\n * - Horizontal and vertical orientations\n * - Decorative or semantic separation\n * - 100% shadcn/ui Separator API compatible\n *\n * @accessibility\n * - Uses `role=\"separator\"` for semantic meaning\n * - `aria-orientation` communicates direction to screen readers\n * - When decorative=true, uses `role=\"none\"` to hide from assistive tech\n *\n * @example\n * ```tsx\n * // Horizontal separator (default)\n * <SeparatorGlass />\n *\n * // Vertical separator\n * <SeparatorGlass orientation=\"vertical\" className=\"h-4\" />\n *\n * // Decorative (no semantic meaning)\n * <SeparatorGlass decorative />\n * ```\n */\n\nimport * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport interface SeparatorGlassProps extends React.ComponentPropsWithoutRef<\n typeof SeparatorPrimitive.Root\n> {\n /**\n * The orientation of the separator.\n * @default \"horizontal\"\n */\n orientation?: 'horizontal' | 'vertical';\n /**\n * Whether the separator is purely decorative (no semantic meaning).\n * When true, uses role=\"none\" instead of role=\"separator\".\n * @default true\n */\n decorative?: boolean;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\n/**\n * SeparatorGlass - A glass-themed visual divider\n *\n * @example\n * ```tsx\n * // In a card with sections\n * <GlassCard>\n * <GlassCardHeader>\n * <GlassCardTitle>Settings</GlassCardTitle>\n * </GlassCardHeader>\n * <GlassCardContent>\n * <div>Section 1</div>\n * <SeparatorGlass className=\"my-4\" />\n * <div>Section 2</div>\n * </GlassCardContent>\n * </GlassCard>\n *\n * // Vertical separator in a toolbar\n * <div className=\"flex items-center gap-4\">\n * <ButtonGlass>Cut</ButtonGlass>\n * <ButtonGlass>Copy</ButtonGlass>\n * <SeparatorGlass orientation=\"vertical\" className=\"h-6\" />\n * <ButtonGlass>Paste</ButtonGlass>\n * </div>\n * ```\n */\nconst SeparatorGlass = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorGlassProps\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0',\n // Glass styling with CSS variables\n 'bg-[var(--separator-bg,var(--glass-border))]',\n // Orientation-specific sizing\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n));\n\nSeparatorGlass.displayName = 'SeparatorGlass';\n\nexport { SeparatorGlass };\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/scroll-area.tsx\nimport * as React2 from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\n// src/use-state-machine.ts\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/scroll-area.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SCROLL_AREA_NAME = \"ScrollArea\";\nvar [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\nvar [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);\nvar ScrollArea = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeScrollArea,\n type = \"hover\",\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React2.useState(null);\n const [viewport, setViewport] = React2.useState(null);\n const [content, setContent] = React2.useState(null);\n const [scrollbarX, setScrollbarX] = React2.useState(null);\n const [scrollbarY, setScrollbarY] = React2.useState(null);\n const [cornerWidth, setCornerWidth] = React2.useState(0);\n const [cornerHeight, setCornerHeight] = React2.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React2.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React2.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setScrollArea(node));\n const direction = useDirection(dir);\n return /* @__PURE__ */ jsx(\n ScrollAreaProvider,\n {\n scope: __scopeScrollArea,\n type,\n dir: direction,\n scrollHideDelay,\n scrollArea,\n viewport,\n onViewportChange: setViewport,\n content,\n onContentChange: setContent,\n scrollbarX,\n onScrollbarXChange: setScrollbarX,\n scrollbarXEnabled,\n onScrollbarXEnabledChange: setScrollbarXEnabled,\n scrollbarY,\n onScrollbarYChange: setScrollbarY,\n scrollbarYEnabled,\n onScrollbarYEnabledChange: setScrollbarYEnabled,\n onCornerWidthChange: setCornerWidth,\n onCornerHeightChange: setCornerHeight,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n ...scrollAreaProps,\n ref: composedRefs,\n style: {\n position: \"relative\",\n // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n [\"--radix-scroll-area-corner-width\"]: cornerWidth + \"px\",\n [\"--radix-scroll-area-corner-height\"]: cornerHeight + \"px\",\n ...props.style\n }\n }\n )\n }\n );\n }\n);\nScrollArea.displayName = SCROLL_AREA_NAME;\nvar VIEWPORT_NAME = \"ScrollAreaViewport\";\nvar ScrollAreaViewport = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-scroll-area-viewport\": \"\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n /**\n * We don't support `visible` because the intention is to have at least one scrollbar\n * if this component is used and `visible` will behave like `auto` in that case\n * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n *\n * We don't handle `auto` because the intention is for the native implementation\n * to be hidden if using this component. We just want to ensure the node is scrollable\n * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n * the browser from having to work out whether to render native scrollbars or not,\n * we tell it to with the intention of hiding them in CSS.\n */\n overflowX: context.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: context.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n ...props.style\n },\n children: /* @__PURE__ */ jsx(\"div\", { ref: context.onContentChange, style: { minWidth: \"100%\", display: \"table\" }, children })\n }\n )\n ] });\n }\n);\nScrollAreaViewport.displayName = VIEWPORT_NAME;\nvar SCROLLBAR_NAME = \"ScrollAreaScrollbar\";\nvar ScrollAreaScrollbar = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === \"horizontal\";\n React2.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n return context.type === \"hover\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"scroll\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"auto\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"always\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef }) : null;\n }\n);\nScrollAreaScrollbar.displayName = SCROLLBAR_NAME;\nvar ScrollAreaScrollbarHover = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React2.useState(false);\n React2.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = () => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n };\n const handlePointerLeave = () => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n };\n scrollArea.addEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.addEventListener(\"pointerleave\", handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarAuto,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarScroll = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === \"horizontal\";\n const debounceScrollEnd = useDebounceCallback(() => send(\"SCROLL_END\"), 100);\n const [state, send] = useStateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\"\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\"\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\"\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\"\n }\n });\n React2.useEffect(() => {\n if (state === \"idle\") {\n const hideTimer = window.setTimeout(() => send(\"HIDE\"), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n React2.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n if (viewport) {\n let prevScrollPos = viewport[scrollDirection];\n const handleScroll = () => {\n const scrollPos = viewport[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n send(\"SCROLL\");\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n };\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || state !== \"hidden\", children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": state === \"hidden\" ? \"hidden\" : \"visible\",\n ...scrollbarProps,\n ref: forwardedRef,\n onPointerEnter: composeEventHandlers(props.onPointerEnter, () => send(\"POINTER_ENTER\")),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => send(\"POINTER_LEAVE\"))\n }\n ) });\n});\nvar ScrollAreaScrollbarAuto = React2.forwardRef((props, forwardedRef) => {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React2.useState(false);\n const isHorizontal = props.orientation === \"horizontal\";\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarVisible = React2.forwardRef((props, forwardedRef) => {\n const { orientation = \"vertical\", ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React2.useRef(null);\n const pointerOffsetRef = React2.useRef(0);\n const [sizes, setSizes] = React2.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n const commonProps = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: (thumb) => thumbRef.current = thumb,\n onThumbPointerUp: () => pointerOffsetRef.current = 0,\n onThumbPointerDown: (pointerPos) => pointerOffsetRef.current = pointerPos\n };\n function getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n if (orientation === \"horizontal\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarX,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollLeft;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }\n }\n );\n }\n if (orientation === \"vertical\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarY,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollTop;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }\n }\n );\n }\n return null;\n});\nvar ScrollAreaScrollbarX = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"horizontal\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n bottom: 0,\n left: context.dir === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n right: context.dir === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n [\"--radix-scroll-area-thumb-width\"]: getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight)\n }\n });\n }\n }\n }\n );\n});\nvar ScrollAreaScrollbarY = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"vertical\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n top: 0,\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: \"var(--radix-scroll-area-corner-height)\",\n [\"--radix-scroll-area-thumb-height\"]: getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom)\n }\n });\n }\n }\n }\n );\n});\nvar [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);\nvar ScrollAreaScrollbarImpl = React2.forwardRef((props, forwardedRef) => {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React2.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, (node) => setScrollbar(node));\n const rectRef = React2.useRef(null);\n const prevWebkitUserSelectRef = React2.useRef(\"\");\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n function handleDragScroll(event) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n React2.useEffect(() => {\n const handleWheel = (event) => {\n const element = event.target;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n };\n document.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => document.removeEventListener(\"wheel\", handleWheel, { passive: false });\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n React2.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(\n ScrollbarProvider,\n {\n scope: __scopeScrollArea,\n scrollbar,\n hasThumb,\n onThumbChange: useCallbackRef(onThumbChange),\n onThumbPointerUp: useCallbackRef(onThumbPointerUp),\n onThumbPositionChange: handleThumbPositionChange,\n onThumbPointerDown: useCallbackRef(onThumbPointerDown),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...scrollbarProps,\n ref: composeRefs,\n style: { position: \"absolute\", ...scrollbarProps.style },\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar.getBoundingClientRect();\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = \"none\";\n if (context.viewport) context.viewport.style.scrollBehavior = \"auto\";\n handleDragScroll(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, handleDragScroll),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = \"\";\n rectRef.current = null;\n })\n }\n )\n }\n );\n});\nvar THUMB_NAME = \"ScrollAreaThumb\";\nvar ScrollAreaThumb = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || scrollbarContext.hasThumb, children: /* @__PURE__ */ jsx(ScrollAreaThumbImpl, { ref: forwardedRef, ...thumbProps }) });\n }\n);\nvar ScrollAreaThumbImpl = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(\n forwardedRef,\n (node) => scrollbarContext.onThumbChange(node)\n );\n const removeUnlinkedScrollListenerRef = React2.useRef(void 0);\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = void 0;\n }\n }, 100);\n React2.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\n if (viewport) {\n const handleScroll = () => {\n debounceScrollEnd();\n if (!removeUnlinkedScrollListenerRef.current) {\n const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n removeUnlinkedScrollListenerRef.current = listener;\n onThumbPositionChange();\n }\n };\n onThumbPositionChange();\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": scrollbarContext.hasThumb ? \"visible\" : \"hidden\",\n ...thumbProps,\n ref: composedRef,\n style: {\n width: \"var(--radix-scroll-area-thumb-width)\",\n height: \"var(--radix-scroll-area-thumb-height)\",\n ...style\n },\n onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, (event) => {\n const thumb = event.target;\n const thumbRect = thumb.getBoundingClientRect();\n const x = event.clientX - thumbRect.left;\n const y = event.clientY - thumbRect.top;\n scrollbarContext.onThumbPointerDown({ x, y });\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)\n }\n );\n }\n);\nScrollAreaThumb.displayName = THUMB_NAME;\nvar CORNER_NAME = \"ScrollAreaCorner\";\nvar ScrollAreaCorner = React2.forwardRef(\n (props, forwardedRef) => {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== \"scroll\" && hasBothScrollbarsVisible;\n return hasCorner ? /* @__PURE__ */ jsx(ScrollAreaCornerImpl, { ...props, ref: forwardedRef }) : null;\n }\n);\nScrollAreaCorner.displayName = CORNER_NAME;\nvar ScrollAreaCornerImpl = React2.forwardRef((props, forwardedRef) => {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React2.useState(0);\n const [height, setHeight] = React2.useState(0);\n const hasSize = Boolean(width && height);\n useResizeObserver(context.scrollbarX, () => {\n const height2 = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height2);\n setHeight(height2);\n });\n useResizeObserver(context.scrollbarY, () => {\n const width2 = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width2);\n setWidth(width2);\n });\n return hasSize ? /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...cornerProps,\n ref: forwardedRef,\n style: {\n width,\n height,\n position: \"absolute\",\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: 0,\n ...props.style\n }\n }\n ) : null;\n});\nfunction toInt(value) {\n return value ? parseInt(value, 10) : 0;\n}\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\nfunction getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\nfunction getThumbOffsetFromScroll(scrollPos, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\nvar addUnlinkedScrollListener = (node, handler = () => {\n}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n })();\n return () => window.cancelAnimationFrame(rAF);\n};\nfunction useDebounceCallback(callback, delay) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React2.useRef(0);\n React2.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React2.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\nfunction useResizeObserver(element, onResize) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\nvar Root = ScrollArea;\nvar Viewport = ScrollAreaViewport;\nvar Scrollbar = ScrollAreaScrollbar;\nvar Thumb = ScrollAreaThumb;\nvar Corner = ScrollAreaCorner;\nexport {\n Corner,\n Root,\n ScrollArea,\n ScrollAreaCorner,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n Scrollbar,\n Thumb,\n Viewport,\n createScrollAreaScope\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * ScrollAreaGlass Component\n *\n * Glass-themed scroll area with:\n * - Theme-aware scrollbar styling (glass/light/aurora)\n * - Custom scrollbar with glass effects\n * - Horizontal and vertical scrolling support\n * - 100% shadcn/ui ScrollArea API compatible\n *\n * @accessibility\n * - Preserves native scrollbar keyboard navigation\n * - Uses semantic scrolling region\n * - Screen readers can navigate content normally\n *\n * @example\n * ```tsx\n * // Vertical scroll area\n * <ScrollAreaGlass className=\"h-72 w-48 rounded-md border\">\n * <div className=\"p-4\">\n * {items.map((item) => (\n * <div key={item}>{item}</div>\n * ))}\n * </div>\n * </ScrollAreaGlass>\n *\n * // Horizontal scroll area\n * <ScrollAreaGlass className=\"w-96\" orientation=\"horizontal\">\n * <div className=\"flex gap-4 p-4\">\n * {images.map((img) => (\n * <img key={img} src={img} className=\"w-48\" />\n * ))}\n * </div>\n * </ScrollAreaGlass>\n * ```\n */\n\nimport * as React from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// SCROLL BAR COMPONENT\n// ========================================\n\nexport interface ScrollBarGlassProps extends React.ComponentPropsWithoutRef<\n typeof ScrollAreaPrimitive.ScrollAreaScrollbar\n> {\n orientation?: 'horizontal' | 'vertical';\n}\n\nconst ScrollBarGlass = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n ScrollBarGlassProps\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n // Glass styling for scrollbar track\n 'bg-[var(--scrollbar-track,transparent)]',\n // Orientation-specific sizing\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n className={cn(\n 'relative flex-1 rounded-full',\n // Glass scrollbar thumb styling\n 'bg-[var(--scrollbar-thumb,var(--glass-border))]',\n 'hover:bg-[var(--scrollbar-thumb-hover,var(--glass-border-hover))]',\n 'transition-colors'\n )}\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\n\nScrollBarGlass.displayName = 'ScrollBarGlass';\n\n// ========================================\n// SCROLL AREA COMPONENT\n// ========================================\n\nexport interface ScrollAreaGlassProps extends React.ComponentPropsWithoutRef<\n typeof ScrollAreaPrimitive.Root\n> {\n /**\n * Scrollbar orientation - controls which scrollbar to display\n * @default \"vertical\"\n */\n orientation?: 'horizontal' | 'vertical' | 'both';\n}\n\n/**\n * ScrollAreaGlass - A glass-themed scrollable container\n *\n * @example\n * ```tsx\n * // In a modal with long content\n * <ModalGlass.Root open={open} onOpenChange={setOpen}>\n * <ModalGlass.Content>\n * <ModalGlass.Header>\n * <ModalGlass.Title>Terms of Service</ModalGlass.Title>\n * </ModalGlass.Header>\n * <ModalGlass.Body>\n * <ScrollAreaGlass className=\"h-[400px]\">\n * <div className=\"pr-4\">\n * {longContent}\n * </div>\n * </ScrollAreaGlass>\n * </ModalGlass.Body>\n * </ModalGlass.Content>\n * </ModalGlass.Root>\n *\n * // Tags/chips horizontal scroll\n * <ScrollAreaGlass orientation=\"horizontal\" className=\"w-full\">\n * <div className=\"flex gap-2 p-2\">\n * {tags.map((tag) => (\n * <BadgeGlass key={tag}>{tag}</BadgeGlass>\n * ))}\n * </div>\n * </ScrollAreaGlass>\n * ```\n */\nconst ScrollAreaGlass = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n ScrollAreaGlassProps\n>(({ className, children, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n {(orientation === 'vertical' || orientation === 'both') && (\n <ScrollBarGlass orientation=\"vertical\" />\n )}\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollBarGlass orientation=\"horizontal\" />\n )}\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\n\nScrollAreaGlass.displayName = 'ScrollAreaGlass';\n\nexport { ScrollAreaGlass, ScrollBarGlass };\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n});\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * CollapsibleGlass Component\n *\n * Glass-themed collapsible section with:\n * - Theme-aware styling (glass/light/aurora)\n * - Smooth expand/collapse animations\n * - Controlled and uncontrolled modes\n * - 100% shadcn/ui Collapsible API compatible\n *\n * @accessibility\n * - Uses `aria-expanded` to indicate state\n * - Uses `aria-controls` to link trigger to content\n * - Keyboard accessible (Enter/Space to toggle)\n * - Content is hidden from screen readers when collapsed\n *\n * @example\n * ```tsx\n * // Basic collapsible\n * <CollapsibleGlass.Root>\n * <CollapsibleGlass.Trigger>\n * <ButtonGlass>Toggle</ButtonGlass>\n * </CollapsibleGlass.Trigger>\n * <CollapsibleGlass.Content>\n * <div className=\"p-4\">Hidden content</div>\n * </CollapsibleGlass.Content>\n * </CollapsibleGlass.Root>\n *\n * // Controlled collapsible\n * <CollapsibleGlass.Root open={isOpen} onOpenChange={setIsOpen}>\n * ...\n * </CollapsibleGlass.Root>\n * ```\n */\n\nimport * as React from 'react';\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// ROOT COMPONENT\n// ========================================\n\nexport type CollapsibleGlassRootProps = React.ComponentPropsWithoutRef<\n typeof CollapsiblePrimitive.Root\n>;\n\nconst CollapsibleGlassRoot = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Root>,\n CollapsibleGlassRootProps\n>(({ className, ...props }, ref) => (\n <CollapsiblePrimitive.Root ref={ref} className={cn('w-full', className)} {...props} />\n));\n\nCollapsibleGlassRoot.displayName = 'CollapsibleGlassRoot';\n\n// ========================================\n// TRIGGER COMPONENT\n// ========================================\n\nexport interface CollapsibleGlassTriggerProps extends React.ComponentPropsWithoutRef<\n typeof CollapsiblePrimitive.Trigger\n> {\n /** Render as child element (polymorphic) via asChild */\n asChild?: boolean;\n}\n\nconst CollapsibleGlassTrigger = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Trigger>,\n CollapsibleGlassTriggerProps\n>(({ className, ...props }, ref) => (\n <CollapsiblePrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex w-full items-center justify-between',\n // Focus styling\n 'focus-visible:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n));\n\nCollapsibleGlassTrigger.displayName = 'CollapsibleGlassTrigger';\n\n// ========================================\n// CONTENT COMPONENT\n// ========================================\n\nexport type CollapsibleGlassContentProps = React.ComponentPropsWithoutRef<\n typeof CollapsiblePrimitive.Content\n>;\n\nconst CollapsibleGlassContent = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Content>,\n CollapsibleGlassContentProps\n>(({ className, children, ...props }, ref) => (\n <CollapsiblePrimitive.Content\n ref={ref}\n className={cn(\n // Animation for expand/collapse\n 'overflow-hidden transition-all',\n 'data-[state=closed]:animate-collapsible-up',\n 'data-[state=open]:animate-collapsible-down',\n className\n )}\n {...props}\n >\n {children}\n </CollapsiblePrimitive.Content>\n));\n\nCollapsibleGlassContent.displayName = 'CollapsibleGlassContent';\n\n// ========================================\n// COMPOUND EXPORT\n// ========================================\n\n/**\n * CollapsibleGlass - A glass-themed expandable/collapsible section\n *\n * @example\n * ```tsx\n * // FAQ section with multiple collapsibles\n * {faqs.map((faq) => (\n * <CollapsibleGlass.Root key={faq.id}>\n * <GlassCard className=\"mb-2\">\n * <CollapsibleGlass.Trigger asChild>\n * <button className=\"w-full p-4 flex justify-between items-center\">\n * <span>{faq.question}</span>\n * <ChevronDown className=\"h-4 w-4 transition-transform data-[state=open]:rotate-180\" />\n * </button>\n * </CollapsibleGlass.Trigger>\n * <CollapsibleGlass.Content>\n * <div className=\"px-4 pb-4 text-muted-foreground\">\n * {faq.answer}\n * </div>\n * </CollapsibleGlass.Content>\n * </GlassCard>\n * </CollapsibleGlass.Root>\n * ))}\n *\n * // Settings section\n * <CollapsibleGlass.Root>\n * <div className=\"flex items-center justify-between py-2\">\n * <h4 className=\"font-medium\">Advanced Settings</h4>\n * <CollapsibleGlass.Trigger asChild>\n * <ButtonGlass variant=\"ghost\" size=\"sm\">\n * <ChevronsUpDown className=\"h-4 w-4\" />\n * </ButtonGlass>\n * </CollapsibleGlass.Trigger>\n * </div>\n * <CollapsibleGlass.Content>\n * <div className=\"space-y-4 pt-4\">\n * <InputGlass label=\"Custom endpoint\" />\n * <CheckboxGlass label=\"Enable debug mode\" />\n * </div>\n * </CollapsibleGlass.Content>\n * </CollapsibleGlass.Root>\n * ```\n */\nexport const CollapsibleGlass = {\n Root: CollapsibleGlassRoot,\n Trigger: CollapsibleGlassTrigger,\n Content: CollapsibleGlassContent,\n};\n\n// Named exports for direct imports\nexport { CollapsibleGlassRoot, CollapsibleGlassTrigger, CollapsibleGlassContent };\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/radio-group.tsx\nimport * as React2 from \"react\";\nimport { composeEventHandlers as composeEventHandlers2 } from \"@radix-ui/primitive\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { Primitive as Primitive2 } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\n\n// src/radio.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar RADIO_NAME = \"Radio\";\nvar [createRadioContext, createRadioScope] = createContextScope(RADIO_NAME);\nvar [RadioProvider, useRadioContext] = createRadioContext(RADIO_NAME);\nvar Radio = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRadio,\n name,\n checked = false,\n required,\n disabled,\n value = \"on\",\n onCheck,\n form,\n ...radioProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n return /* @__PURE__ */ jsxs(RadioProvider, { scope: __scopeRadio, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"radio\",\n \"aria-checked\": checked,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...radioProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n if (!checked) onCheck?.();\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n RadioBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nRadio.displayName = RADIO_NAME;\nvar INDICATOR_NAME = \"RadioIndicator\";\nvar RadioIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadio, forceMount, ...indicatorProps } = props;\n const context = useRadioContext(INDICATOR_NAME, __scopeRadio);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.checked, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nRadioIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"RadioBubbleInput\";\nvar RadioBubbleInput = React.forwardRef(\n ({\n __scopeRadio,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"radio\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nRadioBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\n\n// src/radio-group.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar RADIO_GROUP_NAME = \"RadioGroup\";\nvar [createRadioGroupContext, createRadioGroupScope] = createContextScope2(RADIO_GROUP_NAME, [\n createRovingFocusGroupScope,\n createRadioScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar useRadioScope = createRadioScope();\nvar [RadioGroupProvider, useRadioGroupContext] = createRadioGroupContext(RADIO_GROUP_NAME);\nvar RadioGroup = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRadioGroup,\n name,\n defaultValue,\n value: valueProp,\n required = false,\n disabled = false,\n orientation,\n dir,\n loop = true,\n onValueChange,\n ...groupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? null,\n onChange: onValueChange,\n caller: RADIO_GROUP_NAME\n });\n return /* @__PURE__ */ jsx2(\n RadioGroupProvider,\n {\n scope: __scopeRadioGroup,\n name,\n required,\n disabled,\n value,\n onValueChange: setValue,\n children: /* @__PURE__ */ jsx2(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx2(\n Primitive2.div,\n {\n role: \"radiogroup\",\n \"aria-required\": required,\n \"aria-orientation\": orientation,\n \"data-disabled\": disabled ? \"\" : void 0,\n dir: direction,\n ...groupProps,\n ref: forwardedRef\n }\n )\n }\n )\n }\n );\n }\n);\nRadioGroup.displayName = RADIO_GROUP_NAME;\nvar ITEM_NAME = \"RadioGroupItem\";\nvar RadioGroupItem = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadioGroup, disabled, ...itemProps } = props;\n const context = useRadioGroupContext(ITEM_NAME, __scopeRadioGroup);\n const isDisabled = context.disabled || disabled;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const radioScope = useRadioScope(__scopeRadioGroup);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref);\n const checked = context.value === itemProps.value;\n const isArrowKeyPressedRef = React2.useRef(false);\n React2.useEffect(() => {\n const handleKeyDown = (event) => {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n };\n const handleKeyUp = () => isArrowKeyPressedRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown);\n document.addEventListener(\"keyup\", handleKeyUp);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.removeEventListener(\"keyup\", handleKeyUp);\n };\n }, []);\n return /* @__PURE__ */ jsx2(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !isDisabled,\n active: checked,\n children: /* @__PURE__ */ jsx2(\n Radio,\n {\n disabled: isDisabled,\n required: context.required,\n checked,\n ...radioScope,\n ...itemProps,\n name: context.name,\n ref: composedRefs,\n onCheck: () => context.onValueChange(itemProps.value),\n onKeyDown: composeEventHandlers2((event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onFocus: composeEventHandlers2(itemProps.onFocus, () => {\n if (isArrowKeyPressedRef.current) ref.current?.click();\n })\n }\n )\n }\n );\n }\n);\nRadioGroupItem.displayName = ITEM_NAME;\nvar INDICATOR_NAME2 = \"RadioGroupIndicator\";\nvar RadioGroupIndicator = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeRadioGroup, ...indicatorProps } = props;\n const radioScope = useRadioScope(__scopeRadioGroup);\n return /* @__PURE__ */ jsx2(RadioIndicator, { ...radioScope, ...indicatorProps, ref: forwardedRef });\n }\n);\nRadioGroupIndicator.displayName = INDICATOR_NAME2;\nvar Root2 = RadioGroup;\nvar Item2 = RadioGroupItem;\nvar Indicator = RadioGroupIndicator;\nexport {\n Indicator,\n Item2 as Item,\n RadioGroup,\n RadioGroupIndicator,\n RadioGroupItem,\n Root2 as Root,\n createRadioGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * RadioGroupGlass Component\n *\n * Glass-themed radio group with:\n * - Theme-aware styling (glass/light/aurora)\n * - Glass indicator with glow effects\n * - Smooth selection animations\n * - 100% shadcn/ui RadioGroup API compatible\n *\n * @accessibility\n * - Uses native radio group semantics via Radix\n * - Arrow keys navigate between options\n * - Space/Enter selects focused option\n * - `aria-checked` indicates selection state\n * - Focus ring visible on keyboard navigation\n *\n * @example\n * ```tsx\n * // Basic radio group\n * <RadioGroupGlass.Root defaultValue=\"option1\">\n * <RadioGroupGlass.Item value=\"option1\" id=\"r1\" />\n * <label htmlFor=\"r1\">Option 1</label>\n * <RadioGroupGlass.Item value=\"option2\" id=\"r2\" />\n * <label htmlFor=\"r2\">Option 2</label>\n * </RadioGroupGlass.Root>\n *\n * // Controlled\n * <RadioGroupGlass.Root value={value} onValueChange={setValue}>\n * ...\n * </RadioGroupGlass.Root>\n * ```\n */\n\nimport * as React from 'react';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { Circle } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// ROOT COMPONENT\n// ========================================\n\nexport type RadioGroupGlassRootProps = React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Root\n>;\n\nconst RadioGroupGlassRoot = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupGlassRootProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root ref={ref} className={cn('grid gap-2', className)} {...props} />\n));\n\nRadioGroupGlassRoot.displayName = 'RadioGroupGlassRoot';\n\n// ========================================\n// ITEM COMPONENT\n// ========================================\n\nexport type RadioGroupGlassItemProps = React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Item\n>;\n\nconst RadioGroupGlassItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupGlassItemProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n // Base styling\n 'aspect-square h-4 w-4 rounded-full',\n // Glass border and background\n 'border border-[var(--radio-border,var(--glass-border))]',\n 'bg-[var(--radio-bg,transparent)]',\n // Text/indicator color\n 'text-[var(--radio-indicator,var(--semantic-primary))]',\n // Focus styling\n 'ring-offset-background',\n 'focus:outline-none focus-visible:ring-2',\n 'focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2',\n // Disabled state\n 'disabled:cursor-not-allowed disabled:opacity-50',\n // Checked state\n 'data-[state=checked]:border-[var(--radio-border-checked,var(--semantic-primary))]',\n 'data-[state=checked]:bg-[var(--radio-bg-checked,var(--semantic-primary-subtle))]',\n // Transition\n 'transition-all duration-200',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle\n className={cn(\n 'h-2.5 w-2.5 fill-current text-current',\n // Glow effect for checked state\n 'drop-shadow-[0_0_4px_var(--semantic-primary)]'\n )}\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n));\n\nRadioGroupGlassItem.displayName = 'RadioGroupGlassItem';\n\n// ========================================\n// COMPOUND EXPORT\n// ========================================\n\n/**\n * RadioGroupGlass - A glass-themed radio button group\n *\n * @example\n * ```tsx\n * // Settings form with radio options\n * <form>\n * <fieldset>\n * <legend className=\"text-sm font-medium mb-3\">Theme Preference</legend>\n * <RadioGroupGlass.Root defaultValue=\"system\" className=\"space-y-3\">\n * <div className=\"flex items-center space-x-2\">\n * <RadioGroupGlass.Item value=\"light\" id=\"theme-light\" />\n * <label htmlFor=\"theme-light\" className=\"text-sm\">Light</label>\n * </div>\n * <div className=\"flex items-center space-x-2\">\n * <RadioGroupGlass.Item value=\"dark\" id=\"theme-dark\" />\n * <label htmlFor=\"theme-dark\" className=\"text-sm\">Dark</label>\n * </div>\n * <div className=\"flex items-center space-x-2\">\n * <RadioGroupGlass.Item value=\"system\" id=\"theme-system\" />\n * <label htmlFor=\"theme-system\" className=\"text-sm\">System</label>\n * </div>\n * </RadioGroupGlass.Root>\n * </fieldset>\n * </form>\n *\n * // Card-style radio group\n * <RadioGroupGlass.Root className=\"grid grid-cols-3 gap-4\">\n * {plans.map((plan) => (\n * <label\n * key={plan.id}\n * htmlFor={plan.id}\n * className=\"cursor-pointer\"\n * >\n * <GlassCard className=\"p-4 has-[:checked]:border-primary\">\n * <RadioGroupGlass.Item value={plan.id} id={plan.id} className=\"sr-only\" />\n * <h3 className=\"font-medium\">{plan.name}</h3>\n * <p className=\"text-sm text-muted-foreground\">{plan.price}</p>\n * </GlassCard>\n * </label>\n * ))}\n * </RadioGroupGlass.Root>\n * ```\n */\nexport const RadioGroupGlass = {\n Root: RadioGroupGlassRoot,\n Item: RadioGroupGlassItem,\n};\n\n// Named exports for direct imports\nexport { RadioGroupGlassRoot, RadioGroupGlassItem };\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SheetGlass Component\n *\n * Glass-themed side panel drawer with:\n * - Theme-aware styling (glass/light/aurora)\n * - Four side positions (top, right, bottom, left)\n * - Smooth slide animations\n * - Backdrop blur overlay\n * - 100% shadcn/ui Sheet API compatible\n *\n * @accessibility\n * - Uses `role=\"dialog\"` and `aria-modal=\"true\"`\n * - Escape key closes the sheet\n * - Focus trapped within sheet when open\n * - Focus returns to trigger on close\n * - Body scroll locked when open\n *\n * @example\n * ```tsx\n * // Basic sheet (right side)\n * <SheetGlass.Root>\n * <SheetGlass.Trigger asChild>\n * <ButtonGlass>Open Menu</ButtonGlass>\n * </SheetGlass.Trigger>\n * <SheetGlass.Content>\n * <SheetGlass.Header>\n * <SheetGlass.Title>Menu</SheetGlass.Title>\n * <SheetGlass.Description>Navigation options</SheetGlass.Description>\n * </SheetGlass.Header>\n * <div className=\"py-4\">Content here</div>\n * <SheetGlass.Footer>\n * <SheetGlass.Close asChild>\n * <ButtonGlass>Close</ButtonGlass>\n * </SheetGlass.Close>\n * </SheetGlass.Footer>\n * </SheetGlass.Content>\n * </SheetGlass.Root>\n *\n * // Left side sheet\n * <SheetGlass.Root>\n * <SheetGlass.Trigger>Open</SheetGlass.Trigger>\n * <SheetGlass.Content side=\"left\">...</SheetGlass.Content>\n * </SheetGlass.Root>\n * ```\n */\n\nimport * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// VARIANTS\n// ========================================\n\nconst sheetVariants = cva(\n // Base styles\n [\n 'fixed z-50 gap-4 p-6',\n // Glass styling\n 'bg-[var(--sheet-bg,var(--modal-bg))]',\n 'border-[var(--sheet-border,var(--modal-border))]',\n 'backdrop-blur-lg',\n // Animation base\n 'transition-all duration-300 ease-in-out',\n // Data state animations\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n ],\n {\n variants: {\n side: {\n top: [\n 'inset-x-0 top-0 border-b',\n 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n ],\n bottom: [\n 'inset-x-0 bottom-0 border-t',\n 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n ],\n left: [\n 'inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',\n 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left',\n ],\n right: [\n 'inset-y-0 right-0 h-full w-3/4 border-r sm:max-w-sm',\n 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right',\n ],\n },\n },\n defaultVariants: {\n side: 'right',\n },\n }\n);\n\n// ========================================\n// ROOT COMPONENT\n// ========================================\n\nconst SheetGlassRoot = DialogPrimitive.Root;\n\n// ========================================\n// TRIGGER COMPONENT\n// ========================================\n\nconst SheetGlassTrigger = DialogPrimitive.Trigger;\n\n// ========================================\n// CLOSE COMPONENT\n// ========================================\n\nconst SheetGlassClose = DialogPrimitive.Close;\n\n// ========================================\n// PORTAL COMPONENT\n// ========================================\n\nconst SheetGlassPortal = DialogPrimitive.Portal;\n\n// ========================================\n// OVERLAY COMPONENT\n// ========================================\n\nexport type SheetGlassOverlayProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>;\n\nconst SheetGlassOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n SheetGlassOverlayProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50',\n // Glass overlay\n 'bg-[var(--sheet-overlay,var(--modal-overlay))]',\n 'backdrop-blur-sm',\n // Animations\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n));\n\nSheetGlassOverlay.displayName = 'SheetGlassOverlay';\n\n// ========================================\n// CONTENT COMPONENT\n// ========================================\n\nexport interface SheetGlassContentProps\n extends\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetGlassContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n SheetGlassContentProps\n>(({ side = 'right', className, children, ...props }, ref) => (\n <SheetGlassPortal>\n <SheetGlassOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className={cn(\n 'absolute right-4 top-4 rounded-sm',\n 'opacity-70 ring-offset-background',\n 'transition-opacity hover:opacity-100',\n 'focus:outline-none focus:ring-2 focus:ring-[var(--focus-ring)] focus:ring-offset-2',\n 'disabled:pointer-events-none',\n 'data-[state=open]:bg-secondary'\n )}\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </SheetGlassPortal>\n));\n\nSheetGlassContent.displayName = 'SheetGlassContent';\n\n// ========================================\n// HEADER COMPONENT\n// ========================================\n\nexport type SheetGlassHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SheetGlassHeader = ({ className, ...props }: SheetGlassHeaderProps) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n);\n\nSheetGlassHeader.displayName = 'SheetGlassHeader';\n\n// ========================================\n// FOOTER COMPONENT\n// ========================================\n\nexport type SheetGlassFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SheetGlassFooter = ({ className, ...props }: SheetGlassFooterProps) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n);\n\nSheetGlassFooter.displayName = 'SheetGlassFooter';\n\n// ========================================\n// TITLE COMPONENT\n// ========================================\n\nexport type SheetGlassTitleProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\nconst SheetGlassTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n SheetGlassTitleProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n 'text-lg font-semibold',\n 'text-[var(--sheet-title,var(--text-primary))]',\n className\n )}\n {...props}\n />\n));\n\nSheetGlassTitle.displayName = 'SheetGlassTitle';\n\n// ========================================\n// DESCRIPTION COMPONENT\n// ========================================\n\nexport type SheetGlassDescriptionProps = React.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Description\n>;\n\nconst SheetGlassDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n SheetGlassDescriptionProps\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm', 'text-[var(--sheet-description,var(--text-muted))]', className)}\n {...props}\n />\n));\n\nSheetGlassDescription.displayName = 'SheetGlassDescription';\n\n// ========================================\n// COMPOUND EXPORT\n// ========================================\n\n/**\n * SheetGlass - A glass-themed side panel drawer\n *\n * @example\n * ```tsx\n * // Mobile navigation menu\n * <SheetGlass.Root>\n * <SheetGlass.Trigger asChild>\n * <ButtonGlass variant=\"ghost\" size=\"icon\">\n * <Menu className=\"h-5 w-5\" />\n * </ButtonGlass>\n * </SheetGlass.Trigger>\n * <SheetGlass.Content side=\"left\">\n * <SheetGlass.Header>\n * <SheetGlass.Title>Navigation</SheetGlass.Title>\n * </SheetGlass.Header>\n * <nav className=\"flex flex-col gap-4 py-4\">\n * <a href=\"/\">Home</a>\n * <a href=\"/about\">About</a>\n * <a href=\"/contact\">Contact</a>\n * </nav>\n * </SheetGlass.Content>\n * </SheetGlass.Root>\n *\n * // Filter panel\n * <SheetGlass.Root>\n * <SheetGlass.Trigger asChild>\n * <ButtonGlass variant=\"outline\">\n * <Filter className=\"h-4 w-4 mr-2\" />\n * Filters\n * </ButtonGlass>\n * </SheetGlass.Trigger>\n * <SheetGlass.Content>\n * <SheetGlass.Header>\n * <SheetGlass.Title>Filters</SheetGlass.Title>\n * <SheetGlass.Description>\n * Narrow down your search results\n * </SheetGlass.Description>\n * </SheetGlass.Header>\n * <div className=\"py-4 space-y-4\">\n * <CheckboxGlass label=\"In Stock\" />\n * <CheckboxGlass label=\"On Sale\" />\n * <SliderGlass label=\"Price Range\" />\n * </div>\n * <SheetGlass.Footer>\n * <SheetGlass.Close asChild>\n * <ButtonGlass variant=\"ghost\">Reset</ButtonGlass>\n * </SheetGlass.Close>\n * <ButtonGlass>Apply Filters</ButtonGlass>\n * </SheetGlass.Footer>\n * </SheetGlass.Content>\n * </SheetGlass.Root>\n *\n * // Bottom sheet for mobile\n * <SheetGlass.Root>\n * <SheetGlass.Trigger>Share</SheetGlass.Trigger>\n * <SheetGlass.Content side=\"bottom\">\n * <SheetGlass.Header>\n * <SheetGlass.Title>Share</SheetGlass.Title>\n * </SheetGlass.Header>\n * <div className=\"grid grid-cols-4 gap-4 py-4\">\n * {shareOptions.map((option) => (\n * <button key={option.name} className=\"flex flex-col items-center gap-2\">\n * <option.icon className=\"h-8 w-8\" />\n * <span className=\"text-xs\">{option.name}</span>\n * </button>\n * ))}\n * </div>\n * </SheetGlass.Content>\n * </SheetGlass.Root>\n * ```\n */\nexport const SheetGlass = {\n Root: SheetGlassRoot,\n Trigger: SheetGlassTrigger,\n Close: SheetGlassClose,\n Portal: SheetGlassPortal,\n Overlay: SheetGlassOverlay,\n Content: SheetGlassContent,\n Header: SheetGlassHeader,\n Footer: SheetGlassFooter,\n Title: SheetGlassTitle,\n Description: SheetGlassDescription,\n};\n\n// Named exports for direct imports\nexport {\n SheetGlassRoot,\n SheetGlassTrigger,\n SheetGlassClose,\n SheetGlassPortal,\n SheetGlassOverlay,\n SheetGlassContent,\n SheetGlassHeader,\n SheetGlassFooter,\n SheetGlassTitle,\n SheetGlassDescription,\n};\n","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * @fileOverview Default Legend Content\n */\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport { Surface } from '../container/Surface';\nimport { Symbols } from '../shape/Symbols';\nimport { adaptEventsOfChild } from '../util/types';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nvar SIZE = 32;\nvar defaultLegendContentDefaultProps = {\n align: 'center',\n iconSize: 14,\n inactiveColor: '#ccc',\n layout: 'horizontal',\n verticalAlign: 'middle'\n};\nfunction Icon(_ref) {\n var {\n data,\n iconType,\n inactiveColor\n } = _ref;\n var halfSize = SIZE / 2;\n var sixthSize = SIZE / 6;\n var thirdSize = SIZE / 3;\n var color = data.inactive ? inactiveColor : data.color;\n var preferredIcon = iconType !== null && iconType !== void 0 ? iconType : data.type;\n if (preferredIcon === 'none') {\n return null;\n }\n if (preferredIcon === 'plainline') {\n var _data$payload;\n return /*#__PURE__*/React.createElement(\"line\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n strokeDasharray: (_data$payload = data.payload) === null || _data$payload === void 0 ? void 0 : _data$payload.strokeDasharray,\n x1: 0,\n y1: halfSize,\n x2: SIZE,\n y2: halfSize,\n className: \"recharts-legend-icon\"\n });\n }\n if (preferredIcon === 'line') {\n return /*#__PURE__*/React.createElement(\"path\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n d: \"M0,\".concat(halfSize, \"h\").concat(thirdSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n H\").concat(SIZE, \"M\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(thirdSize, \",\").concat(halfSize),\n className: \"recharts-legend-icon\"\n });\n }\n if (preferredIcon === 'rect') {\n return /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"none\",\n fill: color,\n d: \"M0,\".concat(SIZE / 8, \"h\").concat(SIZE, \"v\").concat(SIZE * 3 / 4, \"h\").concat(-SIZE, \"z\"),\n className: \"recharts-legend-icon\"\n });\n }\n if (/*#__PURE__*/React.isValidElement(data.legendIcon)) {\n var iconProps = _objectSpread({}, data);\n delete iconProps.legendIcon;\n return /*#__PURE__*/React.cloneElement(data.legendIcon, iconProps);\n }\n return /*#__PURE__*/React.createElement(Symbols, {\n fill: color,\n cx: halfSize,\n cy: halfSize,\n size: SIZE,\n sizeType: \"diameter\",\n type: preferredIcon\n });\n}\nfunction Items(props) {\n var {\n payload,\n iconSize,\n layout,\n formatter,\n inactiveColor,\n iconType\n } = props;\n var viewBox = {\n x: 0,\n y: 0,\n width: SIZE,\n height: SIZE\n };\n var itemStyle = {\n display: layout === 'horizontal' ? 'inline-block' : 'block',\n marginRight: 10\n };\n var svgStyle = {\n display: 'inline-block',\n verticalAlign: 'middle',\n marginRight: 4\n };\n return payload.map((entry, i) => {\n var finalFormatter = entry.formatter || formatter;\n var className = clsx({\n 'recharts-legend-item': true,\n [\"legend-item-\".concat(i)]: true,\n inactive: entry.inactive\n });\n if (entry.type === 'none') {\n return null;\n }\n var color = entry.inactive ? inactiveColor : entry.color;\n var finalValue = finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value;\n return /*#__PURE__*/React.createElement(\"li\", _extends({\n className: className,\n style: itemStyle,\n key: \"legend-item-\".concat(i)\n }, adaptEventsOfChild(props, entry, i)), /*#__PURE__*/React.createElement(Surface, {\n width: iconSize,\n height: iconSize,\n viewBox: viewBox,\n style: svgStyle,\n \"aria-label\": \"\".concat(finalValue, \" legend icon\")\n }, /*#__PURE__*/React.createElement(Icon, {\n data: entry,\n iconType: iconType,\n inactiveColor: inactiveColor\n })), /*#__PURE__*/React.createElement(\"span\", {\n className: \"recharts-legend-item-text\",\n style: {\n color\n }\n }, finalValue));\n });\n}\nexport var DefaultLegendContent = outsideProps => {\n var props = resolveDefaultProps(outsideProps, defaultLegendContentDefaultProps);\n var {\n payload,\n layout,\n align\n } = props;\n if (!payload || !payload.length) {\n return null;\n }\n var finalStyle = {\n padding: 0,\n margin: 0,\n textAlign: layout === 'horizontal' ? align : 'left'\n };\n return /*#__PURE__*/React.createElement(\"ul\", {\n className: \"recharts-default-legend\",\n style: finalStyle\n }, /*#__PURE__*/React.createElement(Items, _extends({}, props, {\n payload: payload\n })));\n};","import { useAppSelector } from '../state/hooks';\nimport { selectLegendPayload } from '../state/selectors/legendSelectors';\n\n/**\n * Use this hook in Legend, or anywhere else where you want to read the current Legend items.\n * @return all Legend items ready to be rendered\n */\nexport function useLegendPayload() {\n return useAppSelector(selectLegendPayload);\n}","var _excluded = [\"contextPayload\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from 'react';\nimport { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useLegendPortal } from '../context/legendPortalContext';\nimport { DefaultLegendContent } from './DefaultLegendContent';\nimport { isNumber } from '../util/DataUtils';\nimport { getUniqPayload } from '../util/payload/getUniqPayload';\nimport { useLegendPayload } from '../context/legendPayloadContext';\nimport { useElementOffset } from '../util/useElementOffset';\nimport { useChartHeight, useChartWidth, useMargin } from '../context/chartLayoutContext';\nimport { setLegendSettings, setLegendSize } from '../state/legendSlice';\nimport { useAppDispatch } from '../state/hooks';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nfunction defaultUniqBy(entry) {\n return entry.value;\n}\nfunction LegendContent(props) {\n var {\n contextPayload\n } = props,\n otherProps = _objectWithoutProperties(props, _excluded);\n var finalPayload = getUniqPayload(contextPayload, props.payloadUniqBy, defaultUniqBy);\n var contentProps = _objectSpread(_objectSpread({}, otherProps), {}, {\n payload: finalPayload\n });\n if (/*#__PURE__*/React.isValidElement(props.content)) {\n return /*#__PURE__*/React.cloneElement(props.content, contentProps);\n }\n if (typeof props.content === 'function') {\n return /*#__PURE__*/React.createElement(props.content, contentProps);\n }\n return /*#__PURE__*/React.createElement(DefaultLegendContent, contentProps);\n}\nfunction getDefaultPosition(style, props, margin, chartWidth, chartHeight, box) {\n var {\n layout,\n align,\n verticalAlign\n } = props;\n var hPos, vPos;\n if (!style || (style.left === undefined || style.left === null) && (style.right === undefined || style.right === null)) {\n if (align === 'center' && layout === 'vertical') {\n hPos = {\n left: ((chartWidth || 0) - box.width) / 2\n };\n } else {\n hPos = align === 'right' ? {\n right: margin && margin.right || 0\n } : {\n left: margin && margin.left || 0\n };\n }\n }\n if (!style || (style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null)) {\n if (verticalAlign === 'middle') {\n vPos = {\n top: ((chartHeight || 0) - box.height) / 2\n };\n } else {\n vPos = verticalAlign === 'bottom' ? {\n bottom: margin && margin.bottom || 0\n } : {\n top: margin && margin.top || 0\n };\n }\n }\n return _objectSpread(_objectSpread({}, hPos), vPos);\n}\nfunction LegendSettingsDispatcher(props) {\n var dispatch = useAppDispatch();\n useEffect(() => {\n dispatch(setLegendSettings(props));\n }, [dispatch, props]);\n return null;\n}\nfunction LegendSizeDispatcher(props) {\n var dispatch = useAppDispatch();\n useEffect(() => {\n dispatch(setLegendSize(props));\n return () => {\n dispatch(setLegendSize({\n width: 0,\n height: 0\n }));\n };\n }, [dispatch, props]);\n return null;\n}\nfunction getWidthOrHeight(layout, height, width, maxWidth) {\n if (layout === 'vertical' && isNumber(height)) {\n return {\n height\n };\n }\n if (layout === 'horizontal') {\n return {\n width: width || maxWidth\n };\n }\n return null;\n}\nexport var legendDefaultProps = {\n align: 'center',\n iconSize: 14,\n itemSorter: 'value',\n layout: 'horizontal',\n verticalAlign: 'bottom'\n};\nexport function Legend(outsideProps) {\n var props = resolveDefaultProps(outsideProps, legendDefaultProps);\n var contextPayload = useLegendPayload();\n var legendPortalFromContext = useLegendPortal();\n var margin = useMargin();\n var {\n width: widthFromProps,\n height: heightFromProps,\n wrapperStyle,\n portal: portalFromProps\n } = props;\n // The contextPayload is not used directly inside the hook, but we need the onBBoxUpdate call\n // when the payload changes, therefore it's here as a dependency.\n var [lastBoundingBox, updateBoundingBox] = useElementOffset([contextPayload]);\n var chartWidth = useChartWidth();\n var chartHeight = useChartHeight();\n if (chartWidth == null || chartHeight == null) {\n return null;\n }\n var maxWidth = chartWidth - ((margin === null || margin === void 0 ? void 0 : margin.left) || 0) - ((margin === null || margin === void 0 ? void 0 : margin.right) || 0);\n var widthOrHeight = getWidthOrHeight(props.layout, heightFromProps, widthFromProps, maxWidth);\n // if the user supplies their own portal, only use their defined wrapper styles\n var outerStyle = portalFromProps ? wrapperStyle : _objectSpread(_objectSpread({\n position: 'absolute',\n width: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.width) || widthFromProps || 'auto',\n height: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.height) || heightFromProps || 'auto'\n }, getDefaultPosition(wrapperStyle, props, margin, chartWidth, chartHeight, lastBoundingBox)), wrapperStyle);\n var legendPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : legendPortalFromContext;\n if (legendPortal == null || contextPayload == null) {\n return null;\n }\n var legendElement = /*#__PURE__*/React.createElement(\"div\", {\n className: \"recharts-legend-wrapper\",\n style: outerStyle,\n ref: updateBoundingBox\n }, /*#__PURE__*/React.createElement(LegendSettingsDispatcher, {\n layout: props.layout,\n align: props.align,\n verticalAlign: props.verticalAlign,\n itemSorter: props.itemSorter\n }), !portalFromProps && /*#__PURE__*/React.createElement(LegendSizeDispatcher, {\n width: lastBoundingBox.width,\n height: lastBoundingBox.height\n }), /*#__PURE__*/React.createElement(LegendContent, _extends({}, props, widthOrHeight, {\n margin: margin,\n chartWidth: chartWidth,\n chartHeight: chartHeight,\n contextPayload: contextPayload\n })));\n return /*#__PURE__*/createPortal(legendElement, legendPortal);\n}\nLegend.displayName = 'Legend';","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SplitLayoutGlass Context\n *\n * Provides state management for compound SplitLayoutGlass component.\n * Handles selection state, mobile detection, and toggle functionality.\n *\n * @module split-layout-context\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n useEffect,\n type FC,\n type ReactNode,\n} from 'react';\n\n// ========================================\n// TYPES\n// ========================================\n\nimport type { IntensityType } from '@/lib/variants/glass-card-variants';\n\nexport type Breakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type MobileMode = 'stack' | 'accordion' | 'drawer';\n\n/**\n * Context value for SplitLayoutGlass compound components\n *\n * API is designed to be consistent with shadcn/ui Sidebar patterns.\n */\nexport interface SplitLayoutContextValue {\n // === STATE ===\n /** Currently selected key for master-detail pattern */\n selectedKey: string | null;\n /** Set selected key */\n setSelectedKey: (key: string | null) => void;\n\n /** Sidebar open state (desktop) */\n isOpen: boolean;\n /** Set sidebar open state */\n setIsOpen: (open: boolean) => void;\n\n /** Mobile drawer/accordion open state */\n isMobileOpen: boolean;\n /** Set mobile open state */\n setMobileOpen: (open: boolean) => void;\n\n // === SHADCN ALIASES ===\n /** Sidebar state: \"expanded\" | \"collapsed\" (shadcn pattern) */\n state: 'expanded' | 'collapsed';\n /** Alias for isOpen (shadcn naming) */\n open: boolean;\n /** Alias for setIsOpen (shadcn naming) */\n setOpen: (open: boolean) => void;\n /** Alias for isMobileOpen (shadcn naming) */\n openMobile: boolean;\n /** Alias for setMobileOpen (shadcn naming) */\n setOpenMobile: (open: boolean) => void;\n /** Alias for toggle (shadcn naming) */\n toggleSidebar: () => void;\n\n // === RESPONSIVE ===\n /** Current viewport is below breakpoint */\n isMobile: boolean;\n\n // === CONFIG ===\n /** Breakpoint for desktop layout */\n breakpoint: Breakpoint;\n /** Mobile layout mode */\n mobileMode: MobileMode;\n /** Glass intensity for panels */\n intensity: IntensityType;\n /** Sticky offset from viewport top */\n stickyOffset: number;\n\n // === ACTIONS ===\n /** Toggle sidebar (desktop) or drawer (mobile) */\n toggle: () => void;\n}\n\n// ========================================\n// CONTEXT\n// ========================================\n\nconst SplitLayoutContext = createContext<SplitLayoutContextValue | null>(null);\n\n/**\n * Hook to access SplitLayout context\n *\n * @throws Error if used outside of SplitLayoutGlass.Provider\n *\n * @example\n * ```tsx\n * function YearCard({ year }) {\n * const { selectedKey, setSelectedKey, isMobile } = useSplitLayout();\n * const isSelected = selectedKey === year.id;\n *\n * return (\n * <button\n * onClick={() => setSelectedKey(year.id)}\n * className={cn('p-3', isSelected && 'bg-primary/10')}\n * >\n * {year.year}\n * </button>\n * );\n * }\n * ```\n */\nexport function useSplitLayout(): SplitLayoutContextValue {\n const context = useContext(SplitLayoutContext);\n if (!context) {\n throw new Error(\n 'useSplitLayout must be used within SplitLayoutGlass.Provider. ' +\n 'Wrap your component tree with <SplitLayoutGlass.Provider>.'\n );\n }\n return context;\n}\n\n/**\n * Optional hook that returns null if outside provider (doesn't throw)\n */\nexport function useSplitLayoutOptional(): SplitLayoutContextValue | null {\n return useContext(SplitLayoutContext);\n}\n\n// ========================================\n// BREAKPOINT MAP\n// ========================================\n\nconst BREAKPOINT_VALUES: Record<Breakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1440,\n '2xl': 1536,\n};\n\n// ========================================\n// PROVIDER\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Provider\n */\nexport interface SplitLayoutProviderProps {\n children: ReactNode;\n\n // === SELECTION STATE ===\n /** Controlled selected key */\n selectedKey?: string | null;\n /** Callback when selected key changes */\n onSelectedKeyChange?: (key: string | null) => void;\n /** Default selected key (uncontrolled) */\n defaultSelectedKey?: string | null;\n\n // === OPEN STATE ===\n /** Controlled open state (desktop) */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state */\n defaultOpen?: boolean;\n\n // === CONFIG ===\n /** Breakpoint for mobile/desktop switch @default \"md\" */\n breakpoint?: Breakpoint;\n /** Mobile layout mode @default \"stack\" */\n mobileMode?: MobileMode;\n /** Glass intensity for panels @default \"medium\" */\n intensity?: IntensityType;\n /** Sticky offset from viewport top @default 24 */\n stickyOffset?: number;\n\n // === PERSISTENCE ===\n /** URL param name for selectedKey persistence */\n urlParamName?: string;\n\n // === KEYBOARD ===\n /** Keyboard shortcut key for toggle (Cmd/Ctrl + key) @default \"b\" */\n keyboardShortcut?: string | false;\n}\n\n/**\n * Provider component for SplitLayoutGlass compound components\n *\n * @example\n * ```tsx\n * <SplitLayoutGlass.Provider\n * defaultSelectedKey=\"2024\"\n * mobileMode=\"accordion\"\n * onSelectedKeyChange={(key) => console.log('Selected:', key)}\n * >\n * <SplitLayoutGlass.Root>\n * ...\n * </SplitLayoutGlass.Root>\n * </SplitLayoutGlass.Provider>\n * ```\n */\nexport const SplitLayoutProvider: FC<SplitLayoutProviderProps> = ({\n children,\n selectedKey: controlledSelectedKey,\n onSelectedKeyChange,\n defaultSelectedKey = null,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = true,\n breakpoint = 'md',\n mobileMode = 'stack',\n intensity = 'medium',\n stickyOffset = 24,\n urlParamName,\n keyboardShortcut = 'b',\n}) => {\n // === SELECTION STATE (controlled/uncontrolled) ===\n const [internalSelectedKey, setInternalSelectedKey] = useState<string | null>(() => {\n // Try to read from URL if urlParamName is provided\n if (urlParamName && typeof window !== 'undefined') {\n const params = new URLSearchParams(window.location.search);\n const urlValue = params.get(urlParamName);\n if (urlValue) return urlValue;\n }\n return defaultSelectedKey;\n });\n\n const isSelectedKeyControlled = controlledSelectedKey !== undefined;\n const selectedKey = isSelectedKeyControlled ? controlledSelectedKey : internalSelectedKey;\n\n const setSelectedKey = useCallback(\n (key: string | null) => {\n if (!isSelectedKeyControlled) {\n setInternalSelectedKey(key);\n }\n onSelectedKeyChange?.(key);\n\n // Update URL if urlParamName is provided\n if (urlParamName && typeof window !== 'undefined') {\n const url = new URL(window.location.href);\n if (key) {\n url.searchParams.set(urlParamName, key);\n } else {\n url.searchParams.delete(urlParamName);\n }\n window.history.replaceState({}, '', url.toString());\n }\n },\n [isSelectedKeyControlled, onSelectedKeyChange, urlParamName]\n );\n\n // === OPEN STATE (controlled/uncontrolled) ===\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isOpenControlled = controlledOpen !== undefined;\n const isOpen = isOpenControlled ? controlledOpen : internalOpen;\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (!isOpenControlled) {\n setInternalOpen(open);\n }\n onOpenChange?.(open);\n },\n [isOpenControlled, onOpenChange]\n );\n\n // === MOBILE OPEN STATE ===\n const [isMobileOpen, setMobileOpen] = useState(false);\n\n // === RESPONSIVE DETECTION ===\n const [isMobile, setIsMobile] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.innerWidth < BREAKPOINT_VALUES[breakpoint];\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const checkMobile = () => {\n setIsMobile(window.innerWidth < BREAKPOINT_VALUES[breakpoint]);\n };\n\n // Check on mount\n checkMobile();\n\n // Listen for resize\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, [breakpoint]);\n\n // === TOGGLE ACTION ===\n const toggle = useCallback(() => {\n if (isMobile) {\n setMobileOpen((prev) => !prev);\n } else {\n setIsOpen(!isOpen);\n }\n }, [isMobile, isOpen, setIsOpen]);\n\n // === KEYBOARD NAVIGATION ===\n useEffect(() => {\n if (!keyboardShortcut) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n // Escape - close mobile drawer/accordion\n if (e.key === 'Escape' && isMobile && isMobileOpen) {\n e.preventDefault();\n setMobileOpen(false);\n return;\n }\n\n // Cmd/Ctrl + key - toggle sidebar\n if (e.key === keyboardShortcut && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n toggle();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [keyboardShortcut, isMobile, isMobileOpen, toggle]);\n\n // === CONTEXT VALUE ===\n const value = useMemo<SplitLayoutContextValue>(\n () => ({\n // Original API\n selectedKey,\n setSelectedKey,\n isOpen,\n setIsOpen,\n isMobileOpen,\n setMobileOpen,\n isMobile,\n breakpoint,\n mobileMode,\n intensity,\n stickyOffset,\n toggle,\n\n // shadcn aliases\n state: isOpen ? 'expanded' : 'collapsed',\n open: isOpen,\n setOpen: setIsOpen,\n openMobile: isMobileOpen,\n setOpenMobile: setMobileOpen,\n toggleSidebar: toggle,\n }),\n [\n selectedKey,\n setSelectedKey,\n isOpen,\n setIsOpen,\n isMobileOpen,\n isMobile,\n breakpoint,\n mobileMode,\n intensity,\n stickyOffset,\n toggle,\n ]\n );\n\n return <SplitLayoutContext.Provider value={value}>{children}</SplitLayoutContext.Provider>;\n};\n\nSplitLayoutProvider.displayName = 'SplitLayoutGlass.Provider';\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SplitLayoutGlass Accordion Components\n *\n * Mobile-specific components that render content in accordion pattern.\n * Details expand below the selected item instead of showing in a separate panel.\n *\n * @module split-layout-accordion\n */\n\nimport { forwardRef, type ReactNode, useId, useRef, useEffect, useCallback, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { GlassCard } from '@/components/glass/ui/glass-card';\nimport { useSplitLayout, useSplitLayoutOptional } from './split-layout-context';\n\n// ========================================\n// ACCORDION ROOT\n// ========================================\n\n/**\n * Props for SplitLayoutAccordion.Root component\n * Container for accordion items in mobile view\n */\nexport interface SplitLayoutAccordionRootProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * ARIA label for the accordion region\n * @default \"Content accordion\"\n */\n label?: string;\n}\n\nconst SplitLayoutAccordionRoot = forwardRef<HTMLDivElement, SplitLayoutAccordionRootProps>(\n ({ children, label = 'Content accordion', className, ...props }, ref) => {\n const context = useSplitLayoutOptional();\n const intensity = context?.intensity ?? 'medium';\n\n return (\n <GlassCard\n asChild\n intensity={intensity}\n padding=\"none\"\n className={cn('divide-y divide-white/10', className)}\n >\n <div ref={ref} role=\"region\" aria-label={label} data-split-accordion=\"\" {...props}>\n {children}\n </div>\n </GlassCard>\n );\n }\n);\n\nSplitLayoutAccordionRoot.displayName = 'SplitLayoutAccordion.Root';\n\n// ========================================\n// ACCORDION ITEM\n// ========================================\n\n/**\n * Props for SplitLayoutAccordion.Item component\n * A single accordion item with trigger and collapsible content\n */\nexport interface SplitLayoutAccordionItemProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /**\n * Unique key for this item (used for selection)\n */\n itemKey: string;\n /**\n * Content shown in the trigger/header area\n */\n trigger: ReactNode;\n /**\n * Content shown when expanded (details)\n */\n children: ReactNode;\n /**\n * Disable this item\n * @default false\n */\n disabled?: boolean;\n}\n\nconst SplitLayoutAccordionItem = forwardRef<HTMLDivElement, SplitLayoutAccordionItemProps>(\n ({ itemKey, trigger, children, disabled = false, className, ...props }, ref) => {\n const { selectedKey, setSelectedKey } = useSplitLayout();\n const isExpanded = selectedKey === itemKey;\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number | null>(null);\n const triggerId = useId();\n const contentId = useId();\n\n // Measure content height for smooth animation\n useEffect(() => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.scrollHeight);\n }\n }, [children, isExpanded]);\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n setSelectedKey(isExpanded ? null : itemKey);\n }, [disabled, isExpanded, itemKey, setSelectedKey]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n handleToggle();\n break;\n case 'ArrowDown': {\n e.preventDefault();\n // Focus next item trigger\n const next = (e.currentTarget as HTMLElement).parentElement?.nextElementSibling;\n const nextTrigger = next?.querySelector('[data-accordion-trigger]') as HTMLElement;\n nextTrigger?.focus();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n // Focus previous item trigger\n const prev = (e.currentTarget as HTMLElement).parentElement?.previousElementSibling;\n const prevTrigger = prev?.querySelector('[data-accordion-trigger]') as HTMLElement;\n prevTrigger?.focus();\n break;\n }\n case 'Home': {\n e.preventDefault();\n // Focus first item trigger\n const first = (e.currentTarget as HTMLElement)\n .closest('[data-split-accordion]')\n ?.querySelector('[data-accordion-trigger]') as HTMLElement;\n first?.focus();\n break;\n }\n case 'End': {\n e.preventDefault();\n // Focus last item trigger\n const triggers = (e.currentTarget as HTMLElement)\n .closest('[data-split-accordion]')\n ?.querySelectorAll('[data-accordion-trigger]');\n const last = triggers?.[triggers.length - 1] as HTMLElement;\n last?.focus();\n break;\n }\n }\n },\n [disabled, handleToggle]\n );\n\n return (\n <div\n ref={ref}\n data-accordion-item=\"\"\n data-state={isExpanded ? 'open' : 'closed'}\n data-disabled={disabled || undefined}\n className={cn('overflow-hidden', disabled && 'opacity-50 cursor-not-allowed', className)}\n {...props}\n >\n {/* Trigger/Header */}\n <button\n type=\"button\"\n id={triggerId}\n data-accordion-trigger=\"\"\n aria-expanded={isExpanded}\n aria-controls={contentId}\n aria-disabled={disabled}\n disabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex w-full items-center justify-between gap-4',\n 'p-4 text-left',\n 'transition-colors duration-200',\n 'hover:bg-white/5 focus-visible:bg-white/5',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-white/20 focus-visible:ring-inset',\n disabled && 'pointer-events-none'\n )}\n >\n <div className=\"flex-1\">{trigger}</div>\n <ChevronDown\n className={cn(\n 'h-4 w-4 shrink-0 text-white/60',\n 'transition-transform duration-300 ease-out',\n isExpanded && 'rotate-180'\n )}\n />\n </button>\n\n {/* Content */}\n <div\n id={contentId}\n ref={contentRef}\n role=\"region\"\n aria-labelledby={triggerId}\n data-accordion-content=\"\"\n data-state={isExpanded ? 'open' : 'closed'}\n className={cn('overflow-hidden', 'transition-[max-height,opacity] duration-300 ease-out')}\n style={{\n maxHeight: isExpanded ? (contentHeight ?? 'auto') : 0,\n opacity: isExpanded ? 1 : 0,\n }}\n >\n <div className=\"p-4 pt-0 border-t border-white/5\">{children}</div>\n </div>\n </div>\n );\n }\n);\n\nSplitLayoutAccordionItem.displayName = 'SplitLayoutAccordion.Item';\n\n// ========================================\n// COMPOUND EXPORT\n// ========================================\n\n/**\n * SplitLayoutAccordion compound component for mobile accordion view\n *\n * @example\n * ```tsx\n * // Use with mobileMode=\"accordion\" in Provider\n * <SplitLayoutGlass.Provider mobileMode=\"accordion\">\n * {isMobile ? (\n * <SplitLayoutAccordion.Root>\n * {years.map((year) => (\n * <SplitLayoutAccordion.Item\n * key={year.id}\n * itemKey={year.id}\n * trigger={<YearTitle year={year} />}\n * >\n * <YearDetails year={year} />\n * </SplitLayoutAccordion.Item>\n * ))}\n * </SplitLayoutAccordion.Root>\n * ) : (\n * <SplitLayoutGlass.Root>...</SplitLayoutGlass.Root>\n * )}\n * </SplitLayoutGlass.Provider>\n * ```\n */\nexport const SplitLayoutAccordion = {\n Root: SplitLayoutAccordionRoot,\n Item: SplitLayoutAccordionItem,\n};\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * SplitLayoutGlass Component (Compound API only)\n *\n * A responsive two-column layout with sticky scroll behavior and glassmorphism styling.\n * Features independent scrolling in each panel after sticky positioning activates.\n *\n * @pattern MDN, GitHub Docs, Linear, shadcn Sidebar\n *\n * @example\n * ```tsx\n * <SplitLayoutGlass.Provider defaultSelectedKey=\"2024\">\n * <SplitLayoutGlass.Root ratio={{ sidebar: 1, main: 2 }}>\n * <SplitLayoutGlass.Sidebar>\n * <SplitLayoutGlass.SidebarHeader>Header</SplitLayoutGlass.SidebarHeader>\n * <SplitLayoutGlass.SidebarContent>Content</SplitLayoutGlass.SidebarContent>\n * </SplitLayoutGlass.Sidebar>\n * <SplitLayoutGlass.Main>\n * <SplitLayoutGlass.MainContent>Content</SplitLayoutGlass.MainContent>\n * </SplitLayoutGlass.Main>\n * </SplitLayoutGlass.Root>\n * </SplitLayoutGlass.Provider>\n * ```\n *\n * @since v2.2.0 - Legacy props API removed, Compound API only\n * @module split-layout-glass\n */\n\nimport { forwardRef, type CSSProperties, type ReactNode } from 'react';\nimport { Menu, X, PanelLeftClose, PanelLeftOpen } from 'lucide-react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\nimport { GlassCard } from '@/components/glass/ui/glass-card';\nimport { ButtonGlass } from '@/components/glass/ui/button-glass';\nimport { ScrollArea } from '@/components/ui/scroll-area';\n\n// Import context\nimport {\n SplitLayoutProvider,\n useSplitLayout,\n useSplitLayoutOptional,\n type SplitLayoutProviderProps,\n type SplitLayoutContextValue,\n type Breakpoint,\n type MobileMode,\n} from './split-layout-context';\n\nimport '@/glass-theme.css';\n\n// ========================================\n// GRID STYLES HOOK\n// ========================================\n\ninterface GridStylesConfig {\n ratio?: { sidebar: number; main: number };\n minSidebarWidth?: string;\n maxSidebarWidth?: string;\n gap?: number | { mobile?: number; desktop?: number };\n stickyOffset?: number;\n}\n\nfunction useGridStyles(config: GridStylesConfig) {\n const {\n ratio = { sidebar: 1, main: 2 },\n minSidebarWidth = '280px',\n maxSidebarWidth,\n gap = { mobile: 16, desktop: 24 },\n stickyOffset = 24,\n } = config;\n\n const gapMobile = typeof gap === 'number' ? gap : (gap.mobile ?? 16);\n const gapDesktop = typeof gap === 'number' ? gap : (gap.desktop ?? 24);\n\n const gridTemplate = maxSidebarWidth\n ? `minmax(${minSidebarWidth}, ${maxSidebarWidth}) ${ratio.main}fr`\n : `minmax(${minSidebarWidth}, ${ratio.sidebar}fr) ${ratio.main}fr`;\n\n const cssVars = {\n '--grid-template': gridTemplate,\n '--sticky-offset': `${stickyOffset}px`,\n '--sticky-max-height': `calc(100vh - calc(${stickyOffset}px * 2))`,\n '--gap-mobile': `${gapMobile}px`,\n '--gap-desktop': `${gapDesktop}px`,\n } as CSSProperties;\n\n return { cssVars };\n}\n\n// ========================================\n// ROOT COMPONENT\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Root component\n */\nexport interface SplitLayoutRootProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * Sidebar to main ratio in fr units\n * @default { sidebar: 1, main: 2 } (33% / 67%)\n * @example { sidebar: 1, main: 3 } = 25% / 75%\n */\n ratio?: { sidebar: number; main: number };\n /**\n * Minimum sidebar width (CSS value)\n * Prevents sidebar from shrinking below this on tablet\n * @default \"280px\"\n */\n minSidebarWidth?: string;\n /**\n * Maximum sidebar width (CSS value)\n * @example \"400px\" - sidebar won't exceed 400px\n */\n maxSidebarWidth?: string;\n /**\n * Gap between panels\n * @default { mobile: 16, desktop: 24 }\n */\n gap?: number | { mobile?: number; desktop?: number };\n /**\n * Breakpoint for desktop layout (overrides Provider's breakpoint)\n * @default \"md\" (768px)\n */\n breakpoint?: Breakpoint;\n /**\n * Mobile layout mode (below breakpoint)\n * - \"stack\": sidebar above main\n * - \"main-only\": hide sidebar\n * - \"sidebar-only\": hide main\n * @default \"stack\"\n */\n mobileLayout?: 'stack' | 'main-only' | 'sidebar-only';\n}\n\nconst SplitLayoutRoot = forwardRef<HTMLDivElement, SplitLayoutRootProps>(\n (\n {\n children,\n ratio = { sidebar: 1, main: 2 },\n minSidebarWidth = '300px',\n maxSidebarWidth,\n gap = { mobile: 16, desktop: 24 },\n breakpoint: breakpointProp,\n mobileLayout = 'stack',\n className,\n ...props\n },\n ref\n ) => {\n const context = useSplitLayoutOptional();\n const breakpoint = breakpointProp ?? context?.breakpoint ?? 'md';\n const stickyOffset = context?.stickyOffset ?? 24;\n\n const { cssVars } = useGridStyles({\n ratio,\n minSidebarWidth,\n maxSidebarWidth,\n gap,\n stickyOffset,\n });\n\n const bp = breakpoint;\n\n // Build gap classes based on breakpoint\n const gapClasses = {\n sm: 'gap-[var(--gap-mobile)] sm:gap-[var(--gap-desktop)]',\n md: 'gap-[var(--gap-mobile)] md:gap-[var(--gap-desktop)]',\n lg: 'gap-[var(--gap-mobile)] lg:gap-[var(--gap-desktop)]',\n xl: 'gap-[var(--gap-mobile)] xl:gap-[var(--gap-desktop)]',\n '2xl': 'gap-[var(--gap-mobile)] 2xl:gap-[var(--gap-desktop)]',\n };\n\n const gridClasses = {\n sm: 'sm:grid-cols-(--grid-template)',\n md: 'md:grid-cols-(--grid-template)',\n lg: 'lg:grid-cols-(--grid-template)',\n xl: 'xl:grid-cols-(--grid-template)',\n '2xl': '2xl:grid-cols-(--grid-template)',\n };\n\n return (\n <div\n ref={ref}\n data-split-layout-root=\"\"\n data-state={context?.state ?? 'expanded'}\n className={cn(\n 'grid',\n // Align items to start so each column has height based on content\n 'items-start',\n mobileLayout === 'stack' && 'grid-cols-1',\n mobileLayout === 'main-only' && 'grid-cols-1 *:data-split-sidebar:hidden',\n mobileLayout === 'sidebar-only' && 'grid-cols-1 *:data-split-main:hidden',\n gridClasses[bp],\n gapClasses[bp],\n className\n )}\n style={cssVars}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSplitLayoutRoot.displayName = 'SplitLayoutGlass.Root';\n\n// ========================================\n// SIDEBAR COMPONENTS\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Sidebar component\n */\nexport interface SplitLayoutSidebarProps extends React.HTMLAttributes<HTMLElement> {\n children: ReactNode;\n /**\n * ARIA label for accessibility\n * @default \"Sidebar navigation\"\n */\n label?: string;\n}\n\nconst SplitLayoutSidebar = forwardRef<HTMLElement, SplitLayoutSidebarProps>(\n ({ children, label = 'Sidebar navigation', className, ...props }, ref) => {\n const context = useSplitLayoutOptional();\n const breakpoint = context?.breakpoint ?? 'md';\n const intensity = context?.intensity ?? 'medium';\n const bp = breakpoint;\n\n return (\n <GlassCard\n asChild\n intensity={intensity}\n padding=\"none\"\n className={cn(\n 'overflow-hidden rounded-xl',\n `${bp}:sticky`,\n `${bp}:top-[var(--sticky-offset)]`,\n `${bp}:max-h-[var(--sticky-max-height)]`,\n `${bp}:flex`,\n `${bp}:flex-col`,\n className\n )}\n >\n <aside ref={ref} data-split-sidebar=\"\" aria-label={label} {...props}>\n {children}\n </aside>\n </GlassCard>\n );\n }\n);\n\nSplitLayoutSidebar.displayName = 'SplitLayoutGlass.Sidebar';\n\n/**\n * Props for SplitLayoutGlass.SidebarHeader component\n * Header stays pinned at top when sidebar content scrolls\n */\nexport interface SplitLayoutSidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst SplitLayoutSidebarHeader = forwardRef<HTMLDivElement, SplitLayoutSidebarHeaderProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n data-split-sidebar-header=\"\"\n className={cn('shrink-0 p-4 border-b border-white/10', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nSplitLayoutSidebarHeader.displayName = 'SplitLayoutGlass.SidebarHeader';\n\n/**\n * Props for SplitLayoutGlass.SidebarContent component\n * Scrollable area for sidebar items\n */\nexport interface SplitLayoutSidebarContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * Auto-wrap in ScrollArea for independent scrolling\n * @default true\n */\n scrollable?: boolean;\n}\n\nconst SplitLayoutSidebarContent = forwardRef<HTMLDivElement, SplitLayoutSidebarContentProps>(\n ({ children, scrollable = true, className, ...props }, ref) => {\n if (scrollable) {\n // Extract only div-compatible props (ScrollArea doesn't accept all HTML div props)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { dir, ...divProps } = props;\n return (\n <ScrollArea\n ref={ref as React.Ref<HTMLDivElement>}\n data-split-sidebar-content=\"\"\n className={cn('flex-1 min-h-0', className)}\n {...divProps}\n >\n <div className=\"p-4\">{children}</div>\n </ScrollArea>\n );\n }\n\n return (\n <div\n ref={ref}\n data-split-sidebar-content=\"\"\n className={cn('flex-1 min-h-0 overflow-auto p-4', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSplitLayoutSidebarContent.displayName = 'SplitLayoutGlass.SidebarContent';\n\n/**\n * Props for SplitLayoutGlass.SidebarFooter component\n * Footer stays pinned at bottom when sidebar content scrolls\n */\nexport interface SplitLayoutSidebarFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst SplitLayoutSidebarFooter = forwardRef<HTMLDivElement, SplitLayoutSidebarFooterProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n data-split-sidebar-footer=\"\"\n className={cn('shrink-0 p-4 border-t border-white/10', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nSplitLayoutSidebarFooter.displayName = 'SplitLayoutGlass.SidebarFooter';\n\n// ========================================\n// MAIN COMPONENTS\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Main component\n */\nexport interface SplitLayoutMainProps extends React.HTMLAttributes<HTMLElement> {\n children: ReactNode;\n /**\n * ARIA label for accessibility\n * @default \"Main content\"\n */\n label?: string;\n}\n\nconst SplitLayoutMain = forwardRef<HTMLElement, SplitLayoutMainProps>(\n ({ children, label = 'Main content', className, ...props }, ref) => {\n const context = useSplitLayoutOptional();\n const breakpoint = context?.breakpoint ?? 'md';\n const intensity = context?.intensity ?? 'medium';\n const bp = breakpoint;\n\n return (\n <GlassCard\n asChild\n intensity={intensity}\n padding=\"none\"\n className={cn(\n 'overflow-hidden rounded-xl',\n `${bp}:sticky`,\n `${bp}:top-[var(--sticky-offset)]`,\n `${bp}:max-h-[var(--sticky-max-height)]`,\n `${bp}:flex`,\n `${bp}:flex-col`,\n className\n )}\n >\n <main ref={ref} data-split-main=\"\" aria-label={label} {...props}>\n {children}\n </main>\n </GlassCard>\n );\n }\n);\n\nSplitLayoutMain.displayName = 'SplitLayoutGlass.Main';\n\n/**\n * Props for SplitLayoutGlass.MainHeader component\n * Header stays pinned at top when main content scrolls\n */\nexport interface SplitLayoutMainHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst SplitLayoutMainHeader = forwardRef<HTMLDivElement, SplitLayoutMainHeaderProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n data-split-main-header=\"\"\n className={cn('shrink-0 p-6 border-b border-white/10', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nSplitLayoutMainHeader.displayName = 'SplitLayoutGlass.MainHeader';\n\n/**\n * Props for SplitLayoutGlass.MainContent component\n * Scrollable area for main content\n */\nexport interface SplitLayoutMainContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n /**\n * Auto-wrap in ScrollArea for independent scrolling\n * @default true\n */\n scrollable?: boolean;\n}\n\nconst SplitLayoutMainContent = forwardRef<HTMLDivElement, SplitLayoutMainContentProps>(\n ({ children, scrollable = true, className, ...props }, ref) => {\n if (scrollable) {\n // Extract only div-compatible props (ScrollArea doesn't accept all HTML div props)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { dir, ...divProps } = props;\n return (\n <ScrollArea\n ref={ref as React.Ref<HTMLDivElement>}\n data-split-main-content=\"\"\n className={cn('flex-1 min-h-0', className)}\n {...divProps}\n >\n <div className=\"p-6\">{children}</div>\n </ScrollArea>\n );\n }\n\n return (\n <div\n ref={ref}\n data-split-main-content=\"\"\n className={cn('flex-1 min-h-0 overflow-auto p-6', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSplitLayoutMainContent.displayName = 'SplitLayoutGlass.MainContent';\n\n/**\n * Props for SplitLayoutGlass.MainFooter component\n * Footer stays pinned at bottom when main content scrolls\n */\nexport interface SplitLayoutMainFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst SplitLayoutMainFooter = forwardRef<HTMLDivElement, SplitLayoutMainFooterProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n data-split-main-footer=\"\"\n className={cn('shrink-0 p-6 border-t border-white/10', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nSplitLayoutMainFooter.displayName = 'SplitLayoutGlass.MainFooter';\n\n// ========================================\n// TRIGGER COMPONENT\n// ========================================\n\n/**\n * Props for SplitLayoutGlass.Trigger component\n * Toggle button for sidebar collapse/expand\n */\nexport interface SplitLayoutTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Use Radix Slot for custom trigger elements\n * @default false\n */\n asChild?: boolean;\n /**\n * Show on desktop (hidden by default)\n * @default false\n */\n showOnDesktop?: boolean;\n /**\n * Icon variant\n * - \"menu\": hamburger/X icons\n * - \"panel\": panel collapse/expand icons\n * @default \"menu\"\n */\n variant?: 'menu' | 'panel';\n}\n\nconst SplitLayoutTrigger = forwardRef<HTMLButtonElement, SplitLayoutTriggerProps>(\n (\n { asChild = false, showOnDesktop = false, variant = 'menu', className, children, ...props },\n ref\n ) => {\n const { toggle, isOpen, isMobileOpen, isMobile, breakpoint } = useSplitLayout();\n\n const currentOpen = isMobile ? isMobileOpen : isOpen;\n\n const Icon =\n variant === 'menu' ? (currentOpen ? X : Menu) : currentOpen ? PanelLeftClose : PanelLeftOpen;\n\n const bp = breakpoint;\n const visibilityClass = showOnDesktop ? '' : `${bp}:hidden`;\n\n if (asChild) {\n return (\n <Slot\n ref={ref}\n onClick={toggle}\n aria-label={currentOpen ? 'Close sidebar' : 'Open sidebar'}\n aria-expanded={currentOpen}\n data-state={currentOpen ? 'open' : 'closed'}\n className={cn(visibilityClass, className)}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <ButtonGlass\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n onClick={toggle}\n aria-label={currentOpen ? 'Close sidebar' : 'Open sidebar'}\n aria-expanded={currentOpen}\n data-state={currentOpen ? 'open' : 'closed'}\n className={cn(visibilityClass, className)}\n {...props}\n >\n {children ?? <Icon className=\"h-5 w-5\" />}\n </ButtonGlass>\n );\n }\n);\n\nSplitLayoutTrigger.displayName = 'SplitLayoutGlass.Trigger';\n\n// ========================================\n// COMPOUND COMPONENT EXPORT\n// ========================================\n\n/**\n * SplitLayoutGlass compound component\n *\n * @example\n * ```tsx\n * <SplitLayoutGlass.Provider>\n * <SplitLayoutGlass.Root>\n * <SplitLayoutGlass.Sidebar>...</SplitLayoutGlass.Sidebar>\n * <SplitLayoutGlass.Main>...</SplitLayoutGlass.Main>\n * </SplitLayoutGlass.Root>\n * </SplitLayoutGlass.Provider>\n * ```\n */\nexport const SplitLayoutGlass = {\n Provider: SplitLayoutProvider,\n Root: SplitLayoutRoot,\n Sidebar: SplitLayoutSidebar,\n SidebarHeader: SplitLayoutSidebarHeader,\n SidebarContent: SplitLayoutSidebarContent,\n SidebarFooter: SplitLayoutSidebarFooter,\n Main: SplitLayoutMain,\n MainHeader: SplitLayoutMainHeader,\n MainContent: SplitLayoutMainContent,\n MainFooter: SplitLayoutMainFooter,\n Trigger: SplitLayoutTrigger,\n};\n\n// ========================================\n// ACCORDION EXPORT (re-export from separate file)\n// ========================================\n\nexport { SplitLayoutAccordion } from './split-layout-accordion';\nexport type {\n SplitLayoutAccordionRootProps,\n SplitLayoutAccordionItemProps,\n} from './split-layout-accordion';\n\n// ========================================\n// TYPE EXPORTS\n// ========================================\n\nexport type { SplitLayoutProviderProps, SplitLayoutContextValue, Breakpoint, MobileMode };\n\nexport { useSplitLayout, useSplitLayoutOptional };\n","/* eslint-disable react-refresh/only-export-components */\n// ========================================\n// CHART COMPONENTS (shadcn/ui pattern)\n// Base chart utilities following shadcn/ui Charts API\n// ========================================\n\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport { cn } from '@/lib/utils';\n\n// ========================================\n// CHART CONFIG TYPE\n// ========================================\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: { light: string; dark: string } }\n );\n};\n\n// ========================================\n// CHART CONTEXT\n// ========================================\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\n// ========================================\n// CHART CONTAINER\n// ========================================\n\ninterface ChartContainerProps\n extends React.ComponentProps<'div'>, Pick<ChartContextProps, 'config'> {\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n}\n\nconst ChartContainer = React.forwardRef<HTMLDivElement, ChartContainerProps>(\n ({ id, className, children, config, ...props }, ref) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-[var(--text-muted)] [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-[var(--glass-border)] [&_.recharts-curve.recharts-tooltip-cursor]:stroke-[var(--glass-border)] [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-[var(--glass-border)] [&_.recharts-radial-bar-background-sector]:fill-[var(--glass-frost-5)] [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-[var(--glass-frost-10)] [&_.recharts-reference-line_[stroke='#ccc']]:stroke-[var(--glass-border)] [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>{children}</RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n }\n);\nChartContainer.displayName = 'ChartContainer';\n\n// ========================================\n// CHART STYLE (CSS Variables injection)\n// ========================================\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, itemConfig]) => itemConfig.color || itemConfig.theme\n );\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: `\n[data-chart=\"${id}\"] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.color || itemConfig.theme?.light;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .filter(Boolean)\n .join('\\n')}\n}\n\n[data-theme=\"glass\"] [data-chart=\"${id}\"],\n.dark [data-chart=\"${id}\"] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.theme?.dark || itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .filter(Boolean)\n .join('\\n')}\n}\n`,\n }}\n />\n );\n};\n\n// ========================================\n// CHART TOOLTIP\n// ========================================\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\ninterface TooltipPayloadItem {\n dataKey?: string | number;\n name?: string;\n value?: number;\n color?: string;\n payload?: Record<string, unknown>;\n fill?: string;\n type?: string;\n}\n\ninterface ChartTooltipContentProps {\n active?: boolean;\n payload?: TooltipPayloadItem[];\n label?: string;\n className?: string;\n labelClassName?: string;\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: 'line' | 'dot' | 'dashed';\n nameKey?: string;\n labelKey?: string;\n labelFormatter?: (label: string, payload: TooltipPayloadItem[]) => React.ReactNode;\n valueFormatter?: (value: number) => string;\n}\n\nconst ChartTooltipContent = React.forwardRef<HTMLDivElement, ChartTooltipContentProps>(\n (\n {\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n nameKey,\n labelKey,\n valueFormatter,\n },\n ref\n ) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === 'string'\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter && typeof label === 'string') {\n return (\n <div className={cn('font-medium', labelClassName)}>{labelFormatter(label, payload)}</div>\n );\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-[var(--glass-border)] bg-[var(--glass-bg)] px-2.5 py-1.5 text-xs shadow-xl backdrop-blur-md',\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload.map((item: TooltipPayloadItem, index: number) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = item.fill || item.color;\n\n return (\n <div\n key={`${item.dataKey}-${index}`}\n className={cn(\n 'flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-[var(--text-muted)]',\n indicator === 'dot' && 'items-center'\n )}\n >\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n 'shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]',\n {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n }\n )}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center'\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-[var(--text-muted)]\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value !== undefined && (\n <span className=\"font-mono font-medium tabular-nums text-[var(--text-primary)]\">\n {valueFormatter ? valueFormatter(item.value) : item.value.toLocaleString()}\n </span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\nChartTooltipContent.displayName = 'ChartTooltipContent';\n\n// ========================================\n// CHART LEGEND\n// ========================================\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\ninterface LegendPayloadItem {\n value?: string;\n dataKey?: string | number;\n color?: string;\n}\n\ninterface ChartLegendContentProps extends React.ComponentProps<'div'> {\n payload?: LegendPayloadItem[];\n verticalAlign?: 'top' | 'bottom';\n hideIcon?: boolean;\n nameKey?: string;\n}\n\nconst ChartLegendContent = React.forwardRef<HTMLDivElement, ChartLegendContentProps>(\n ({ className, hideIcon = false, payload, verticalAlign = 'bottom', nameKey }, ref) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-center gap-4',\n verticalAlign === 'top' ? 'pb-3' : 'pt-3',\n className\n )}\n >\n {payload.map((item: LegendPayloadItem) => {\n const key = `${nameKey || item.dataKey || 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn(\n 'flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-[var(--text-muted)]'\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n }\n);\nChartLegendContent.displayName = 'ChartLegendContent';\n\n// ========================================\n// HELPER FUNCTIONS\n// ========================================\n\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (key in config) {\n return config[key];\n }\n\n if (payloadPayload && key in payloadPayload) {\n configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key];\n}\n\n// ========================================\n// EXPORTS\n// ========================================\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n useChart,\n};\n","/**\n * DropdownGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type DropdownAlign = 'left' | 'right';\n\nexport const dropdownAlign = cva('absolute mt-2 min-w-[160px] md:min-w-[200px] rounded-2xl py-1.5 md:py-2', {\n variants: {\n align: {\n left: 'left-0',\n right: 'right-0',\n },\n },\n defaultVariants: {\n align: 'left',\n },\n});\n","/**\n * TooltipGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\nexport const tooltipPositions = cva(\n 'absolute z-50 px-2 py-1 md:px-3 md:py-1.5 rounded-lg text-[10px] md:text-xs font-medium whitespace-nowrap transition-opacity duration-200',\n {\n variants: {\n position: {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n },\n },\n defaultVariants: {\n position: 'top',\n },\n }\n);\n","/**\n * Alert CVA Variants (shadcn/ui)\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport const alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n","/**\n * Badge CVA Variants (shadcn/ui)\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport const badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n","/**\n * Button CVA Variants (shadcn/ui)\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport const buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n"],"x_google_ignoreList":[2,3,4,5,6,7,13,15,16,17,19,20,21,23,24,25,28,29,30],"mappings":"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"}