@nkanish/liquidglass-ui 0.1.0 → 0.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.
- package/README.md +18 -8
- package/THIRD_PARTY_NOTICES.md +41 -0
- package/dist/index.cjs +1113 -449
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -2
- package/dist/index.d.ts +64 -2
- package/dist/index.js +1014 -339
- package/dist/index.js.map +1 -1
- package/package.json +11 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/GlassProvider.tsx","../src/components/Glass.tsx","../src/utils/cn.ts","../src/hooks/use-pointer-position.ts","../src/hooks/use-reduced-motion.ts","../src/core/svg-filters.ts","../src/components/GlassCard.tsx","../src/components/Button.tsx","../src/hooks/use-pressed-state.ts","../src/components/IconButton.tsx","../src/components/Toggle.tsx","../src/hooks/use-controllable.ts","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/SearchField.tsx","../src/components/Select.tsx","../src/hooks/use-id.ts","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Switch.tsx","../src/components/Slider.tsx","../src/utils/index.ts","../src/components/TabBar.tsx","../src/components/SegmentedControl.tsx","../src/components/Tabs.tsx","../src/components/Navbar.tsx","../src/components/Sidebar.tsx","../src/components/Dock.tsx","../src/components/Modal.tsx","../src/components/Sheet.tsx","../src/components/Menu.tsx","../src/components/Tooltip.tsx","../src/components/Toast.tsx","../src/components/Alert.tsx","../src/components/Progress.tsx","../src/components/Spinner.tsx","../src/components/Badge.tsx","../src/components/Avatar.tsx","../src/components/Chip.tsx","../src/components/Accordion.tsx","../src/components/Separator.tsx","../src/components/Skeleton.tsx","../src/components/Drawer.tsx","../src/components/Popover.tsx","../src/components/ContextMenu.tsx","../src/components/CommandPalette.tsx","../src/components/Carousel.tsx","../src/components/FloatingActionButton.tsx","../src/components/DatePicker.tsx","../src/hooks/use-reduced-transparency.ts","../src/hooks/use-mounted.ts"],"sourcesContent":["import { createContext, useContext, useState, useEffect, ReactNode } from 'react';\n\nexport type Theme = 'light' | 'dark' | 'system';\nexport type ResolvedTheme = 'light' | 'dark';\n\nexport interface GlassConfig {\n blur?: number;\n saturation?: number;\n bendStrength?: number;\n accentColor?: string;\n reducedMotion?: boolean;\n reducedTransparency?: boolean;\n}\n\nexport interface GlassContextValue {\n theme: Theme;\n resolvedTheme: ResolvedTheme;\n setTheme: (theme: Theme) => void;\n config: GlassConfig;\n setConfig: (config: Partial<GlassConfig>) => void;\n}\n\nconst GlassContext = createContext<GlassContextValue | null>(null);\n\nexport interface GlassProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n config?: GlassConfig;\n storageKey?: string;\n}\n\nfunction getSystemTheme(): ResolvedTheme {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nexport function GlassProvider({\n children,\n defaultTheme = 'system',\n config: initialConfig = {},\n storageKey = 'liquidglass-theme',\n}: GlassProviderProps) {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window === 'undefined') return defaultTheme;\n const stored = localStorage.getItem(storageKey);\n return (stored as Theme) || defaultTheme;\n });\n\n const [resolvedTheme, setResolvedTheme] = useState<ResolvedTheme>(() => {\n if (theme === 'system') return getSystemTheme();\n return theme;\n });\n\n const [config, setConfigState] = useState<GlassConfig>(initialConfig);\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n if (typeof window !== 'undefined') {\n localStorage.setItem(storageKey, newTheme);\n }\n };\n\n const setConfig = (newConfig: Partial<GlassConfig>) => {\n setConfigState(prev => ({ ...prev, ...newConfig }));\n };\n\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n const handleChange = () => {\n if (theme === 'system') {\n setResolvedTheme(getSystemTheme());\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [theme]);\n\n useEffect(() => {\n if (theme === 'system') {\n setResolvedTheme(getSystemTheme());\n } else {\n setResolvedTheme(theme);\n }\n }, [theme]);\n\n useEffect(() => {\n const root = document.documentElement;\n root.setAttribute('data-theme', resolvedTheme);\n \n if (config.blur !== undefined) {\n root.style.setProperty('--lg-blur', `${config.blur}px`);\n }\n if (config.saturation !== undefined) {\n root.style.setProperty('--lg-saturate', String(config.saturation));\n }\n if (config.accentColor) {\n root.style.setProperty('--lg-accent', config.accentColor);\n }\n }, [resolvedTheme, config]);\n\n return (\n <GlassContext.Provider\n value={{\n theme,\n resolvedTheme,\n setTheme,\n config,\n setConfig,\n }}\n >\n {children}\n </GlassContext.Provider>\n );\n}\n\nexport function useGlass(): GlassContextValue {\n const context = useContext(GlassContext);\n if (!context) {\n throw new Error('useGlass must be used within a GlassProvider');\n }\n return context;\n}\n\nexport function useTheme(): Pick<GlassContextValue, 'theme' | 'resolvedTheme' | 'setTheme'> {\n const { theme, resolvedTheme, setTheme } = useGlass();\n return { theme, resolvedTheme, setTheme };\n}\n","import { forwardRef, useRef, useEffect, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { usePointerPosition } from '../hooks/use-pointer-position';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { createRimLightGradient, createSpecularHighlight } from '../core/svg-filters';\n\nexport interface GlassProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'elevated' | 'subtle' | 'solid';\n blur?: number;\n saturation?: number;\n tint?: string;\n interactive?: boolean;\n rimLight?: boolean;\n bendStrength?: number;\n}\n\nexport const Glass = forwardRef<HTMLDivElement, GlassProps>(\n (\n {\n className,\n style,\n variant = 'default',\n blur,\n saturation,\n tint,\n interactive = false,\n rimLight = false,\n bendStrength = 0.3,\n children,\n ...props\n },\n ref\n ) => {\n const localRef = useRef<HTMLDivElement>(null);\n const combinedRef = (ref as React.RefObject<HTMLDivElement>) || localRef;\n const reducedMotion = useReducedMotion();\n const pointerPosition = usePointerPosition(combinedRef, { enabled: interactive && !reducedMotion });\n\n const customStyles: CSSProperties & Record<string, string | number | undefined> = {\n ...style,\n };\n\n if (blur !== undefined) {\n customStyles['--lg-blur'] = `${blur}px`;\n }\n\n if (saturation !== undefined) {\n customStyles['--lg-saturate'] = String(saturation);\n }\n\n if (tint) {\n customStyles.backgroundColor = tint;\n }\n\n if (rimLight) {\n customStyles.backgroundImage = createRimLightGradient({ intensity: 0.2 });\n }\n\n if (interactive && pointerPosition.isInside) {\n customStyles['--lg-pointer-x'] = `${pointerPosition.percentX}%`;\n customStyles['--lg-pointer-y'] = `${pointerPosition.percentY}%`;\n }\n\n const variantClasses = {\n default: 'lg-glass',\n elevated: 'lg-glass lg-glass-elevated',\n subtle: 'lg-glass lg-glass-subtle',\n solid: '',\n };\n\n return (\n <div\n ref={combinedRef}\n className={cn(variantClasses[variant], className)}\n style={customStyles}\n data-hover={interactive && pointerPosition.isInside ? '' : undefined}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nGlass.displayName = 'Glass';\n","type ClassValue = string | number | boolean | undefined | null | ClassValue[];\n\nexport function cn(...inputs: ClassValue[]): string {\n const classes: string[] = [];\n\n for (const input of inputs) {\n if (!input) continue;\n\n if (typeof input === 'string' || typeof input === 'number') {\n classes.push(String(input));\n } else if (Array.isArray(input)) {\n const nested = cn(...input);\n if (nested) classes.push(nested);\n }\n }\n\n return classes.join(' ');\n}\n","import { useState, useEffect, useCallback, RefObject } from 'react';\n\nexport interface PointerPosition {\n x: number;\n y: number;\n percentX: number;\n percentY: number;\n isInside: boolean;\n}\n\nconst defaultPosition: PointerPosition = {\n x: 0,\n y: 0,\n percentX: 50,\n percentY: 50,\n isInside: false,\n};\n\nexport function usePointerPosition(\n ref: RefObject<HTMLElement | null>,\n options: { enabled?: boolean } = {}\n): PointerPosition {\n const { enabled = true } = options;\n const [position, setPosition] = useState<PointerPosition>(defaultPosition);\n\n const updatePosition = useCallback((event: PointerEvent) => {\n if (!ref.current) return;\n\n const rect = ref.current.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const percentX = (x / rect.width) * 100;\n const percentY = (y / rect.height) * 100;\n\n setPosition({\n x,\n y,\n percentX,\n percentY,\n isInside: true,\n });\n }, [ref]);\n\n const handleLeave = useCallback(() => {\n setPosition(prev => ({ ...prev, isInside: false }));\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n\n const element = ref.current;\n if (!element) return;\n\n element.addEventListener('pointermove', updatePosition);\n element.addEventListener('pointerleave', handleLeave);\n\n return () => {\n element.removeEventListener('pointermove', updatePosition);\n element.removeEventListener('pointerleave', handleLeave);\n };\n }, [ref, enabled, updatePosition, handleLeave]);\n\n return enabled ? position : defaultPosition;\n}\n","import { useState, useEffect } from 'react';\n\nconst QUERY = '(prefers-reduced-motion: reduce)';\n\nfunction getInitialState(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(QUERY).matches;\n}\n\nexport function useReducedMotion(): boolean {\n const [reducedMotion, setReducedMotion] = useState(getInitialState);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(QUERY);\n \n const handler = (event: MediaQueryListEvent) => {\n setReducedMotion(event.matches);\n };\n\n mediaQuery.addEventListener('change', handler);\n setReducedMotion(mediaQuery.matches);\n\n return () => {\n mediaQuery.removeEventListener('change', handler);\n };\n }, []);\n\n return reducedMotion;\n}\n","/**\n * SVG Filter System for Liquid Glass Refraction Effects\n * Creates dynamic SVG filters for lens/refraction effects\n */\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nlet filterContainer: SVGSVGElement | null = null;\nlet filterCounter = 0;\n\nfunction getFilterContainer(): SVGSVGElement {\n if (filterContainer && document.body.contains(filterContainer)) {\n return filterContainer;\n }\n\n filterContainer = document.createElementNS(SVG_NS, 'svg');\n filterContainer.setAttribute('aria-hidden', 'true');\n filterContainer.style.cssText = `\n position: absolute;\n width: 0;\n height: 0;\n overflow: hidden;\n pointer-events: none;\n `;\n\n const defs = document.createElementNS(SVG_NS, 'defs');\n filterContainer.appendChild(defs);\n document.body.appendChild(filterContainer);\n\n return filterContainer;\n}\n\nfunction getDefs(): SVGDefsElement {\n const container = getFilterContainer();\n return container.querySelector('defs')!;\n}\n\nfunction createSVGElement<K extends keyof SVGElementTagNameMap>(\n tag: K,\n attrs: Record<string, string | number> = {}\n): SVGElementTagNameMap[K] {\n const el = document.createElementNS(SVG_NS, tag);\n for (const [key, value] of Object.entries(attrs)) {\n el.setAttribute(key, String(value));\n }\n return el;\n}\n\nexport interface RefractionFilterOptions {\n bendStrength?: number;\n dispersion?: number;\n blur?: number;\n brightness?: number;\n saturation?: number;\n rimShine?: number;\n}\n\nexport interface GlassFilterResult {\n id: string;\n remove: () => void;\n update: (options: Partial<RefractionFilterOptions>) => void;\n}\n\nexport function createRefractionFilter(\n options: RefractionFilterOptions = {}\n): GlassFilterResult {\n const {\n bendStrength = 0.3,\n dispersion = 0.15,\n blur = 2,\n brightness = 1.05,\n saturation = 1.5,\n rimShine = 0.2,\n } = options;\n\n const id = `lg-refraction-${++filterCounter}`;\n const defs = getDefs();\n\n const filter = createSVGElement('filter', {\n id,\n filterUnits: 'objectBoundingBox',\n primitiveUnits: 'objectBoundingBox',\n 'color-interpolation-filters': 'sRGB',\n x: '-20%',\n y: '-20%',\n width: '140%',\n height: '140%',\n });\n\n const turbulence = createSVGElement('feTurbulence', {\n type: 'fractalNoise',\n baseFrequency: 0.01,\n numOctaves: 2,\n seed: Math.floor(Math.random() * 100),\n result: 'noise',\n });\n\n const displacementX = createSVGElement('feDisplacementMap', {\n in: 'SourceGraphic',\n in2: 'noise',\n scale: bendStrength * 30,\n xChannelSelector: 'R',\n yChannelSelector: 'G',\n result: 'displaced',\n });\n\n const colorMatrix = createSVGElement('feColorMatrix', {\n in: 'displaced',\n type: 'matrix',\n values: `\n ${saturation} 0 0 0 0\n 0 ${saturation} 0 0 0\n 0 0 ${saturation} 0 0\n 0 0 0 1 0\n `.trim(),\n result: 'saturated',\n });\n\n const brightnessMatrix = createSVGElement('feColorMatrix', {\n in: 'saturated',\n type: 'matrix',\n values: `\n ${brightness} 0 0 0 0\n 0 ${brightness} 0 0 0\n 0 0 ${brightness} 0 0\n 0 0 0 1 0\n `.trim(),\n result: 'brightened',\n });\n\n const gaussianBlur = createSVGElement('feGaussianBlur', {\n in: 'brightened',\n stdDeviation: blur * 0.01,\n result: 'blurred',\n });\n\n filter.appendChild(turbulence);\n filter.appendChild(displacementX);\n filter.appendChild(colorMatrix);\n filter.appendChild(brightnessMatrix);\n filter.appendChild(gaussianBlur);\n defs.appendChild(filter);\n\n return {\n id,\n remove: () => filter.remove(),\n update: (newOptions) => {\n if (newOptions.bendStrength !== undefined) {\n displacementX.setAttribute('scale', String(newOptions.bendStrength * 30));\n }\n if (newOptions.saturation !== undefined) {\n colorMatrix.setAttribute('values', `\n ${newOptions.saturation} 0 0 0 0\n 0 ${newOptions.saturation} 0 0 0\n 0 0 ${newOptions.saturation} 0 0\n 0 0 0 1 0\n `.trim());\n }\n if (newOptions.brightness !== undefined) {\n brightnessMatrix.setAttribute('values', `\n ${newOptions.brightness} 0 0 0 0\n 0 ${newOptions.brightness} 0 0 0\n 0 0 ${newOptions.brightness} 0 0\n 0 0 0 1 0\n `.trim());\n }\n if (newOptions.blur !== undefined) {\n gaussianBlur.setAttribute('stdDeviation', String(newOptions.blur * 0.01));\n }\n },\n };\n}\n\nexport interface LensFilterOptions {\n bendX?: number;\n bendY?: number;\n dispersion?: number;\n chromatic?: boolean;\n}\n\nexport function createLensFilter(options: LensFilterOptions = {}): GlassFilterResult {\n const {\n bendX = 0.4,\n bendY = 0.3,\n dispersion = 0.2,\n chromatic = true,\n } = options;\n\n const id = `lg-lens-${++filterCounter}`;\n const defs = getDefs();\n\n const filter = createSVGElement('filter', {\n id,\n filterUnits: 'objectBoundingBox',\n primitiveUnits: 'objectBoundingBox',\n 'color-interpolation-filters': 'sRGB',\n x: '-50%',\n y: '-50%',\n width: '200%',\n height: '200%',\n });\n\n const blurForMap = createSVGElement('feGaussianBlur', {\n in: 'SourceAlpha',\n stdDeviation: 0.1,\n result: 'blurredAlpha',\n });\n\n const displacementMapX = createSVGElement('feDisplacementMap', {\n in: 'SourceGraphic',\n in2: 'blurredAlpha',\n scale: bendX * 50,\n xChannelSelector: 'A',\n yChannelSelector: 'A',\n result: 'displacedX',\n });\n\n const displacementMapY = createSVGElement('feDisplacementMap', {\n in: 'displacedX',\n in2: 'blurredAlpha',\n scale: bendY * 50,\n xChannelSelector: 'A',\n yChannelSelector: 'A',\n result: 'displaced',\n });\n\n filter.appendChild(blurForMap);\n filter.appendChild(displacementMapX);\n filter.appendChild(displacementMapY);\n\n if (chromatic && dispersion > 0) {\n const offsetR = createSVGElement('feOffset', {\n in: 'displaced',\n dx: dispersion * 0.02,\n dy: 0,\n result: 'redOffset',\n });\n\n const offsetB = createSVGElement('feOffset', {\n in: 'displaced',\n dx: -dispersion * 0.02,\n dy: 0,\n result: 'blueOffset',\n });\n\n const extractR = createSVGElement('feColorMatrix', {\n in: 'redOffset',\n type: 'matrix',\n values: '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0',\n result: 'redChannel',\n });\n\n const extractG = createSVGElement('feColorMatrix', {\n in: 'displaced',\n type: 'matrix',\n values: '0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0',\n result: 'greenChannel',\n });\n\n const extractB = createSVGElement('feColorMatrix', {\n in: 'blueOffset',\n type: 'matrix',\n values: '0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0',\n result: 'blueChannel',\n });\n\n const mergeRG = createSVGElement('feComposite', {\n in: 'redChannel',\n in2: 'greenChannel',\n operator: 'arithmetic',\n k1: 0,\n k2: 1,\n k3: 1,\n k4: 0,\n result: 'rgMerge',\n });\n\n const mergeRGB = createSVGElement('feComposite', {\n in: 'rgMerge',\n in2: 'blueChannel',\n operator: 'arithmetic',\n k1: 0,\n k2: 1,\n k3: 1,\n k4: 0,\n });\n\n filter.appendChild(offsetR);\n filter.appendChild(offsetB);\n filter.appendChild(extractR);\n filter.appendChild(extractG);\n filter.appendChild(extractB);\n filter.appendChild(mergeRG);\n filter.appendChild(mergeRGB);\n }\n\n defs.appendChild(filter);\n\n return {\n id,\n remove: () => filter.remove(),\n update: (newOptions: Partial<LensFilterOptions>) => {\n if (newOptions.bendX !== undefined) {\n displacementMapX.setAttribute('scale', String(newOptions.bendX * 50));\n }\n if (newOptions.bendY !== undefined) {\n displacementMapY.setAttribute('scale', String(newOptions.bendY * 50));\n }\n },\n };\n}\n\nexport interface RimLightOptions {\n intensity?: number;\n angle?: number;\n spread?: number;\n}\n\nexport function createRimLightGradient(\n options: RimLightOptions = {}\n): string {\n const {\n intensity = 0.3,\n angle = 135,\n spread = 0.5,\n } = options;\n\n const radians = (angle * Math.PI) / 180;\n const x1 = 50 - Math.cos(radians) * 50;\n const y1 = 50 - Math.sin(radians) * 50;\n const x2 = 50 + Math.cos(radians) * 50;\n const y2 = 50 + Math.sin(radians) * 50;\n\n return `linear-gradient(\n ${angle}deg,\n rgba(255, 255, 255, ${intensity}) 0%,\n rgba(255, 255, 255, ${intensity * spread}) ${30}%,\n transparent ${60}%,\n rgba(0, 0, 0, ${intensity * 0.3}) 100%\n )`;\n}\n\nexport function createSpecularHighlight(\n x: number,\n y: number,\n radius: number = 200,\n intensity: number = 0.08\n): string {\n return `radial-gradient(\n circle ${radius}px at ${x}% ${y}%,\n rgba(255, 255, 255, ${intensity}),\n rgba(255, 255, 255, ${intensity * 0.5}) 50%,\n transparent\n )`;\n}\n\nexport function cleanupFilters(): void {\n if (filterContainer) {\n filterContainer.remove();\n filterContainer = null;\n }\n filterCounter = 0;\n}\n\nexport function supportsBackdropFilter(): boolean {\n if (typeof CSS === 'undefined' || typeof CSS.supports !== 'function') {\n return false;\n }\n return (\n CSS.supports('backdrop-filter', 'blur(1px)') ||\n CSS.supports('-webkit-backdrop-filter', 'blur(1px)')\n );\n}\n\nexport function supportsSVGFilters(): boolean {\n if (typeof document === 'undefined') return false;\n const svg = document.createElementNS(SVG_NS, 'svg');\n return 'getComputedStyle' in window && svg instanceof SVGElement;\n}\n","import { forwardRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface GlassCardProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'elevated' | 'outlined';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n radius?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n hoverable?: boolean;\n}\n\nconst paddingMap = {\n none: '0',\n sm: '12px',\n md: '16px',\n lg: '24px',\n};\n\nconst radiusMap = {\n sm: 'var(--lg-radius-sm)',\n md: 'var(--lg-radius)',\n lg: 'var(--lg-radius-lg)',\n xl: 'var(--lg-radius-xl)',\n full: 'var(--lg-radius-full)',\n};\n\nexport const GlassCard = forwardRef<HTMLDivElement, GlassCardProps>(\n (\n {\n className,\n style,\n variant = 'default',\n padding = 'md',\n radius = 'lg',\n hoverable = false,\n children,\n ...props\n },\n ref\n ) => {\n const customStyles: CSSProperties = {\n padding: paddingMap[padding],\n borderRadius: radiusMap[radius],\n ...style,\n };\n\n const baseClasses = cn(\n 'lg-glass',\n variant === 'elevated' && 'lg-glass-elevated',\n variant === 'outlined' && 'border border-[var(--lg-edge-strong)]',\n hoverable && 'transition-transform hover:scale-[1.02] hover:shadow-lg cursor-pointer',\n className\n );\n\n return (\n <div ref={ref} className={baseClasses} style={customStyles} {...props}>\n {children}\n </div>\n );\n }\n);\n\nGlassCard.displayName = 'GlassCard';\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { usePressedState } from '../hooks/use-pressed-state';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'glass' | 'filled' | 'outlined' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n icon?: ReactNode;\n iconPosition?: 'start' | 'end';\n destructive?: boolean;\n tint?: string;\n loading?: boolean;\n fullWidth?: boolean;\n}\n\nconst sizeStyles = {\n sm: {\n height: '32px',\n padding: '0 12px',\n fontSize: '13px',\n borderRadius: '16px',\n iconSize: '16px',\n gap: '6px',\n },\n md: {\n height: '40px',\n padding: '0 16px',\n fontSize: '14px',\n borderRadius: '20px',\n iconSize: '20px',\n gap: '8px',\n },\n lg: {\n height: '48px',\n padding: '0 24px',\n fontSize: '16px',\n borderRadius: '24px',\n iconSize: '24px',\n gap: '10px',\n },\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n style,\n variant = 'glass',\n size = 'md',\n icon,\n iconPosition = 'start',\n destructive = false,\n tint,\n loading = false,\n fullWidth = false,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const { isPressed, pressHandlers } = usePressedState({ disabled: disabled || loading });\n const sizeConfig = sizeStyles[size];\n\n const customStyles: CSSProperties & Record<string, string | number | undefined> = {\n height: sizeConfig.height,\n padding: icon && !children ? '0' : sizeConfig.padding,\n fontSize: sizeConfig.fontSize,\n borderRadius: sizeConfig.borderRadius,\n gap: sizeConfig.gap,\n width: icon && !children ? sizeConfig.height : fullWidth ? '100%' : undefined,\n ...style,\n };\n\n if (tint && !destructive) {\n customStyles['--lg-tint'] = tint;\n }\n\n const baseClasses = cn(\n 'lg-glass lg-interactive lg-focus-ring',\n 'inline-flex items-center justify-center',\n 'font-medium transition-colors',\n 'border-0 cursor-pointer',\n variant === 'filled' && 'text-white',\n variant === 'outlined' && 'bg-transparent border border-[var(--lg-edge-strong)]',\n variant === 'ghost' && 'bg-transparent backdrop-blur-none',\n destructive && 'text-[var(--lg-destructive)]',\n (disabled || loading) && 'opacity-35 cursor-default',\n fullWidth && 'w-full',\n className\n );\n\n const variantStyles: CSSProperties = {};\n \n if (variant === 'filled') {\n const fillColor = destructive ? 'var(--lg-destructive)' : (tint || 'var(--lg-fill)');\n variantStyles.backgroundColor = fillColor;\n variantStyles.color = 'white';\n }\n\n if ((tint || destructive) && variant !== 'filled') {\n variantStyles.color = destructive ? 'var(--lg-destructive)' : tint;\n }\n\n return (\n <button\n ref={ref}\n className={baseClasses}\n style={{ ...customStyles, ...variantStyles }}\n disabled={disabled || loading}\n data-pressed={isPressed ? '' : undefined}\n data-variant={variant}\n data-destructive={destructive ? '' : undefined}\n data-icon={icon ? (children ? 'with-text' : 'only') : undefined}\n {...pressHandlers}\n {...props}\n >\n {loading ? (\n <span\n className=\"animate-spin\"\n style={{\n width: sizeConfig.iconSize,\n height: sizeConfig.iconSize,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n }}\n />\n ) : (\n <>\n {icon && iconPosition === 'start' && (\n <span\n className=\"flex items-center justify-center\"\n style={{ width: sizeConfig.iconSize, height: sizeConfig.iconSize }}\n >\n {icon}\n </span>\n )}\n {children}\n {icon && iconPosition === 'end' && (\n <span\n className=\"flex items-center justify-center\"\n style={{ width: sizeConfig.iconSize, height: sizeConfig.iconSize }}\n >\n {icon}\n </span>\n )}\n </>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n","import { useState, useCallback, useRef, useEffect } from 'react';\n\nexport interface UsePressedStateOptions {\n disabled?: boolean;\n onPressStart?: () => void;\n onPressEnd?: () => void;\n}\n\nexport interface PressedState {\n isPressed: boolean;\n pressHandlers: {\n onPointerDown: (e: React.PointerEvent) => void;\n onPointerUp: (e: React.PointerEvent) => void;\n onPointerCancel: (e: React.PointerEvent) => void;\n onPointerLeave: (e: React.PointerEvent) => void;\n onKeyDown: (e: React.KeyboardEvent) => void;\n onKeyUp: (e: React.KeyboardEvent) => void;\n };\n}\n\nexport function usePressedState(options: UsePressedStateOptions = {}): PressedState {\n const { disabled = false, onPressStart, onPressEnd } = options;\n const [isPressed, setIsPressed] = useState(false);\n const pointerIdRef = useRef<number | null>(null);\n\n const handlePressStart = useCallback(() => {\n if (disabled) return;\n setIsPressed(true);\n onPressStart?.();\n }, [disabled, onPressStart]);\n\n const handlePressEnd = useCallback(() => {\n setIsPressed(false);\n onPressEnd?.();\n }, [onPressEnd]);\n\n const onPointerDown = useCallback((e: React.PointerEvent) => {\n if (disabled || pointerIdRef.current !== null) return;\n pointerIdRef.current = e.pointerId;\n handlePressStart();\n (e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n }, [disabled, handlePressStart]);\n\n const onPointerUp = useCallback((e: React.PointerEvent) => {\n if (pointerIdRef.current !== e.pointerId) return;\n pointerIdRef.current = null;\n handlePressEnd();\n }, [handlePressEnd]);\n\n const onPointerCancel = useCallback((e: React.PointerEvent) => {\n if (pointerIdRef.current !== e.pointerId) return;\n pointerIdRef.current = null;\n handlePressEnd();\n }, [handlePressEnd]);\n\n const onPointerLeave = useCallback((e: React.PointerEvent) => {\n if (pointerIdRef.current !== e.pointerId) return;\n }, []);\n\n const onKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (disabled) return;\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n handlePressStart();\n }\n }, [disabled, handlePressStart]);\n\n const onKeyUp = useCallback((e: React.KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n handlePressEnd();\n }\n }, [handlePressEnd]);\n\n useEffect(() => {\n return () => {\n pointerIdRef.current = null;\n };\n }, []);\n\n return {\n isPressed,\n pressHandlers: {\n onPointerDown,\n onPointerUp,\n onPointerCancel,\n onPointerLeave,\n onKeyDown,\n onKeyUp,\n },\n };\n}\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { usePressedState } from '../hooks/use-pressed-state';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n variant?: 'glass' | 'filled' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n destructive?: boolean;\n tint?: string;\n loading?: boolean;\n 'aria-label': string;\n}\n\nconst sizeStyles = {\n sm: { size: '32px', iconSize: '16px' },\n md: { size: '40px', iconSize: '20px' },\n lg: { size: '48px', iconSize: '24px' },\n};\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n className,\n style,\n icon,\n variant = 'glass',\n size = 'md',\n destructive = false,\n tint,\n loading = false,\n disabled,\n ...props\n },\n ref\n ) => {\n const { isPressed, pressHandlers } = usePressedState({ disabled: disabled || loading });\n const sizeConfig = sizeStyles[size];\n\n const customStyles: CSSProperties = {\n width: sizeConfig.size,\n height: sizeConfig.size,\n borderRadius: '50%',\n ...style,\n };\n\n if (tint && !destructive) {\n customStyles.color = tint;\n }\n\n const baseClasses = cn(\n 'lg-glass lg-interactive lg-focus-ring',\n 'inline-flex items-center justify-center',\n 'border-0 p-0',\n variant === 'filled' && 'text-white',\n variant === 'ghost' && 'bg-transparent backdrop-blur-none',\n destructive && 'text-[var(--lg-destructive)]',\n (disabled || loading) && 'opacity-35 cursor-default',\n className\n );\n\n const variantStyles: CSSProperties = {};\n if (variant === 'filled') {\n variantStyles.backgroundColor = destructive ? 'var(--lg-destructive)' : (tint || 'var(--lg-fill)');\n variantStyles.color = 'white';\n }\n\n return (\n <button\n ref={ref}\n className={baseClasses}\n style={{ ...customStyles, ...variantStyles }}\n disabled={disabled || loading}\n data-pressed={isPressed ? '' : undefined}\n {...pressHandlers}\n {...props}\n >\n {loading ? (\n <span\n className=\"animate-spin\"\n style={{\n width: sizeConfig.iconSize,\n height: sizeConfig.iconSize,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n }}\n />\n ) : (\n <span\n className=\"flex items-center justify-center\"\n style={{ width: sizeConfig.iconSize, height: sizeConfig.iconSize }}\n >\n {icon}\n </span>\n )}\n </button>\n );\n }\n);\n\nIconButton.displayName = 'IconButton';\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllableBoolean } from '../hooks/use-controllable';\nimport { usePressedState } from '../hooks/use-pressed-state';\n\nexport interface ToggleProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: 'sm' | 'md' | 'lg';\n variant?: 'default' | 'outline';\n icon?: ReactNode;\n}\n\nconst sizeConfig = {\n sm: { size: 32, padding: '0 8px', fontSize: 12, iconSize: 16 },\n md: { size: 40, padding: '0 12px', fontSize: 14, iconSize: 20 },\n lg: { size: 48, padding: '0 16px', fontSize: 16, iconSize: 24 },\n};\n\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n className,\n style,\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n size = 'md',\n variant = 'default',\n icon,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const [pressed, setPressed] = useControllableBoolean({\n checked: controlledPressed,\n defaultChecked: defaultPressed,\n onCheckedChange: onPressedChange,\n });\n\n const { isPressed: isPointerPressed, pressHandlers } = usePressedState({ disabled });\n const config = sizeConfig[size];\n\n const handleClick = () => {\n if (!disabled) {\n setPressed(!pressed);\n }\n };\n\n const toggleStyles: CSSProperties = {\n height: config.size,\n padding: icon && !children ? '0' : config.padding,\n width: icon && !children ? config.size : undefined,\n fontSize: config.fontSize,\n borderRadius: config.size / 2,\n ...style,\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={pressed}\n disabled={disabled}\n onClick={handleClick}\n className={cn(\n 'lg-interactive lg-focus-ring',\n 'inline-flex items-center justify-center gap-2',\n 'border-0 font-medium cursor-pointer',\n 'transition-colors',\n variant === 'default' && 'lg-glass',\n variant === 'outline' && 'bg-transparent border border-[var(--lg-edge-strong)]',\n pressed && 'bg-[var(--lg-accent-light)] text-[var(--lg-accent)]',\n pressed && variant === 'outline' && 'border-[var(--lg-accent)]',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={toggleStyles}\n data-pressed={isPointerPressed ? '' : undefined}\n data-state={pressed ? 'on' : 'off'}\n {...pressHandlers}\n {...props}\n >\n {icon && (\n <span\n className=\"flex items-center justify-center\"\n style={{ width: config.iconSize, height: config.iconSize }}\n >\n {icon}\n </span>\n )}\n {children}\n </button>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n","import { useState, useCallback, useRef, useEffect } from 'react';\n\nexport interface UseControllableOptions<T> {\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n}\n\nexport function useControllable<T>(\n options: UseControllableOptions<T>\n): [T | undefined, (value: T) => void, boolean] {\n const { value: controlledValue, defaultValue, onChange } = options;\n \n const isControlled = controlledValue !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<T | undefined>(defaultValue);\n \n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = useCallback((newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n }, [isControlled, onChange]);\n\n return [value, setValue, isControlled];\n}\n\nexport function useControllableBoolean(\n options: {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n }\n): [boolean, (checked: boolean) => void, boolean] {\n const { checked, defaultChecked = false, onCheckedChange } = options;\n \n const isControlled = checked !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultChecked);\n \n const value = isControlled ? checked : uncontrolledValue;\n\n const setValue = useCallback((newValue: boolean) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onCheckedChange?.(newValue);\n }, [isControlled, onCheckedChange]);\n\n return [value, setValue, isControlled];\n}\n","import { forwardRef, InputHTMLAttributes, ReactNode, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange' | 'size'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n icon?: ReactNode;\n rightElement?: ReactNode;\n size?: 'sm' | 'md' | 'lg';\n error?: boolean;\n clearable?: boolean;\n onClear?: () => void;\n}\n\nconst sizeConfig = {\n sm: { height: 32, padding: '0 10px', fontSize: 13, iconSize: 14, borderRadius: 16 },\n md: { height: 40, padding: '0 14px', fontSize: 14, iconSize: 16, borderRadius: 20 },\n lg: { height: 48, padding: '0 18px', fontSize: 16, iconSize: 18, borderRadius: 24 },\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n style,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n icon,\n rightElement,\n size = 'md',\n error = false,\n clearable = false,\n onClear,\n disabled,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [isFocused, setIsFocused] = useState(false);\n const config = sizeConfig[size];\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value);\n };\n\n const handleClear = () => {\n setValue('');\n onClear?.();\n };\n\n const containerStyles: CSSProperties = {\n height: config.height,\n padding: config.padding,\n paddingLeft: icon ? config.height * 0.35 : undefined,\n paddingRight: (clearable && value) || rightElement ? config.height * 0.35 : undefined,\n fontSize: config.fontSize,\n borderRadius: config.borderRadius,\n ...style,\n };\n\n return (\n <div\n className={cn(\n 'lg-glass lg-text',\n 'relative flex items-center gap-2.5 w-full max-w-[360px]',\n 'transition-colors',\n isFocused && 'bg-[var(--lg-glass-active)]',\n error && 'ring-2 ring-[var(--lg-destructive)]',\n disabled && 'opacity-35',\n className\n )}\n style={containerStyles}\n >\n {icon && (\n <span\n className=\"flex-none flex items-center justify-center text-[var(--lg-muted)]\"\n style={{ width: config.iconSize, height: config.iconSize }}\n >\n {icon}\n </span>\n )}\n\n <input\n ref={ref}\n type=\"text\"\n value={value}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n disabled={disabled}\n className={cn(\n 'flex-1 min-w-0 h-full',\n 'p-0 border-0 outline-none',\n 'bg-transparent text-inherit',\n 'placeholder:text-[var(--lg-muted)]'\n )}\n style={{ font: 'inherit' }}\n {...props}\n />\n\n {clearable && value && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={cn(\n 'flex-none flex items-center justify-center',\n 'w-8 h-8 -mr-2 p-0 border-0 rounded-full',\n 'bg-transparent text-[var(--lg-muted)] cursor-pointer',\n 'hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Clear\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M15 9l-6 6M9 9l6 6\" />\n </svg>\n </button>\n )}\n\n {rightElement && (\n <span className=\"flex-none\">{rightElement}</span>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n","import { forwardRef, TextareaHTMLAttributes, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\n\nexport interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'defaultValue' | 'onChange'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n error?: boolean;\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n style,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n error = false,\n resize = 'vertical',\n disabled,\n rows = 3,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [isFocused, setIsFocused] = useState(false);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value);\n };\n\n const containerStyles: CSSProperties = {\n borderRadius: 16,\n ...style,\n };\n\n return (\n <div\n className={cn(\n 'lg-glass lg-text',\n 'relative w-full max-w-[400px] p-3',\n 'transition-colors',\n isFocused && 'bg-[var(--lg-glass-active)]',\n error && 'ring-2 ring-[var(--lg-destructive)]',\n disabled && 'opacity-35',\n className\n )}\n style={containerStyles}\n >\n <textarea\n ref={ref}\n value={value}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n disabled={disabled}\n rows={rows}\n className={cn(\n 'w-full min-h-[60px]',\n 'p-0 border-0 outline-none',\n 'bg-transparent text-inherit',\n 'placeholder:text-[var(--lg-muted)]',\n 'leading-relaxed'\n )}\n style={{\n font: 'inherit',\n fontSize: 14,\n resize,\n }}\n {...props}\n />\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n","import { forwardRef } from 'react';\nimport { Input, InputProps } from './Input';\n\nexport type SearchFieldProps = Omit<InputProps, 'type' | 'icon'>;\n\nconst SearchIcon = () => (\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n);\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n ({ placeholder = 'Search', clearable = true, ...props }, ref) => {\n return (\n <Input\n ref={ref}\n type=\"search\"\n placeholder={placeholder}\n icon={<SearchIcon />}\n clearable={clearable}\n {...props}\n />\n );\n }\n);\n\nSearchField.displayName = 'SearchField';\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties, useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'defaultValue' | 'onChange'> {\n options: SelectOption[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n error?: boolean;\n}\n\nconst sizeConfig = {\n sm: { height: 32, padding: '0 10px', fontSize: 13, borderRadius: 16 },\n md: { height: 40, padding: '0 14px', fontSize: 14, borderRadius: 20 },\n lg: { height: 48, padding: '0 18px', fontSize: 16, borderRadius: 24 },\n};\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n className,\n style,\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select an option',\n size = 'md',\n error = false,\n disabled,\n id: providedId,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const id = useId(providedId);\n const menuId = `${id}-menu`;\n\n const config = sizeConfig[size];\n const selectedOption = options.find(opt => opt.value === value);\n\n const updateMenuPosition = useCallback(() => {\n if (!triggerRef.current || !menuRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n menuRef.current.style.top = `${rect.bottom + window.scrollY + 4}px`;\n menuRef.current.style.left = `${rect.left + window.scrollX}px`;\n menuRef.current.style.width = `${rect.width}px`;\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n updateMenuPosition();\n window.addEventListener('scroll', updateMenuPosition, true);\n window.addEventListener('resize', updateMenuPosition);\n }\n\n return () => {\n window.removeEventListener('scroll', updateMenuPosition, true);\n window.removeEventListener('resize', updateMenuPosition);\n };\n }, [isOpen, updateMenuPosition]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n triggerRef.current?.contains(e.target as Node) ||\n menuRef.current?.contains(e.target as Node)\n ) {\n return;\n }\n setIsOpen(false);\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n const handleSelect = (optionValue: string) => {\n setValue(optionValue);\n setIsOpen(false);\n triggerRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && focusedIndex >= 0) {\n const option = options[focusedIndex];\n if (!option.disabled) handleSelect(option.value);\n } else {\n setIsOpen(true);\n }\n break;\n case 'Escape':\n setIsOpen(false);\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setFocusedIndex(prev => {\n let next = prev + 1;\n while (next < options.length && options[next].disabled) next++;\n return next < options.length ? next : prev;\n });\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setFocusedIndex(prev => {\n let next = prev - 1;\n while (next >= 0 && options[next].disabled) next--;\n return next >= 0 ? next : prev;\n });\n break;\n }\n };\n\n const triggerStyles: CSSProperties = {\n height: config.height,\n padding: config.padding,\n fontSize: config.fontSize,\n borderRadius: config.borderRadius,\n ...style,\n };\n\n return (\n <>\n <button\n ref={(node) => {\n (triggerRef as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={isOpen ? menuId : undefined}\n id={id}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className={cn(\n 'lg-glass lg-interactive lg-focus-ring lg-text',\n 'flex items-center justify-between gap-2 w-full max-w-[360px]',\n 'border-0 text-left cursor-pointer',\n error && 'ring-2 ring-[var(--lg-destructive)]',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={triggerStyles}\n {...props}\n >\n <span className={selectedOption ? '' : 'text-[var(--lg-muted)]'}>\n {selectedOption?.label ?? placeholder}\n </span>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={cn(\n 'transition-transform',\n isOpen && 'rotate-180'\n )}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n {isOpen && typeof document !== 'undefined' && createPortal(\n <div\n ref={menuRef}\n role=\"listbox\"\n id={menuId}\n aria-labelledby={id}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 py-1.5 overflow-auto max-h-[300px]',\n !reducedMotion && 'animate-[lg-scale-in_150ms_ease-out]'\n )}\n style={{\n borderRadius: 12,\n transformOrigin: 'top center',\n }}\n >\n {options.map((option, index) => (\n <button\n key={option.value}\n role=\"option\"\n aria-selected={option.value === value}\n disabled={option.disabled}\n onClick={() => !option.disabled && handleSelect(option.value)}\n onMouseEnter={() => setFocusedIndex(index)}\n className={cn(\n 'w-full flex items-center gap-2 px-3 py-2',\n 'border-0 bg-transparent text-left cursor-pointer',\n 'transition-colors',\n option.value === value && 'font-medium',\n focusedIndex === index && 'bg-[var(--lg-highlight)]',\n option.disabled && 'opacity-35 cursor-default'\n )}\n style={{ fontSize: config.fontSize }}\n >\n <span className=\"flex-1\">{option.label}</span>\n {option.value === value && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-accent)\" strokeWidth=\"2\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n </button>\n ))}\n </div>,\n document.body\n )}\n </>\n );\n }\n);\n\nSelect.displayName = 'Select';\n","import { useId as useReactId } from 'react';\n\nlet idCounter = 0;\n\nexport function useId(providedId?: string): string {\n const reactId = useReactId();\n \n if (providedId) {\n return providedId;\n }\n \n return reactId || `lg-${++idCounter}`;\n}\n","import { forwardRef, InputHTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllableBoolean } from '../hooks/use-controllable';\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'defaultChecked' | 'onChange' | 'size'> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n label?: string;\n size?: 'sm' | 'md' | 'lg';\n indeterminate?: boolean;\n}\n\nconst sizeConfig = {\n sm: { size: 16, iconSize: 10, borderRadius: 4 },\n md: { size: 20, iconSize: 12, borderRadius: 5 },\n lg: { size: 24, iconSize: 14, borderRadius: 6 },\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n style,\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n label,\n size = 'md',\n indeterminate = false,\n disabled,\n id,\n ...props\n },\n ref\n ) => {\n const [checked, setChecked] = useControllableBoolean({\n checked: controlledChecked,\n defaultChecked,\n onCheckedChange,\n });\n\n const config = sizeConfig[size];\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setChecked(e.target.checked);\n };\n\n const boxStyles: CSSProperties = {\n width: config.size,\n height: config.size,\n borderRadius: config.borderRadius,\n };\n\n return (\n <label\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={style}\n >\n <span\n className={cn(\n 'lg-glass relative flex items-center justify-center',\n 'transition-colors',\n (checked || indeterminate) && 'bg-[var(--lg-accent)]'\n )}\n style={boxStyles}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n id={id}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer m-0\"\n {...props}\n />\n {(checked || indeterminate) && (\n <svg\n width={config.iconSize}\n height={config.iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {indeterminate ? (\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n ) : (\n <polyline points=\"20 6 9 17 4 12\" />\n )}\n </svg>\n )}\n </span>\n {label && (\n <span className=\"text-sm\" style={{ color: 'var(--lg-foreground)' }}>\n {label}\n </span>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","import { forwardRef, InputHTMLAttributes, createContext, useContext, ReactNode } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\n\ninterface RadioGroupContextValue {\n name: string;\n value: string | undefined;\n onChange: (value: string) => void;\n disabled?: boolean;\n size: 'sm' | 'md' | 'lg';\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport interface RadioGroupProps {\n children: ReactNode;\n name: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n orientation?: 'horizontal' | 'vertical';\n className?: string;\n}\n\nexport function RadioGroup({\n children,\n name,\n value: controlledValue,\n defaultValue,\n onValueChange,\n disabled,\n size = 'md',\n orientation = 'vertical',\n className,\n}: RadioGroupProps) {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n return (\n <RadioGroupContext.Provider\n value={{\n name,\n value,\n onChange: setValue,\n disabled,\n size,\n }}\n >\n <div\n role=\"radiogroup\"\n className={cn(\n 'flex',\n orientation === 'vertical' ? 'flex-col gap-2' : 'flex-row gap-4',\n className\n )}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst sizeConfig = {\n sm: { size: 16, dotSize: 6 },\n md: { size: 20, dotSize: 8 },\n lg: { size: 24, dotSize: 10 },\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className,\n style,\n label,\n size: sizeProp,\n value,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const group = useContext(RadioGroupContext);\n const size = sizeProp ?? group?.size ?? 'md';\n const disabled = disabledProp ?? group?.disabled;\n const isChecked = group ? group.value === value : false;\n const config = sizeConfig[size];\n\n const handleChange = () => {\n if (group && value !== undefined) {\n group.onChange(value as string);\n }\n };\n\n return (\n <label\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={style}\n >\n <span\n className={cn(\n 'lg-glass relative flex items-center justify-center rounded-full',\n 'transition-colors',\n isChecked && 'bg-[var(--lg-accent)]'\n )}\n style={{\n width: config.size,\n height: config.size,\n }}\n >\n <input\n ref={ref}\n type=\"radio\"\n name={group?.name}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={disabled}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer m-0\"\n {...props}\n />\n {isChecked && (\n <span\n className=\"rounded-full bg-white\"\n style={{\n width: config.dotSize,\n height: config.dotSize,\n }}\n />\n )}\n </span>\n {label && (\n <span className=\"text-sm\" style={{ color: 'var(--lg-foreground)' }}>\n {label}\n </span>\n )}\n </label>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n","import { forwardRef, ButtonHTMLAttributes, CSSProperties, useRef, useState } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllableBoolean } from '../hooks/use-controllable';\nimport { usePressedState } from '../hooks/use-pressed-state';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface SwitchProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'defaultValue' | 'onChange'> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst sizeConfig = {\n sm: { width: 44, height: 24, thumbSize: 20, travel: 20 },\n md: { width: 51, height: 31, thumbSize: 27, travel: 20 },\n lg: { width: 60, height: 36, thumbSize: 32, travel: 24 },\n};\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n className,\n style,\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n size = 'md',\n disabled,\n ...props\n },\n ref\n ) => {\n const [checked, setChecked] = useControllableBoolean({\n checked: controlledChecked,\n defaultChecked,\n onCheckedChange,\n });\n\n const [lift, setLift] = useState(0);\n const reducedMotion = useReducedMotion();\n const config = sizeConfig[size];\n\n const { isPressed, pressHandlers } = usePressedState({\n disabled,\n onPressStart: () => !reducedMotion && setLift(1),\n onPressEnd: () => setLift(0),\n });\n\n const handleClick = () => {\n if (!disabled) {\n setChecked(!checked);\n }\n };\n\n const customStyles: CSSProperties = {\n width: config.width,\n height: config.height,\n ...style,\n };\n\n const thumbStyles: CSSProperties = {\n '--lg-lift': lift,\n width: config.thumbSize + lift * 8,\n height: config.thumbSize + lift * 4,\n transform: `translateX(${checked ? config.travel : 0}px) scale(${1 - lift * 0.05})`,\n transition: reducedMotion ? 'none' : 'transform 200ms var(--lg-ease-spring), width 150ms var(--lg-ease), height 150ms var(--lg-ease)',\n } as CSSProperties;\n\n return (\n <button\n ref={ref}\n role=\"switch\"\n aria-checked={checked}\n className={cn(\n 'lg-interactive lg-focus-ring',\n 'relative inline-flex items-center',\n 'p-0 border-0 rounded-full cursor-pointer',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={customStyles}\n disabled={disabled}\n onClick={handleClick}\n {...pressHandlers}\n {...props}\n >\n {/* Track */}\n <span\n className=\"absolute inset-0 rounded-full transition-colors\"\n style={{\n backgroundColor: checked ? 'var(--lg-on)' : 'var(--lg-track)',\n transition: reducedMotion ? 'none' : 'background-color 200ms var(--lg-ease)',\n }}\n />\n\n {/* Thumb */}\n <span\n className=\"absolute rounded-full\"\n style={{\n ...thumbStyles,\n left: 2,\n top: '50%',\n marginTop: -(config.thumbSize + lift * 4) / 2,\n backdropFilter: `blur(${2 * (1 - lift) + 0.5 * lift}px) brightness(${1 + 0.15 * (1 - lift)}) saturate(1.5)`,\n boxShadow: `\n 0 6px 24px rgb(0 0 0 / 0.2),\n inset 0 0 0 1.5px rgb(255 255 255 / 0.5),\n inset 0 2px 1px rgb(255 255 255 / 0.45)\n `,\n }}\n >\n <span\n className=\"absolute inset-0 rounded-full bg-white\"\n style={{\n opacity: 1 - lift * 0.3,\n }}\n />\n </span>\n </button>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n","import { forwardRef, InputHTMLAttributes, CSSProperties, useState, useRef, useCallback } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { clamp, mapRange } from '../utils';\n\nexport interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'defaultValue' | 'onChange'> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n showValue?: boolean;\n formatValue?: (value: number) => string;\n}\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n (\n {\n className,\n style,\n value: controlledValue,\n defaultValue = 0,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n showValue = false,\n formatValue = (v) => String(Math.round(v)),\n disabled,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [lift, setLift] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const reducedMotion = useReducedMotion();\n const trackRef = useRef<HTMLDivElement>(null);\n\n const currentValue = value ?? defaultValue;\n const progress = mapRange(currentValue, min, max, 0, 1);\n\n const handlePointerDown = useCallback((e: React.PointerEvent) => {\n if (disabled) return;\n setIsDragging(true);\n if (!reducedMotion) setLift(1);\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n }, [disabled, reducedMotion]);\n\n const handlePointerUp = useCallback(() => {\n setIsDragging(false);\n setLift(0);\n }, []);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(parseFloat(e.target.value));\n };\n\n const thumbStyles: CSSProperties = {\n '--lg-lift': lift,\n '--lg-progress': progress,\n left: `calc(${progress * 100}% - 18px)`,\n width: 36 + lift * 24,\n height: 36 + lift * 4,\n transform: `scale(${0.6 + lift * 0.15})`,\n transition: reducedMotion || isDragging ? 'none' : 'transform 150ms var(--lg-ease), width 150ms var(--lg-ease), height 150ms var(--lg-ease)',\n } as CSSProperties;\n\n return (\n <div\n ref={trackRef}\n className={cn(\n 'relative w-full h-10',\n disabled && 'opacity-35',\n className\n )}\n style={style}\n >\n {/* Track background */}\n <div\n className=\"absolute rounded-full\"\n style={{\n top: 17,\n left: 0,\n right: 0,\n height: 6,\n backgroundColor: 'var(--lg-rail)',\n }}\n />\n\n {/* Fill */}\n <div\n className=\"absolute rounded-full\"\n style={{\n top: 17,\n left: 0,\n width: `calc(${progress * 100}%)`,\n height: 6,\n backgroundColor: 'var(--lg-fill)',\n transition: isDragging ? 'none' : 'width 50ms linear',\n }}\n />\n\n {/* Thumb */}\n <div\n className=\"absolute rounded-full pointer-events-none\"\n style={{\n ...thumbStyles,\n top: 2,\n backdropFilter: `blur(${2 * (1 - lift) + 0.5 * lift}px) brightness(${1 + 0.15 * (1 - lift)}) saturate(1.5)`,\n boxShadow: `\n 0 6px 24px rgb(0 0 0 / 0.2),\n inset 0 0 0 1.5px rgb(255 255 255 / 0.5),\n inset 0 2px 1px rgb(255 255 255 / 0.45)\n `,\n }}\n >\n <span\n className=\"absolute inset-0 rounded-full bg-white\"\n style={{ opacity: 1 - lift * 0.3 }}\n />\n </div>\n\n {/* Native input for accessibility */}\n <input\n ref={ref}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleInputChange}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n disabled={disabled}\n className={cn(\n 'absolute inset-0 w-full h-full',\n 'm-0 opacity-0 cursor-pointer',\n disabled && 'cursor-default'\n )}\n style={{ touchAction: 'none' }}\n {...props}\n />\n\n {/* Value display */}\n {showValue && (\n <div\n className=\"absolute text-xs font-medium text-center\"\n style={{\n left: `${progress * 100}%`,\n top: -20,\n transform: 'translateX(-50%)',\n color: 'var(--lg-foreground)',\n }}\n >\n {formatValue(currentValue)}\n </div>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = 'Slider';\n","export { cn } from './cn';\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function lerp(start: number, end: number, t: number): number {\n return start + (end - start) * t;\n}\n\nexport function mapRange(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number\n): number {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin;\n}\n\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport function throttle<T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let lastCall = 0;\n return (...args: Parameters<T>) => {\n const now = Date.now();\n if (now - lastCall >= delay) {\n lastCall = now;\n fn(...args);\n }\n };\n}\n\nexport function noop(): void {}\n\nexport function isServer(): boolean {\n return typeof window === 'undefined';\n}\n\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n","import { forwardRef, HTMLAttributes, ReactNode, ElementType, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface TabBarItem {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n href?: string;\n}\n\nexport interface TabBarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n items: TabBarItem[];\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n link?: ElementType;\n showLabels?: boolean;\n}\n\nexport const TabBar = forwardRef<HTMLDivElement, TabBarProps>(\n (\n {\n className,\n style,\n items,\n value: controlledValue,\n defaultValue,\n onValueChange,\n link: LinkComponent,\n showLabels = true,\n 'aria-label': ariaLabel,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable<string | null>({\n value: controlledValue,\n defaultValue: defaultValue ?? items[0]?.value ?? null,\n onChange: onValueChange as ((value: string | null) => void) | undefined,\n });\n\n const [lift, setLift] = useState(0);\n const reducedMotion = useReducedMotion();\n\n const selectedIndex = items.findIndex(item => item.value === value);\n const hasIcons = items.some(item => item.icon);\n\n const tabWidth = hasIcons ? 72 : 84;\n const tabHeight = hasIcons ? 52 : 32;\n const inset = 4;\n\n const handleSelect = (itemValue: string) => {\n setValue(itemValue);\n };\n\n const handlePointerDown = () => {\n if (!reducedMotion) setLift(1);\n };\n\n const handlePointerUp = () => {\n setLift(0);\n };\n\n const containerStyles: CSSProperties = {\n padding: inset,\n borderRadius: tabHeight / 2 + inset,\n ...style,\n };\n\n const lensStyles: CSSProperties = {\n '--lg-lift': lift,\n position: 'absolute',\n top: inset,\n left: inset,\n width: tabWidth + lift * 27,\n height: tabHeight + lift * 20,\n marginTop: -lift * 10,\n marginLeft: -lift * 13.5,\n borderRadius: (tabHeight + lift * 20) / 2,\n transform: `translateX(${selectedIndex * tabWidth}px) scale(${1 + lift * 0.05})`,\n transition: reducedMotion ? 'none' : 'transform 200ms var(--lg-ease-spring), width 150ms var(--lg-ease), height 150ms var(--lg-ease), margin 150ms var(--lg-ease)',\n background: 'var(--lg-selection)',\n boxShadow: lift > 0.5 \n ? `0 ${7 / (1 + lift * 0.5)}px ${11 / (1 + lift * 0.5)}px var(--lg-lens-drop)` \n : 'none',\n } as CSSProperties;\n\n return (\n <nav\n ref={ref}\n role=\"tablist\"\n aria-label={ariaLabel}\n className={cn(\n 'lg-glass lg-interactive',\n 'relative inline-flex',\n className\n )}\n style={containerStyles}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n {...props}\n >\n {/* Lens/Selection indicator */}\n {selectedIndex >= 0 && (\n <div className=\"lg-glass\" style={lensStyles} />\n )}\n\n {/* Tabs */}\n <div className=\"relative flex z-10\">\n {items.map((item) => {\n const isSelected = item.value === value;\n const TabElement = item.href && LinkComponent ? LinkComponent : 'button';\n\n return (\n <TabElement\n key={item.value}\n role=\"tab\"\n aria-selected={isSelected}\n href={item.href}\n onClick={() => handleSelect(item.value)}\n className={cn(\n 'flex flex-col items-center justify-center',\n 'border-0 bg-transparent cursor-pointer',\n 'no-underline transition-colors',\n hasIcons ? 'gap-0.5 text-[10px] font-medium' : 'text-sm'\n )}\n style={{\n width: tabWidth,\n height: tabHeight,\n color: isSelected \n ? (hasIcons ? 'var(--lg-fill)' : 'var(--lg-foreground)') \n : 'var(--lg-muted)',\n }}\n >\n {item.icon && (\n <span className=\"flex items-center justify-center w-[26px] h-[26px]\">\n {item.icon}\n </span>\n )}\n {(showLabels || !item.icon) && (\n <span className=\"block\">{item.label}</span>\n )}\n </TabElement>\n );\n })}\n </div>\n </nav>\n );\n }\n);\n\nTabBar.displayName = 'TabBar';\n","import { forwardRef, HTMLAttributes, ReactNode, useRef, useState, useCallback, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface SegmentedControlItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n items: SegmentedControlItem[];\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst sizeConfig = {\n sm: { height: 28, padding: 2, fontSize: 12, segmentWidth: 72 },\n md: { height: 32, padding: 2, fontSize: 13, segmentWidth: 84 },\n lg: { height: 40, padding: 3, fontSize: 14, segmentWidth: 100 },\n};\n\nexport const SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n (\n {\n className,\n style,\n items,\n value: controlledValue,\n defaultValue,\n onValueChange,\n size = 'md',\n 'aria-label': ariaLabel,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable<string | null>({\n value: controlledValue,\n defaultValue: defaultValue ?? items[0]?.value ?? null,\n onChange: onValueChange as ((value: string | null) => void) | undefined,\n });\n\n const [lift, setLift] = useState(0);\n const reducedMotion = useReducedMotion();\n const config = sizeConfig[size];\n\n const selectedIndex = items.findIndex(item => item.value === value);\n\n const handleSelect = (itemValue: string, disabled?: boolean) => {\n if (disabled) return;\n setValue(itemValue);\n };\n\n const handlePointerDown = () => {\n if (!reducedMotion) setLift(1);\n };\n\n const handlePointerUp = () => {\n setLift(0);\n };\n\n const containerStyles: CSSProperties = {\n height: config.height,\n borderRadius: config.height / 2,\n ...style,\n };\n\n const thumbStyles: CSSProperties = {\n '--lg-lift': lift,\n position: 'absolute',\n top: config.padding,\n left: config.padding,\n width: config.segmentWidth - config.padding * 2,\n height: config.height - config.padding * 2,\n borderRadius: (config.height - config.padding * 2) / 2,\n transform: `translateX(${selectedIndex * config.segmentWidth}px) scale(${1 + lift * 0.1}, ${1 + lift * 0.05})`,\n transition: reducedMotion ? 'none' : 'transform 200ms var(--lg-ease-spring), opacity 150ms var(--lg-ease)',\n background: 'var(--lg-segment-thumb)',\n boxShadow: lift > 0 ? '0 4px 12px rgb(0 0 0 / 0.15)' : '0 1px 3px rgb(0 0 0 / 0.1)',\n } as CSSProperties;\n\n return (\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n className={cn(\n 'lg-glass lg-interactive',\n 'relative inline-flex',\n className\n )}\n style={containerStyles}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n {...props}\n >\n {/* Background */}\n <div\n className=\"absolute inset-0 rounded-full\"\n style={{\n background: 'var(--lg-segment-track)',\n }}\n />\n\n {/* Thumb */}\n {selectedIndex >= 0 && (\n <div style={thumbStyles} />\n )}\n\n {/* Segments */}\n <div className=\"relative flex z-10\">\n {items.map((item, index) => (\n <button\n key={item.value}\n role=\"radio\"\n aria-checked={item.value === value}\n disabled={item.disabled}\n onClick={() => handleSelect(item.value, item.disabled)}\n className={cn(\n 'flex items-center justify-center',\n 'border-0 bg-transparent cursor-pointer',\n 'transition-colors',\n item.disabled && 'opacity-35 cursor-default'\n )}\n style={{\n width: config.segmentWidth,\n height: config.height,\n fontSize: config.fontSize,\n fontWeight: item.value === value ? 500 : 400,\n color: 'var(--lg-segment-label)',\n }}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n );\n }\n);\n\nSegmentedControl.displayName = 'SegmentedControl';\n","import { forwardRef, HTMLAttributes, ReactNode, createContext, useContext, useState, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\ninterface TabsContextValue {\n value: string | undefined;\n onChange: (value: string) => void;\n baseId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n children,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const baseId = useId();\n\n return (\n <TabsContext.Provider value={{ value, onChange: setValue, baseId }}>\n <div\n ref={ref}\n className={cn(\n orientation === 'vertical' && 'flex',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n }\n);\n\nTabs.displayName = 'Tabs';\n\nexport interface TabsListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"tablist\"\n className={cn(\n 'lg-glass inline-flex items-center gap-1 p-1 rounded-lg',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTabsList.displayName = 'TabsList';\n\nexport interface TabsTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const TabsTrigger = forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, disabled = false, children, ...props }, ref) => {\n const context = useContext(TabsContext);\n if (!context) throw new Error('TabsTrigger must be used within Tabs');\n\n const { value: selectedValue, onChange, baseId } = context;\n const isSelected = selectedValue === value;\n const reducedMotion = useReducedMotion();\n\n return (\n <button\n ref={ref}\n role=\"tab\"\n id={`${baseId}-trigger-${value}`}\n aria-selected={isSelected}\n aria-controls={`${baseId}-content-${value}`}\n tabIndex={isSelected ? 0 : -1}\n disabled={disabled}\n onClick={() => !disabled && onChange(value)}\n className={cn(\n 'px-3 py-1.5 rounded-md text-sm font-medium',\n 'border-0 bg-transparent cursor-pointer',\n 'transition-colors',\n isSelected \n ? 'bg-white text-[var(--lg-foreground)] shadow-sm' \n : 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]',\n disabled && 'opacity-50 cursor-default',\n className\n )}\n style={{\n transition: reducedMotion ? 'none' : 'all 150ms var(--lg-ease)',\n }}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nTabsTrigger.displayName = 'TabsTrigger';\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children: ReactNode;\n}\n\nexport const TabsContent = forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, children, ...props }, ref) => {\n const context = useContext(TabsContext);\n if (!context) throw new Error('TabsContent must be used within Tabs');\n\n const { value: selectedValue, baseId } = context;\n const isSelected = selectedValue === value;\n const reducedMotion = useReducedMotion();\n\n if (!isSelected) return null;\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`${baseId}-content-${value}`}\n aria-labelledby={`${baseId}-trigger-${value}`}\n tabIndex={0}\n className={cn(\n 'mt-3 outline-none',\n !reducedMotion && 'animate-[lg-fade-in_150ms_ease-out]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTabsContent.displayName = 'TabsContent';\n","import { forwardRef, HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface NavbarProps extends HTMLAttributes<HTMLElement> {\n logo?: ReactNode;\n children?: ReactNode;\n actions?: ReactNode;\n sticky?: boolean;\n bordered?: boolean;\n}\n\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n (\n {\n className,\n style,\n logo,\n children,\n actions,\n sticky = false,\n bordered = true,\n ...props\n },\n ref\n ) => {\n return (\n <header\n ref={ref}\n className={cn(\n 'lg-glass lg-text',\n 'flex items-center justify-between gap-4',\n 'px-4 h-16',\n sticky && 'sticky top-0 z-40',\n bordered && 'border-b border-[var(--lg-separator)]',\n className\n )}\n style={style}\n {...props}\n >\n {logo && (\n <div className=\"flex-shrink-0\">\n {logo}\n </div>\n )}\n\n {children && (\n <nav className=\"flex-1 flex items-center gap-1\">\n {children}\n </nav>\n )}\n\n {actions && (\n <div className=\"flex-shrink-0 flex items-center gap-2\">\n {actions}\n </div>\n )}\n </header>\n );\n }\n);\n\nNavbar.displayName = 'Navbar';\n\nexport interface NavbarLinkProps extends HTMLAttributes<HTMLAnchorElement> {\n href: string;\n active?: boolean;\n children: ReactNode;\n}\n\nexport const NavbarLink = forwardRef<HTMLAnchorElement, NavbarLinkProps>(\n ({ className, href, active = false, children, ...props }, ref) => {\n return (\n <a\n ref={ref}\n href={href}\n className={cn(\n 'px-3 py-2 rounded-lg text-sm font-medium',\n 'transition-colors no-underline',\n active\n ? 'bg-[var(--lg-accent-light)] text-[var(--lg-accent)]'\n : 'text-[var(--lg-foreground-secondary)] hover:bg-[var(--lg-glass)] hover:text-[var(--lg-foreground)]',\n className\n )}\n aria-current={active ? 'page' : undefined}\n {...props}\n >\n {children}\n </a>\n );\n }\n);\n\nNavbarLink.displayName = 'NavbarLink';\n","import { forwardRef, HTMLAttributes, ReactNode, createContext, useContext, useState, useCallback } from 'react';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\ninterface SidebarContextValue {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n setCollapsed: (collapsed: boolean) => void;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nexport function useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider');\n }\n return context;\n}\n\nexport interface SidebarProviderProps {\n children: ReactNode;\n defaultCollapsed?: boolean;\n}\n\nexport function SidebarProvider({ children, defaultCollapsed = false }: SidebarProviderProps) {\n const [isCollapsed, setCollapsed] = useState(defaultCollapsed);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed(prev => !prev);\n }, []);\n\n return (\n <SidebarContext.Provider value={{ isCollapsed, toggleCollapsed, setCollapsed }}>\n {children}\n </SidebarContext.Provider>\n );\n}\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n width?: number;\n collapsedWidth?: number;\n}\n\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(\n (\n {\n className,\n style,\n children,\n width = 260,\n collapsedWidth = 72,\n ...props\n },\n ref\n ) => {\n const { isCollapsed } = useSidebar();\n const reducedMotion = useReducedMotion();\n\n return (\n <aside\n ref={ref}\n className={cn(\n 'lg-glass lg-text',\n 'h-full flex flex-col',\n 'border-r border-[var(--lg-separator)]',\n className\n )}\n style={{\n width: isCollapsed ? collapsedWidth : width,\n transition: reducedMotion ? 'none' : 'width 200ms var(--lg-ease)',\n ...style,\n }}\n {...props}\n >\n {children}\n </aside>\n );\n }\n);\n\nSidebar.displayName = 'Sidebar';\n\nexport interface SidebarHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const SidebarHeader = forwardRef<HTMLDivElement, SidebarHeaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center h-16 px-4',\n 'border-b border-[var(--lg-separator)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarHeader.displayName = 'SidebarHeader';\n\nexport interface SidebarContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const SidebarContent = forwardRef<HTMLDivElement, SidebarContentProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex-1 overflow-auto p-3', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarContent.displayName = 'SidebarContent';\n\nexport interface SidebarItemProps {\n icon?: ReactNode;\n label: string;\n active?: boolean;\n href?: string;\n onClick?: () => void;\n className?: string;\n}\n\nexport const SidebarItem = forwardRef<HTMLButtonElement, SidebarItemProps>(\n ({ className, icon, label, active = false, href, onClick, ...props }, ref) => {\n const { isCollapsed } = useSidebar();\n\n const sharedProps = {\n className: cn(\n 'w-full flex items-center gap-3 px-3 py-2.5 rounded-lg',\n 'border-0 text-left text-sm font-medium',\n 'transition-colors cursor-pointer no-underline',\n active\n ? 'bg-[var(--lg-accent-light)] text-[var(--lg-accent)]'\n : 'bg-transparent text-[var(--lg-foreground-secondary)] hover:bg-[var(--lg-glass)] hover:text-[var(--lg-foreground)]',\n isCollapsed && 'justify-center px-0',\n className\n ),\n title: isCollapsed ? label : undefined,\n };\n\n const content = (\n <>\n {icon && (\n <span className=\"flex-shrink-0 w-5 h-5\">{icon}</span>\n )}\n {!isCollapsed && <span className=\"truncate\">{label}</span>}\n </>\n );\n\n if (href) {\n return (\n <a href={href} onClick={onClick} {...sharedProps} {...props}>\n {content}\n </a>\n );\n }\n\n return (\n <button ref={ref} onClick={onClick} {...sharedProps} {...props}>\n {content}\n </button>\n );\n }\n);\n\nSidebarItem.displayName = 'SidebarItem';\n\nexport interface SidebarGroupProps extends HTMLAttributes<HTMLDivElement> {\n title?: string;\n children: ReactNode;\n}\n\nexport const SidebarGroup = forwardRef<HTMLDivElement, SidebarGroupProps>(\n ({ className, title, children, ...props }, ref) => {\n const { isCollapsed } = useSidebar();\n\n return (\n <div ref={ref} className={cn('mb-4', className)} {...props}>\n {title && !isCollapsed && (\n <div className=\"px-3 py-2 text-xs font-semibold text-[var(--lg-muted)] uppercase tracking-wider\">\n {title}\n </div>\n )}\n <div className=\"space-y-1\">{children}</div>\n </div>\n );\n }\n);\n\nSidebarGroup.displayName = 'SidebarGroup';\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface DockItem {\n id: string;\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n href?: string;\n badge?: number;\n}\n\nexport interface DockProps extends HTMLAttributes<HTMLDivElement> {\n items: DockItem[];\n magnification?: number;\n distance?: number;\n direction?: 'bottom' | 'left' | 'right';\n}\n\nexport const Dock = forwardRef<HTMLDivElement, DockProps>(\n (\n {\n className,\n style,\n items,\n magnification = 1.5,\n distance = 100,\n direction = 'bottom',\n ...props\n },\n ref\n ) => {\n const [mouseX, setMouseX] = useState<number | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (reducedMotion) return;\n const rect = containerRef.current?.getBoundingClientRect();\n if (rect) {\n setMouseX(e.clientX - rect.left);\n }\n };\n\n const handleMouseLeave = () => {\n setMouseX(null);\n };\n\n const getScale = (index: number): number => {\n if (mouseX === null || reducedMotion) return 1;\n\n const iconSize = 48;\n const gap = 8;\n const totalWidth = items.length * (iconSize + gap) - gap;\n const startX = (containerRef.current?.offsetWidth || 0) / 2 - totalWidth / 2;\n const iconCenter = startX + index * (iconSize + gap) + iconSize / 2;\n\n const distanceFromMouse = Math.abs(mouseX - iconCenter);\n if (distanceFromMouse > distance) return 1;\n\n const scale = 1 + (magnification - 1) * (1 - distanceFromMouse / distance);\n return scale;\n };\n\n const isHorizontal = direction === 'bottom';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'lg-glass lg-glass-elevated',\n 'inline-flex items-end gap-2 p-2',\n !isHorizontal && 'flex-col items-center',\n className\n )}\n style={{\n borderRadius: 20,\n ...style,\n }}\n {...props}\n >\n <div\n ref={containerRef}\n className={cn(\n 'flex items-end gap-2',\n !isHorizontal && 'flex-col items-center'\n )}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {items.map((item, index) => {\n const scale = getScale(index);\n const Element = item.href ? 'a' : 'button';\n\n const itemStyles: CSSProperties = {\n transform: `scale(${scale})`,\n transformOrigin: isHorizontal ? 'bottom center' : \n direction === 'left' ? 'center right' : 'center left',\n transition: reducedMotion ? 'none' : 'transform 150ms var(--lg-ease-spring)',\n };\n\n return (\n <Element\n key={item.id}\n href={item.href}\n onClick={item.onClick}\n className={cn(\n 'lg-glass lg-interactive lg-focus-ring',\n 'relative flex items-center justify-center',\n 'w-12 h-12 p-0 border-0 rounded-xl',\n 'text-[var(--lg-foreground)]',\n 'hover:bg-[var(--lg-glass-active)] transition-colors'\n )}\n style={itemStyles}\n title={item.label}\n aria-label={item.label}\n >\n <span className=\"w-6 h-6\">{item.icon}</span>\n {item.badge !== undefined && item.badge > 0 && (\n <span\n className=\"absolute -top-1 -right-1 flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full bg-[var(--lg-destructive)] text-white text-[10px] font-medium\"\n >\n {item.badge > 99 ? '99+' : item.badge}\n </span>\n )}\n </Element>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nDock.displayName = 'Dock';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties, useEffect, useCallback, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface ModalProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n title?: string;\n description?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n showCloseButton?: boolean;\n}\n\nconst sizeConfig = {\n sm: { maxWidth: 400 },\n md: { maxWidth: 500 },\n lg: { maxWidth: 640 },\n xl: { maxWidth: 800 },\n full: { maxWidth: '90vw' },\n};\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n className,\n style,\n open,\n onOpenChange,\n children,\n title,\n description,\n size = 'md',\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showCloseButton = true,\n ...props\n },\n ref\n ) => {\n const reducedMotion = useReducedMotion();\n const modalRef = useRef<HTMLDivElement>(null);\n const config = sizeConfig[size];\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n handleClose();\n }\n };\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (closeOnEscape && e.key === 'Escape') {\n handleClose();\n }\n }, [closeOnEscape, handleClose]);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown);\n document.body.style.overflow = 'hidden';\n modalRef.current?.focus();\n }\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.body.style.overflow = '';\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n const modalContent = (\n <div\n className={cn(\n 'fixed inset-0 z-50 flex items-center justify-center p-4',\n 'bg-black/40 backdrop-blur-sm',\n !reducedMotion && 'animate-[lg-fade-in_200ms_ease-out]'\n )}\n onClick={handleOverlayClick}\n aria-modal=\"true\"\n role=\"dialog\"\n aria-labelledby={title ? 'modal-title' : undefined}\n aria-describedby={description ? 'modal-description' : undefined}\n >\n <div\n ref={ref || modalRef}\n tabIndex={-1}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'relative w-full outline-none',\n !reducedMotion && 'animate-[lg-scale-in_200ms_var(--lg-ease-spring)]',\n className\n )}\n style={{\n maxWidth: config.maxWidth,\n borderRadius: 24,\n ...style,\n }}\n {...props}\n >\n {/* Close button */}\n {showCloseButton && (\n <button\n onClick={handleClose}\n className={cn(\n 'absolute top-4 right-4',\n 'w-8 h-8 rounded-full',\n 'flex items-center justify-center',\n 'bg-[var(--lg-glass)] hover:bg-[var(--lg-glass-active)]',\n 'border-0 cursor-pointer transition-colors',\n 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n\n {/* Header */}\n {(title || description) && (\n <div className=\"px-6 pt-6 pb-2\">\n {title && (\n <h2\n id=\"modal-title\"\n className=\"text-lg font-semibold m-0\"\n style={{ color: 'var(--lg-foreground)' }}\n >\n {title}\n </h2>\n )}\n {description && (\n <p\n id=\"modal-description\"\n className=\"text-sm mt-1 m-0\"\n style={{ color: 'var(--lg-muted)' }}\n >\n {description}\n </p>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"p-6\">\n {children}\n </div>\n </div>\n </div>\n );\n\n return createPortal(modalContent, document.body);\n }\n);\n\nModal.displayName = 'Modal';\n\nexport interface ModalFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-end gap-3',\n 'pt-4 border-t border-[var(--lg-separator)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nModalFooter.displayName = 'ModalFooter';\n","import { forwardRef, HTMLAttributes, ReactNode, useEffect, useCallback, useRef, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface SheetProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n side?: 'bottom' | 'top' | 'left' | 'right';\n size?: 'sm' | 'md' | 'lg' | 'full';\n showHandle?: boolean;\n}\n\nconst sizeConfig = {\n sm: { width: 320, height: 300 },\n md: { width: 400, height: 400 },\n lg: { width: 500, height: 500 },\n full: { width: '100%', height: '85vh' },\n};\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(\n (\n {\n className,\n style,\n open,\n onOpenChange,\n children,\n side = 'bottom',\n size = 'md',\n showHandle = true,\n ...props\n },\n ref\n ) => {\n const reducedMotion = useReducedMotion();\n const sheetRef = useRef<HTMLDivElement>(null);\n const config = sizeConfig[size];\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n handleClose();\n }\n };\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleClose();\n }\n }, [handleClose]);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.body.style.overflow = '';\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n const isHorizontal = side === 'left' || side === 'right';\n \n const sheetStyles: CSSProperties = {\n position: 'fixed',\n zIndex: 50,\n ...(side === 'bottom' && {\n bottom: 0,\n left: 0,\n right: 0,\n height: typeof config.height === 'number' ? config.height : config.height,\n maxHeight: '90vh',\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n }),\n ...(side === 'top' && {\n top: 0,\n left: 0,\n right: 0,\n height: typeof config.height === 'number' ? config.height : config.height,\n maxHeight: '90vh',\n borderBottomLeftRadius: 20,\n borderBottomRightRadius: 20,\n }),\n ...(side === 'left' && {\n top: 0,\n left: 0,\n bottom: 0,\n width: typeof config.width === 'number' ? config.width : config.width,\n maxWidth: '90vw',\n borderTopRightRadius: 20,\n borderBottomRightRadius: 20,\n }),\n ...(side === 'right' && {\n top: 0,\n right: 0,\n bottom: 0,\n width: typeof config.width === 'number' ? config.width : config.width,\n maxWidth: '90vw',\n borderTopLeftRadius: 20,\n borderBottomLeftRadius: 20,\n }),\n ...style,\n };\n\n const animationClass = reducedMotion ? '' : {\n bottom: 'animate-[lg-slide-up_300ms_var(--lg-ease-spring)]',\n top: 'animate-[lg-slide-down_300ms_var(--lg-ease-spring)]',\n left: 'animate-[lg-slide-right_300ms_var(--lg-ease-spring)]',\n right: 'animate-[lg-slide-left_300ms_var(--lg-ease-spring)]',\n }[side];\n\n const sheetContent = (\n <div\n className={cn(\n 'fixed inset-0 z-50',\n 'bg-black/40 backdrop-blur-sm',\n !reducedMotion && 'animate-[lg-fade-in_200ms_ease-out]'\n )}\n onClick={handleOverlayClick}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n <div\n ref={ref || sheetRef}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'overflow-auto',\n animationClass,\n className\n )}\n style={sheetStyles}\n {...props}\n >\n {showHandle && (side === 'bottom' || side === 'top') && (\n <div className=\"flex justify-center py-3\">\n <div\n className=\"w-10 h-1 rounded-full bg-[var(--lg-muted)] opacity-50\"\n />\n </div>\n )}\n <div className=\"p-4\">\n {children}\n </div>\n </div>\n </div>\n );\n\n return createPortal(sheetContent, document.body);\n }\n);\n\nSheet.displayName = 'Sheet';\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface MenuItem {\n label: ReactNode;\n icon?: ReactNode;\n onSelect?: () => void;\n destructive?: boolean;\n disabled?: boolean;\n shortcut?: string;\n}\n\nexport type MenuEntry = MenuItem | 'separator';\n\nexport interface MenuProps extends HTMLAttributes<HTMLDivElement> {\n items: MenuEntry[];\n trigger: ReactNode;\n align?: 'start' | 'end';\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(\n (\n {\n className,\n items,\n trigger,\n align = 'end',\n 'aria-label': ariaLabel,\n ...props\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n\n const updatePosition = () => {\n if (!triggerRef.current || !menuRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const menuRect = menuRef.current.getBoundingClientRect();\n\n let left = align === 'end' \n ? triggerRect.right - menuRect.width \n : triggerRect.left;\n \n if (left < 8) left = 8;\n if (left + menuRect.width > window.innerWidth - 8) {\n left = window.innerWidth - menuRect.width - 8;\n }\n\n setPosition({\n top: triggerRect.bottom + window.scrollY + 4,\n left: left + window.scrollX,\n });\n };\n\n useEffect(() => {\n if (isOpen) {\n updatePosition();\n \n const handleClickOutside = (e: MouseEvent) => {\n if (\n !triggerRef.current?.contains(e.target as Node) &&\n !menuRef.current?.contains(e.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setIsOpen(false);\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }\n }, [isOpen]);\n\n const handleItemClick = (item: MenuItem) => {\n if (item.disabled) return;\n item.onSelect?.();\n setIsOpen(false);\n };\n\n return (\n <div ref={ref} className={cn('relative inline-flex', className)} {...props}>\n <button\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n className=\"lg-glass lg-interactive lg-focus-ring w-10 h-10 flex items-center justify-center rounded-full border-0\"\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n aria-haspopup=\"menu\"\n >\n {trigger}\n </button>\n\n {isOpen && typeof document !== 'undefined' && createPortal(\n <div\n ref={menuRef}\n role=\"menu\"\n aria-label={ariaLabel}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 min-w-[180px] p-1.5',\n !reducedMotion && 'animate-[lg-scale-in_150ms_var(--lg-ease-spring)]'\n )}\n style={{\n top: position.top,\n left: position.left,\n borderRadius: 12,\n transformOrigin: align === 'end' ? 'top right' : 'top left',\n }}\n >\n {items.map((item, index) => {\n if (item === 'separator') {\n return (\n <div\n key={`sep-${index}`}\n className=\"my-1.5 mx-2 border-t border-[var(--lg-separator)]\"\n />\n );\n }\n\n return (\n <button\n key={index}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => handleItemClick(item)}\n className={cn(\n 'w-full flex items-center gap-2.5 px-3 py-2 rounded-lg',\n 'border-0 bg-transparent text-left text-sm cursor-pointer',\n 'transition-colors',\n item.destructive && 'text-[var(--lg-destructive)]',\n item.disabled && 'opacity-40 cursor-default',\n !item.disabled && 'hover:bg-[var(--lg-highlight)]'\n )}\n style={{ color: item.destructive ? undefined : 'var(--lg-foreground)' }}\n >\n {item.icon && (\n <span className=\"flex-shrink-0 w-4 h-4\">{item.icon}</span>\n )}\n <span className=\"flex-1\">{item.label}</span>\n {item.shortcut && (\n <span className=\"text-xs text-[var(--lg-muted)]\">{item.shortcut}</span>\n )}\n </button>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n }\n);\n\nMenu.displayName = 'Menu';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties, useState, useRef, useEffect, cloneElement, isValidElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface TooltipProps {\n content: ReactNode;\n children: ReactNode;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n delay?: number;\n disabled?: boolean;\n}\n\nexport function Tooltip({\n content,\n children,\n side = 'top',\n align = 'center',\n delay = 200,\n disabled = false,\n}: TooltipProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n const reducedMotion = useReducedMotion();\n\n const updatePosition = () => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const gap = 8;\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case 'top':\n top = triggerRect.top - tooltipRect.height - gap;\n break;\n case 'bottom':\n top = triggerRect.bottom + gap;\n break;\n case 'left':\n left = triggerRect.left - tooltipRect.width - gap;\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2;\n break;\n case 'right':\n left = triggerRect.right + gap;\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = triggerRect.left;\n break;\n case 'center':\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2;\n break;\n case 'end':\n left = triggerRect.right - tooltipRect.width;\n break;\n }\n }\n\n setPosition({ top: top + window.scrollY, left: left + window.scrollX });\n };\n\n useEffect(() => {\n if (isOpen) {\n updatePosition();\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n }\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [isOpen]);\n\n const handleMouseEnter = () => {\n if (disabled) return;\n timeoutRef.current = setTimeout(() => setIsOpen(true), delay);\n };\n\n const handleMouseLeave = () => {\n clearTimeout(timeoutRef.current);\n setIsOpen(false);\n };\n\n const child = isValidElement(children) ? children : <span>{children}</span>;\n\n const trigger = cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleMouseEnter,\n onBlur: handleMouseLeave,\n });\n\n return (\n <>\n {trigger}\n {isOpen && typeof document !== 'undefined' && createPortal(\n <div\n ref={tooltipRef}\n role=\"tooltip\"\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 px-3 py-1.5 text-sm',\n !reducedMotion && 'animate-[lg-fade-in_150ms_ease-out]'\n )}\n style={{\n top: position.top,\n left: position.left,\n borderRadius: 8,\n maxWidth: 300,\n }}\n >\n {content}\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties, useState, useEffect, createContext, useContext, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface ToastProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'success' | 'warning' | 'error' | 'info';\n title?: string;\n description?: string;\n icon?: ReactNode;\n action?: ReactNode;\n duration?: number;\n onClose?: () => void;\n}\n\nconst variantIcons = {\n default: null,\n success: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-success)\" strokeWidth=\"2\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22,4 12,14.01 9,11.01\" />\n </svg>\n ),\n warning: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-warning)\" strokeWidth=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n error: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-destructive)\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n ),\n info: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-info)\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n ),\n};\n\nexport const Toast = forwardRef<HTMLDivElement, ToastProps>(\n (\n {\n className,\n style,\n variant = 'default',\n title,\n description,\n icon,\n action,\n duration = 5000,\n onClose,\n children,\n ...props\n },\n ref\n ) => {\n const reducedMotion = useReducedMotion();\n const [isLeaving, setIsLeaving] = useState(false);\n\n useEffect(() => {\n if (duration > 0) {\n const timer = setTimeout(() => {\n setIsLeaving(true);\n setTimeout(() => onClose?.(), reducedMotion ? 0 : 200);\n }, duration);\n return () => clearTimeout(timer);\n }\n }, [duration, onClose, reducedMotion]);\n\n const handleClose = () => {\n setIsLeaving(true);\n setTimeout(() => onClose?.(), reducedMotion ? 0 : 200);\n };\n\n const displayIcon = icon ?? variantIcons[variant];\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'flex items-start gap-3 p-4 min-w-[300px] max-w-[420px]',\n !reducedMotion && (isLeaving ? 'animate-[lg-slide-down_200ms_ease-in_forwards]' : 'animate-[lg-slide-up_200ms_ease-out]'),\n className\n )}\n style={{\n borderRadius: 16,\n ...style,\n }}\n {...props}\n >\n {displayIcon && (\n <span className=\"flex-shrink-0 mt-0.5\">{displayIcon}</span>\n )}\n\n <div className=\"flex-1 min-w-0\">\n {title && (\n <div className=\"font-medium text-sm\" style={{ color: 'var(--lg-foreground)' }}>\n {title}\n </div>\n )}\n {description && (\n <div className=\"text-sm mt-0.5\" style={{ color: 'var(--lg-muted)' }}>\n {description}\n </div>\n )}\n {children}\n </div>\n\n {action && <div className=\"flex-shrink-0\">{action}</div>}\n\n <button\n onClick={handleClose}\n className={cn(\n 'flex-shrink-0 w-6 h-6 rounded-full',\n 'flex items-center justify-center',\n 'bg-transparent hover:bg-[var(--lg-glass)]',\n 'border-0 cursor-pointer transition-colors',\n 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n );\n }\n);\n\nToast.displayName = 'Toast';\n\ninterface ToastData extends Omit<ToastProps, 'onClose'> {\n id: string;\n}\n\ninterface ToastContextValue {\n toasts: ToastData[];\n toast: (props: Omit<ToastData, 'id'>) => string;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nlet toastId = 0;\n\nexport function ToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n\n const toast = useCallback((props: Omit<ToastData, 'id'>) => {\n const id = `toast-${++toastId}`;\n setToasts(prev => [...prev, { ...props, id }]);\n return id;\n }, []);\n\n const dismiss = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const dismissAll = useCallback(() => {\n setToasts([]);\n }, []);\n\n return (\n <ToastContext.Provider value={{ toasts, toast, dismiss, dismissAll }}>\n {children}\n {typeof document !== 'undefined' && createPortal(\n <div className=\"fixed bottom-4 right-4 z-50 flex flex-col gap-2\">\n {toasts.map(t => (\n <Toast key={t.id} {...t} onClose={() => dismiss(t.id)} />\n ))}\n </div>,\n document.body\n )}\n </ToastContext.Provider>\n );\n}\n\nexport function useToast(): Omit<ToastContextValue, 'toasts'> {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n const { toast, dismiss, dismissAll } = context;\n return { toast, dismiss, dismissAll };\n}\n","import { forwardRef, HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'info' | 'success' | 'warning' | 'error';\n title?: string;\n icon?: ReactNode;\n action?: ReactNode;\n onClose?: () => void;\n}\n\nconst variantConfig = {\n default: {\n icon: null,\n borderColor: 'var(--lg-edge)',\n },\n info: {\n icon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-info)\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n ),\n borderColor: 'var(--lg-info)',\n },\n success: {\n icon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-success)\" strokeWidth=\"2\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22,4 12,14.01 9,11.01\" />\n </svg>\n ),\n borderColor: 'var(--lg-success)',\n },\n warning: {\n icon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-warning)\" strokeWidth=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n borderColor: 'var(--lg-warning)',\n },\n error: {\n icon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-destructive)\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n ),\n borderColor: 'var(--lg-destructive)',\n },\n};\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n style,\n variant = 'default',\n title,\n icon,\n action,\n onClose,\n children,\n ...props\n },\n ref\n ) => {\n const config = variantConfig[variant];\n const displayIcon = icon ?? config.icon;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'lg-glass lg-text',\n 'relative flex gap-3 p-4',\n className\n )}\n style={{\n borderRadius: 12,\n borderLeft: `3px solid ${config.borderColor}`,\n ...style,\n }}\n {...props}\n >\n {displayIcon && (\n <span className=\"flex-shrink-0 mt-0.5\">{displayIcon}</span>\n )}\n\n <div className=\"flex-1 min-w-0\">\n {title && (\n <div className=\"font-medium text-sm mb-1\" style={{ color: 'var(--lg-foreground)' }}>\n {title}\n </div>\n )}\n <div className=\"text-sm\" style={{ color: 'var(--lg-foreground-secondary)' }}>\n {children}\n </div>\n </div>\n\n {action && <div className=\"flex-shrink-0\">{action}</div>}\n\n {onClose && (\n <button\n onClick={onClose}\n className={cn(\n 'absolute top-2 right-2',\n 'w-6 h-6 rounded-full',\n 'flex items-center justify-center',\n 'bg-transparent hover:bg-[var(--lg-glass)]',\n 'border-0 cursor-pointer transition-colors',\n 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n }\n);\n\nAlert.displayName = 'Alert';\n","import { forwardRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { clamp } from '../utils';\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n value?: number;\n max?: number;\n variant?: 'linear' | 'circular';\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n showValue?: boolean;\n indeterminate?: boolean;\n}\n\nconst linearSizeConfig = {\n sm: { height: 4, borderRadius: 2 },\n md: { height: 6, borderRadius: 3 },\n lg: { height: 8, borderRadius: 4 },\n};\n\nconst circularSizeConfig = {\n sm: { size: 24, strokeWidth: 3 },\n md: { size: 40, strokeWidth: 4 },\n lg: { size: 56, strokeWidth: 5 },\n};\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n style,\n value = 0,\n max = 100,\n variant = 'linear',\n size = 'md',\n color,\n showValue = false,\n indeterminate = false,\n ...props\n },\n ref\n ) => {\n const percentage = clamp((value / max) * 100, 0, 100);\n const fillColor = color || 'var(--lg-fill)';\n\n if (variant === 'circular') {\n const config = circularSizeConfig[size];\n const radius = (config.size - config.strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const strokeDashoffset = circumference - (percentage / 100) * circumference;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={cn('relative inline-flex items-center justify-center', className)}\n style={{ width: config.size, height: config.size, ...style }}\n {...props}\n >\n <svg\n width={config.size}\n height={config.size}\n className={indeterminate ? 'animate-spin' : undefined}\n >\n {/* Background circle */}\n <circle\n cx={config.size / 2}\n cy={config.size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"var(--lg-rail)\"\n strokeWidth={config.strokeWidth}\n />\n {/* Progress circle */}\n <circle\n cx={config.size / 2}\n cy={config.size / 2}\n r={radius}\n fill=\"none\"\n stroke={fillColor}\n strokeWidth={config.strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={indeterminate ? circumference * 0.75 : strokeDashoffset}\n transform={`rotate(-90 ${config.size / 2} ${config.size / 2})`}\n style={{\n transition: indeterminate ? 'none' : 'stroke-dashoffset 300ms var(--lg-ease)',\n }}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n className=\"absolute text-xs font-medium\"\n style={{ color: 'var(--lg-foreground)' }}\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n }\n\n const config = linearSizeConfig[size];\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={cn('w-full', className)}\n style={style}\n {...props}\n >\n <div\n className=\"w-full overflow-hidden\"\n style={{\n height: config.height,\n borderRadius: config.borderRadius,\n backgroundColor: 'var(--lg-rail)',\n }}\n >\n <div\n className={indeterminate ? 'animate-pulse' : undefined}\n style={{\n width: indeterminate ? '50%' : `${percentage}%`,\n height: '100%',\n borderRadius: config.borderRadius,\n backgroundColor: fillColor,\n transition: indeterminate ? 'none' : 'width 300ms var(--lg-ease)',\n ...(indeterminate && {\n animation: 'lg-progress-indeterminate 1.5s ease-in-out infinite',\n }),\n }}\n />\n </div>\n {showValue && !indeterminate && (\n <span\n className=\"block mt-1 text-xs font-medium text-right\"\n style={{ color: 'var(--lg-muted)' }}\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n }\n);\n\nProgress.displayName = 'Progress';\n","import { forwardRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | number;\n color?: string;\n thickness?: number;\n label?: string;\n}\n\nconst sizeMap = {\n sm: 16,\n md: 24,\n lg: 32,\n};\n\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(\n (\n {\n className,\n style,\n size = 'md',\n color = 'currentColor',\n thickness = 2,\n label = 'Loading',\n ...props\n },\n ref\n ) => {\n const sizeValue = typeof size === 'number' ? size : sizeMap[size];\n\n const spinnerStyles: CSSProperties = {\n width: sizeValue,\n height: sizeValue,\n ...style,\n };\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cn('inline-flex items-center justify-center', className)}\n style={spinnerStyles}\n {...props}\n >\n <svg\n width={sizeValue}\n height={sizeValue}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className=\"animate-spin\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth={thickness}\n strokeOpacity={0.25}\n />\n <path\n d=\"M12 2a10 10 0 0 1 10 10\"\n stroke={color}\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n />\n </svg>\n <span className=\"lg-sr-only\">{label}</span>\n </div>\n );\n }\n);\n\nSpinner.displayName = 'Spinner';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'default' | 'secondary' | 'success' | 'warning' | 'destructive' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n dot?: boolean;\n icon?: ReactNode;\n}\n\nconst variantStyles = {\n default: {\n background: 'var(--lg-accent)',\n color: 'white',\n },\n secondary: {\n background: 'var(--lg-glass)',\n color: 'var(--lg-foreground)',\n backdropFilter: 'blur(8px)',\n },\n success: {\n background: 'var(--lg-success)',\n color: 'white',\n },\n warning: {\n background: 'var(--lg-warning)',\n color: 'black',\n },\n destructive: {\n background: 'var(--lg-destructive)',\n color: 'white',\n },\n outline: {\n background: 'transparent',\n color: 'var(--lg-foreground)',\n border: '1px solid var(--lg-edge-strong)',\n },\n};\n\nconst sizeConfig = {\n sm: { height: 18, padding: '0 6px', fontSize: 10, dotSize: 6 },\n md: { height: 22, padding: '0 8px', fontSize: 11, dotSize: 8 },\n lg: { height: 26, padding: '0 10px', fontSize: 12, dotSize: 10 },\n};\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n className,\n style,\n variant = 'default',\n size = 'md',\n dot = false,\n icon,\n children,\n ...props\n },\n ref\n ) => {\n const config = sizeConfig[size];\n const variantStyle = variantStyles[variant];\n\n if (dot) {\n return (\n <span\n ref={ref}\n className={cn('inline-block rounded-full', className)}\n style={{\n width: config.dotSize,\n height: config.dotSize,\n ...variantStyle,\n ...style,\n }}\n {...props}\n />\n );\n }\n\n const badgeStyles: CSSProperties = {\n height: config.height,\n padding: config.padding,\n fontSize: config.fontSize,\n borderRadius: config.height / 2,\n ...variantStyle,\n ...style,\n };\n\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center gap-1',\n 'font-medium whitespace-nowrap',\n className\n )}\n style={badgeStyles}\n {...props}\n >\n {icon && <span className=\"flex-shrink-0\">{icon}</span>}\n {children}\n </span>\n );\n }\n);\n\nBadge.displayName = 'Badge';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n fallback?: ReactNode;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n shape?: 'circle' | 'square';\n status?: 'online' | 'offline' | 'busy' | 'away';\n}\n\nconst sizeConfig = {\n xs: { size: 24, fontSize: 10, statusSize: 6 },\n sm: { size: 32, fontSize: 12, statusSize: 8 },\n md: { size: 40, fontSize: 14, statusSize: 10 },\n lg: { size: 56, fontSize: 18, statusSize: 12 },\n xl: { size: 80, fontSize: 24, statusSize: 16 },\n};\n\nconst statusColors = {\n online: 'var(--lg-success)',\n offline: 'var(--lg-muted)',\n busy: 'var(--lg-destructive)',\n away: 'var(--lg-warning)',\n};\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map(part => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n}\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n className,\n style,\n src,\n alt = '',\n fallback,\n size = 'md',\n shape = 'circle',\n status,\n ...props\n },\n ref\n ) => {\n const [imageError, setImageError] = useState(false);\n const config = sizeConfig[size];\n\n const showFallback = !src || imageError;\n\n const avatarStyles: CSSProperties = {\n width: config.size,\n height: config.size,\n fontSize: config.fontSize,\n borderRadius: shape === 'circle' ? '50%' : '20%',\n ...style,\n };\n\n const renderFallback = () => {\n if (fallback) return fallback;\n if (alt) return getInitials(alt);\n return (\n <svg width=\"60%\" height=\"60%\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/>\n </svg>\n );\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'lg-glass relative inline-flex items-center justify-center',\n 'overflow-hidden font-medium',\n 'text-[var(--lg-foreground-secondary)]',\n className\n )}\n style={avatarStyles}\n {...props}\n >\n {showFallback ? (\n renderFallback()\n ) : (\n <img\n src={src}\n alt={alt}\n onError={() => setImageError(true)}\n className=\"w-full h-full object-cover\"\n />\n )}\n\n {status && (\n <span\n className=\"absolute bottom-0 right-0 rounded-full border-2 border-white\"\n style={{\n width: config.statusSize,\n height: config.statusSize,\n backgroundColor: statusColors[status],\n }}\n />\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = 'Avatar';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface ChipProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'filled' | 'outlined' | 'glass';\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n icon?: ReactNode;\n onRemove?: () => void;\n removable?: boolean;\n selected?: boolean;\n onClick?: () => void;\n}\n\nconst sizeConfig = {\n sm: { height: 24, padding: '0 8px', fontSize: 11, iconSize: 14 },\n md: { height: 32, padding: '0 12px', fontSize: 13, iconSize: 16 },\n lg: { height: 40, padding: '0 16px', fontSize: 14, iconSize: 18 },\n};\n\nexport const Chip = forwardRef<HTMLSpanElement, ChipProps>(\n (\n {\n className,\n style,\n variant = 'glass',\n size = 'md',\n color,\n icon,\n onRemove,\n removable = false,\n selected = false,\n onClick,\n children,\n ...props\n },\n ref\n ) => {\n const config = sizeConfig[size];\n const isClickable = !!onClick;\n\n const chipStyles: CSSProperties = {\n height: config.height,\n padding: config.padding,\n fontSize: config.fontSize,\n borderRadius: config.height / 2,\n ...style,\n };\n\n if (color && variant === 'filled') {\n chipStyles.backgroundColor = color;\n chipStyles.color = 'white';\n } else if (color && variant === 'outlined') {\n chipStyles.borderColor = color;\n chipStyles.color = color;\n }\n\n return (\n <span\n ref={ref}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onClick={onClick}\n onKeyDown={(e) => {\n if (isClickable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'inline-flex items-center gap-1.5',\n 'font-medium whitespace-nowrap',\n variant === 'glass' && 'lg-glass',\n variant === 'filled' && 'bg-[var(--lg-accent)] text-white',\n variant === 'outlined' && 'bg-transparent border border-[var(--lg-edge-strong)]',\n selected && variant === 'glass' && 'bg-[var(--lg-accent-light)] ring-1 ring-[var(--lg-accent)]',\n isClickable && 'cursor-pointer hover:opacity-80 transition-opacity',\n className\n )}\n style={chipStyles}\n {...props}\n >\n {icon && (\n <span\n className=\"flex-shrink-0 flex items-center justify-center\"\n style={{ width: config.iconSize, height: config.iconSize }}\n >\n {icon}\n </span>\n )}\n {children}\n {removable && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n className={cn(\n 'flex-shrink-0 flex items-center justify-center',\n 'w-4 h-4 -mr-1 p-0 border-0 rounded-full',\n 'bg-transparent cursor-pointer',\n 'hover:bg-black/10 transition-colors'\n )}\n aria-label=\"Remove\"\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </span>\n );\n }\n);\n\nChip.displayName = 'Chip';\n","import { forwardRef, HTMLAttributes, ReactNode, createContext, useContext, useState, useCallback } from 'react';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\ninterface AccordionContextValue {\n expandedItems: string[];\n toggleItem: (value: string) => void;\n type: 'single' | 'multiple';\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nexport interface AccordionProps extends HTMLAttributes<HTMLDivElement> {\n type?: 'single' | 'multiple';\n defaultValue?: string | string[];\n collapsible?: boolean;\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n (\n {\n className,\n type = 'single',\n defaultValue,\n collapsible = true,\n children,\n ...props\n },\n ref\n ) => {\n const [expandedItems, setExpandedItems] = useState<string[]>(() => {\n if (defaultValue) {\n return Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n }\n return [];\n });\n\n const toggleItem = useCallback((value: string) => {\n setExpandedItems(prev => {\n const isExpanded = prev.includes(value);\n \n if (type === 'single') {\n if (isExpanded && collapsible) return [];\n if (isExpanded && !collapsible) return prev;\n return [value];\n }\n\n if (isExpanded) {\n return prev.filter(v => v !== value);\n }\n return [...prev, value];\n });\n }, [type, collapsible]);\n\n return (\n <AccordionContext.Provider value={{ expandedItems, toggleItem, type }}>\n <div\n ref={ref}\n className={cn('divide-y divide-[var(--lg-separator)]', className)}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n }\n);\n\nAccordion.displayName = 'Accordion';\n\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n disabled?: boolean;\n}\n\ninterface AccordionItemContextValue {\n value: string;\n isExpanded: boolean;\n disabled: boolean;\n triggerId: string;\n contentId: string;\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null);\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ className, value, disabled = false, children, ...props }, ref) => {\n const context = useContext(AccordionContext);\n if (!context) throw new Error('AccordionItem must be used within Accordion');\n\n const isExpanded = context.expandedItems.includes(value);\n const id = useId();\n const triggerId = `${id}-trigger`;\n const contentId = `${id}-content`;\n\n return (\n <AccordionItemContext.Provider\n value={{ value, isExpanded, disabled, triggerId, contentId }}\n >\n <div\n ref={ref}\n className={cn(disabled && 'opacity-50', className)}\n {...props}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n }\n);\n\nAccordionItem.displayName = 'AccordionItem';\n\nexport interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n}\n\nexport const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ className, children, ...props }, ref) => {\n const accordionContext = useContext(AccordionContext);\n const itemContext = useContext(AccordionItemContext);\n const reducedMotion = useReducedMotion();\n\n if (!accordionContext || !itemContext) {\n throw new Error('AccordionTrigger must be used within AccordionItem');\n }\n\n const { toggleItem } = accordionContext;\n const { value, isExpanded, disabled, triggerId, contentId } = itemContext;\n\n return (\n <button\n ref={ref}\n id={triggerId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n disabled={disabled}\n onClick={() => !disabled && toggleItem(value)}\n className={cn(\n 'flex w-full items-center justify-between py-4 px-1',\n 'text-left font-medium text-sm',\n 'border-0 bg-transparent cursor-pointer',\n 'hover:bg-[var(--lg-glass)] transition-colors rounded-lg -mx-1',\n disabled && 'cursor-default',\n className\n )}\n style={{ color: 'var(--lg-foreground)' }}\n {...props}\n >\n {children}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={cn(\n !reducedMotion && 'transition-transform duration-200'\n )}\n style={{\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n );\n }\n);\n\nAccordionTrigger.displayName = 'AccordionTrigger';\n\nexport interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ className, children, ...props }, ref) => {\n const itemContext = useContext(AccordionItemContext);\n const reducedMotion = useReducedMotion();\n\n if (!itemContext) {\n throw new Error('AccordionContent must be used within AccordionItem');\n }\n\n const { isExpanded, triggerId, contentId } = itemContext;\n\n if (!isExpanded) return null;\n\n return (\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n className={cn(\n 'pb-4 text-sm',\n !reducedMotion && 'animate-[lg-slide-up_200ms_ease-out]',\n className\n )}\n style={{ color: 'var(--lg-foreground-secondary)' }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nAccordionContent.displayName = 'AccordionContent';\n","import { forwardRef, HTMLAttributes } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n decorative?: boolean;\n}\n\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n (\n {\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : orientation}\n className={cn(\n 'bg-[var(--lg-separator)]',\n orientation === 'horizontal' ? 'h-px w-full' : 'w-px h-full',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSeparator.displayName = 'Separator';\n","import { forwardRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'text' | 'circular' | 'rectangular' | 'rounded';\n width?: number | string;\n height?: number | string;\n animation?: 'pulse' | 'wave' | 'none';\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n className,\n style,\n variant = 'text',\n width,\n height,\n animation = 'pulse',\n ...props\n },\n ref\n ) => {\n const skeletonStyles: CSSProperties = {\n width: width ?? (variant === 'circular' ? height : '100%'),\n height: height ?? (variant === 'text' ? '1em' : undefined),\n ...style,\n };\n\n const borderRadius = {\n text: '4px',\n circular: '50%',\n rectangular: '0',\n rounded: '8px',\n }[variant];\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-[var(--lg-glass)]',\n animation === 'pulse' && 'animate-pulse',\n animation === 'wave' && 'relative overflow-hidden after:absolute after:inset-0 after:translate-x-[-100%] after:animate-[lg-shimmer_2s_infinite] after:bg-gradient-to-r after:from-transparent after:via-white/20 after:to-transparent',\n className\n )}\n style={{\n ...skeletonStyles,\n borderRadius,\n }}\n aria-hidden=\"true\"\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = 'Skeleton';\n","import { forwardRef, HTMLAttributes, ReactNode, useEffect, useCallback, useRef, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface DrawerProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n side?: 'left' | 'right';\n size?: 'sm' | 'md' | 'lg' | 'xl';\n title?: string;\n description?: string;\n showCloseButton?: boolean;\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n}\n\nconst sizeConfig = {\n sm: 280,\n md: 320,\n lg: 400,\n xl: 500,\n};\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n (\n {\n className,\n style,\n open,\n onOpenChange,\n children,\n side = 'right',\n size = 'md',\n title,\n description,\n showCloseButton = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n ...props\n },\n ref\n ) => {\n const reducedMotion = useReducedMotion();\n const drawerRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const descId = useId();\n const width = sizeConfig[size];\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n handleClose();\n }\n };\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (closeOnEscape && e.key === 'Escape') {\n handleClose();\n }\n }, [closeOnEscape, handleClose]);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown);\n document.body.style.overflow = 'hidden';\n drawerRef.current?.focus();\n }\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.body.style.overflow = '';\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n const drawerStyles: CSSProperties = {\n position: 'fixed',\n top: 0,\n bottom: 0,\n width,\n maxWidth: '90vw',\n ...(side === 'left' ? { left: 0 } : { right: 0 }),\n ...style,\n };\n\n const animationClass = reducedMotion ? '' : \n side === 'left' \n ? 'animate-[lg-slide-from-left_300ms_var(--lg-ease-spring)]' \n : 'animate-[lg-slide-from-right_300ms_var(--lg-ease-spring)]';\n\n const drawerContent = (\n <div\n className={cn(\n 'fixed inset-0 z-50',\n 'bg-black/40 backdrop-blur-sm',\n !reducedMotion && 'animate-[lg-fade-in_200ms_ease-out]'\n )}\n onClick={handleOverlayClick}\n >\n <div\n ref={ref || drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descId : undefined}\n tabIndex={-1}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'h-full flex flex-col outline-none overflow-hidden',\n animationClass,\n className\n )}\n style={drawerStyles}\n {...props}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-start justify-between p-4 border-b border-[var(--lg-separator)]\">\n <div>\n {title && (\n <h2\n id={titleId}\n className=\"text-lg font-semibold m-0\"\n style={{ color: 'var(--lg-foreground)' }}\n >\n {title}\n </h2>\n )}\n {description && (\n <p\n id={descId}\n className=\"text-sm mt-1 m-0\"\n style={{ color: 'var(--lg-muted)' }}\n >\n {description}\n </p>\n )}\n </div>\n {showCloseButton && (\n <button\n onClick={handleClose}\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center',\n 'bg-[var(--lg-glass)] hover:bg-[var(--lg-glass-active)]',\n 'border-0 cursor-pointer transition-colors',\n 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Close drawer\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4\">\n {children}\n </div>\n </div>\n </div>\n );\n\n return createPortal(drawerContent, document.body);\n }\n);\n\nDrawer.displayName = 'Drawer';\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, useCallback, cloneElement, isValidElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface PopoverProps {\n children: ReactNode;\n content: ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n closeOnClickOutside?: boolean;\n closeOnEscape?: boolean;\n trigger?: 'click' | 'hover';\n}\n\nexport function Popover({\n children,\n content,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n side = 'bottom',\n align = 'center',\n sideOffset = 8,\n closeOnClickOutside = true,\n closeOnEscape = true,\n trigger = 'click',\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = controlledOpen !== undefined ? controlledOpen : internalOpen;\n const setOpen = controlledOpen !== undefined ? onOpenChange! : setInternalOpen;\n\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const popoverId = useId();\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !popoverRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const popoverRect = popoverRef.current.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case 'top':\n top = triggerRect.top - popoverRect.height - sideOffset;\n break;\n case 'bottom':\n top = triggerRect.bottom + sideOffset;\n break;\n case 'left':\n left = triggerRect.left - popoverRect.width - sideOffset;\n top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n break;\n case 'right':\n left = triggerRect.right + sideOffset;\n top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = triggerRect.left;\n break;\n case 'center':\n left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2;\n break;\n case 'end':\n left = triggerRect.right - popoverRect.width;\n break;\n }\n }\n\n left = Math.max(8, Math.min(left, window.innerWidth - popoverRect.width - 8));\n top = Math.max(8, Math.min(top, window.innerHeight - popoverRect.height - 8));\n\n setPosition({ top: top + window.scrollY, left: left + window.scrollX });\n }, [side, align, sideOffset]);\n\n useEffect(() => {\n if (open) {\n updatePosition();\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n }\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [open, updatePosition]);\n\n useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n closeOnClickOutside &&\n !triggerRef.current?.contains(e.target as Node) &&\n !popoverRef.current?.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (closeOnEscape && e.key === 'Escape') {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [open, closeOnClickOutside, closeOnEscape, setOpen]);\n\n const handleTriggerClick = () => {\n if (trigger === 'click') {\n setOpen(!open);\n }\n };\n\n const handleTriggerKeyDown = (e: React.KeyboardEvent) => {\n if (trigger === 'click' && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n setOpen(!open);\n }\n };\n\n const handleMouseEnter = () => {\n if (trigger === 'hover') {\n setOpen(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (trigger === 'hover') {\n setOpen(false);\n }\n };\n\n const child = isValidElement(children) ? children : <span>{children}</span>;\n\n const triggerElement = cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n 'aria-expanded': open,\n 'aria-haspopup': 'dialog',\n 'aria-controls': open ? popoverId : undefined,\n });\n\n return (\n <>\n {triggerElement}\n {open && typeof document !== 'undefined' && createPortal(\n <div\n ref={popoverRef}\n id={popoverId}\n role=\"dialog\"\n aria-modal=\"false\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 p-4 min-w-[200px]',\n !reducedMotion && 'animate-[lg-scale-in_150ms_var(--lg-ease-spring)]'\n )}\n style={{\n top: position.top,\n left: position.left,\n borderRadius: 12,\n transformOrigin: `${align === 'start' ? 'left' : align === 'end' ? 'right' : 'center'} ${side === 'bottom' ? 'top' : 'bottom'}`,\n }}\n >\n {content}\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, useCallback, cloneElement, isValidElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface ContextMenuItem {\n label: ReactNode;\n icon?: ReactNode;\n onSelect?: () => void;\n destructive?: boolean;\n disabled?: boolean;\n shortcut?: string;\n}\n\nexport type ContextMenuEntry = ContextMenuItem | 'separator';\n\nexport interface ContextMenuProps {\n children: ReactNode;\n items: ContextMenuEntry[];\n disabled?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function ContextMenu({\n children,\n items,\n disabled = false,\n onOpenChange,\n}: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const reducedMotion = useReducedMotion();\n const menuId = useId();\n\n const handleOpenChange = useCallback((isOpen: boolean) => {\n setOpen(isOpen);\n onOpenChange?.(isOpen);\n if (!isOpen) {\n setFocusedIndex(-1);\n }\n }, [onOpenChange]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n \n const menuWidth = 200;\n const menuHeight = items.length * 40;\n \n let x = e.clientX;\n let y = e.clientY;\n \n if (x + menuWidth > window.innerWidth) {\n x = window.innerWidth - menuWidth - 8;\n }\n if (y + menuHeight > window.innerHeight) {\n y = window.innerHeight - menuHeight - 8;\n }\n \n setPosition({ x, y });\n handleOpenChange(true);\n };\n\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.disabled) return;\n item.onSelect?.();\n handleOpenChange(false);\n };\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (!open) return;\n\n const selectableItems = items.filter((item): item is ContextMenuItem => item !== 'separator' && !item.disabled);\n\n switch (e.key) {\n case 'Escape':\n handleOpenChange(false);\n break;\n case 'ArrowDown':\n e.preventDefault();\n setFocusedIndex(prev => {\n const next = prev + 1;\n return next >= selectableItems.length ? 0 : next;\n });\n break;\n case 'ArrowUp':\n e.preventDefault();\n setFocusedIndex(prev => {\n const next = prev - 1;\n return next < 0 ? selectableItems.length - 1 : next;\n });\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (focusedIndex >= 0) {\n const item = selectableItems[focusedIndex];\n handleItemClick(item);\n }\n break;\n }\n }, [open, items, focusedIndex, handleOpenChange]);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown);\n \n const handleClickOutside = (e: MouseEvent) => {\n if (!menuRef.current?.contains(e.target as Node)) {\n handleOpenChange(false);\n }\n };\n \n document.addEventListener('mousedown', handleClickOutside);\n menuRef.current?.focus();\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [open, handleKeyDown, handleOpenChange]);\n\n const child = isValidElement(children) ? children : <span>{children}</span>;\n\n const triggerElement = cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n onContextMenu: handleContextMenu,\n });\n\n let selectableIndex = -1;\n\n return (\n <>\n {triggerElement}\n {open && typeof document !== 'undefined' && createPortal(\n <div\n ref={menuRef}\n id={menuId}\n role=\"menu\"\n tabIndex={-1}\n aria-label=\"Context menu\"\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 min-w-[180px] py-1.5 outline-none',\n !reducedMotion && 'animate-[lg-scale-in_100ms_var(--lg-ease-spring)]'\n )}\n style={{\n top: position.y,\n left: position.x,\n borderRadius: 12,\n transformOrigin: 'top left',\n }}\n >\n {items.map((item, index) => {\n if (item === 'separator') {\n return (\n <div\n key={`sep-${index}`}\n role=\"separator\"\n className=\"my-1.5 mx-2 border-t border-[var(--lg-separator)]\"\n />\n );\n }\n\n const isSelectable = !item.disabled;\n if (isSelectable) selectableIndex++;\n const isFocused = isSelectable && selectableIndex === focusedIndex;\n\n return (\n <button\n key={index}\n role=\"menuitem\"\n disabled={item.disabled}\n tabIndex={-1}\n data-selected={isFocused || undefined}\n onClick={() => handleItemClick(item)}\n onMouseEnter={() => isSelectable && setFocusedIndex(selectableIndex)}\n className={cn(\n 'w-full flex items-center gap-2.5 px-3 py-2',\n 'border-0 bg-transparent text-left text-sm cursor-pointer',\n 'transition-colors rounded-lg mx-1.5',\n 'first:mt-0 last:mb-0',\n item.destructive && 'text-[var(--lg-destructive)]',\n item.disabled && 'opacity-40 cursor-default',\n isFocused && 'bg-[var(--lg-highlight)]'\n )}\n style={{ \n color: item.destructive ? undefined : 'var(--lg-foreground)',\n width: 'calc(100% - 12px)',\n }}\n >\n {item.icon && (\n <span className=\"flex-shrink-0 w-4 h-4\">{item.icon}</span>\n )}\n <span className=\"flex-1\">{item.label}</span>\n {item.shortcut && (\n <span className=\"text-xs text-[var(--lg-muted)]\">{item.shortcut}</span>\n )}\n </button>\n );\n })}\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: ReactNode;\n shortcut?: string;\n onSelect: () => void;\n keywords?: string[];\n group?: string;\n disabled?: boolean;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n items: CommandItem[];\n placeholder?: string;\n emptyMessage?: string;\n groups?: Record<string, string>;\n}\n\nexport function CommandPalette({\n open,\n onOpenChange,\n items,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No results found.',\n groups = {},\n}: CommandPaletteProps) {\n const [query, setQuery] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const dialogId = useId();\n const listboxId = useId();\n\n const filteredItems = useMemo(() => {\n if (!query.trim()) return items.filter(item => !item.disabled);\n \n const lowerQuery = query.toLowerCase();\n return items.filter(item => {\n if (item.disabled) return false;\n \n const matchLabel = item.label.toLowerCase().includes(lowerQuery);\n const matchDesc = item.description?.toLowerCase().includes(lowerQuery);\n const matchKeywords = item.keywords?.some(k => k.toLowerCase().includes(lowerQuery));\n \n return matchLabel || matchDesc || matchKeywords;\n });\n }, [items, query]);\n\n const groupedItems = useMemo(() => {\n const grouped: Record<string, CommandItem[]> = {};\n \n filteredItems.forEach(item => {\n const group = item.group || '_default';\n if (!grouped[group]) grouped[group] = [];\n grouped[group].push(item);\n });\n \n return grouped;\n }, [filteredItems]);\n\n const flattenedItems = useMemo(() => {\n return Object.values(groupedItems).flat();\n }, [groupedItems]);\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n setQuery('');\n setSelectedIndex(0);\n }, [onOpenChange]);\n\n const handleSelect = useCallback((item: CommandItem) => {\n item.onSelect();\n handleClose();\n }, [handleClose]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex(prev => \n prev < flattenedItems.length - 1 ? prev + 1 : 0\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex(prev => \n prev > 0 ? prev - 1 : flattenedItems.length - 1\n );\n break;\n case 'Enter':\n e.preventDefault();\n if (flattenedItems[selectedIndex]) {\n handleSelect(flattenedItems[selectedIndex]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n handleClose();\n break;\n }\n }, [flattenedItems, selectedIndex, handleSelect, handleClose]);\n\n useEffect(() => {\n if (open) {\n inputRef.current?.focus();\n \n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleClose();\n }\n };\n \n document.addEventListener('keydown', handleGlobalKeyDown);\n document.body.style.overflow = 'hidden';\n \n return () => {\n document.removeEventListener('keydown', handleGlobalKeyDown);\n document.body.style.overflow = '';\n };\n }\n }, [open, handleClose]);\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [query]);\n\n useEffect(() => {\n const selectedElement = listRef.current?.querySelector('[data-selected=\"true\"]');\n selectedElement?.scrollIntoView({ block: 'nearest' });\n }, [selectedIndex]);\n\n if (!open) return null;\n\n const content = (\n <div\n className={cn(\n 'fixed inset-0 z-50 flex items-start justify-center pt-[15vh]',\n 'bg-black/40 backdrop-blur-sm',\n !reducedMotion && 'animate-[lg-fade-in_150ms_ease-out]'\n )}\n onClick={(e) => e.target === e.currentTarget && handleClose()}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={dialogId}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'w-full max-w-[540px] overflow-hidden',\n !reducedMotion && 'animate-[lg-scale-in_150ms_var(--lg-ease-spring)]'\n )}\n style={{ borderRadius: 16 }}\n >\n {/* Search input */}\n <div className=\"flex items-center gap-3 px-4 py-3 border-b border-[var(--lg-separator)]\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-muted)\" strokeWidth=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-activedescendant={flattenedItems[selectedIndex]?.id}\n className={cn(\n 'flex-1 bg-transparent border-0 outline-none',\n 'text-base placeholder:text-[var(--lg-muted)]'\n )}\n style={{ color: 'var(--lg-foreground)' }}\n />\n <kbd className=\"px-2 py-0.5 text-xs rounded bg-[var(--lg-glass)] text-[var(--lg-muted)]\">\n ESC\n </kbd>\n </div>\n\n {/* Results list */}\n <div\n ref={listRef}\n role=\"listbox\"\n id={listboxId}\n className=\"max-h-[300px] overflow-auto p-2\"\n >\n {flattenedItems.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-[var(--lg-muted)]\">\n {emptyMessage}\n </div>\n ) : (\n Object.entries(groupedItems).map(([group, groupItems]) => (\n <div key={group}>\n {group !== '_default' && groups[group] && (\n <div className=\"px-3 py-2 text-xs font-medium text-[var(--lg-muted)] uppercase tracking-wider\">\n {groups[group]}\n </div>\n )}\n {groupItems.map((item) => {\n const isSelected = flattenedItems[selectedIndex]?.id === item.id;\n \n return (\n <button\n key={item.id}\n id={item.id}\n role=\"option\"\n aria-selected={isSelected}\n data-selected={isSelected}\n onClick={() => handleSelect(item)}\n onMouseEnter={() => setSelectedIndex(flattenedItems.indexOf(item))}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2.5 rounded-lg',\n 'border-0 bg-transparent text-left cursor-pointer',\n 'transition-colors',\n isSelected && 'bg-[var(--lg-highlight)]'\n )}\n >\n {item.icon && (\n <span className=\"flex-shrink-0 w-5 h-5 text-[var(--lg-muted)]\">\n {item.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium\" style={{ color: 'var(--lg-foreground)' }}>\n {item.label}\n </div>\n {item.description && (\n <div className=\"text-xs text-[var(--lg-muted)] truncate\">\n {item.description}\n </div>\n )}\n </div>\n {item.shortcut && (\n <kbd className=\"px-2 py-0.5 text-xs rounded bg-[var(--lg-glass)] text-[var(--lg-muted)]\">\n {item.shortcut}\n </kbd>\n )}\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n}\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, useCallback, Children } from 'react';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface CarouselProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n autoPlay?: boolean;\n autoPlayInterval?: number;\n showDots?: boolean;\n showArrows?: boolean;\n loop?: boolean;\n slidesToShow?: number;\n gap?: number;\n}\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(\n (\n {\n className,\n style,\n children,\n autoPlay = false,\n autoPlayInterval = 5000,\n showDots = true,\n showArrows = true,\n loop = true,\n slidesToShow = 1,\n gap = 16,\n ...props\n },\n ref\n ) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isHovered, setIsHovered] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const carouselId = useId();\n\n const slides = Children.toArray(children);\n const totalSlides = slides.length;\n const maxIndex = Math.max(0, totalSlides - slidesToShow);\n\n const goToSlide = useCallback((index: number) => {\n if (loop) {\n if (index < 0) index = maxIndex;\n if (index > maxIndex) index = 0;\n } else {\n index = Math.max(0, Math.min(index, maxIndex));\n }\n setCurrentIndex(index);\n }, [loop, maxIndex]);\n\n const goToPrevious = useCallback(() => {\n goToSlide(currentIndex - 1);\n }, [currentIndex, goToSlide]);\n\n const goToNext = useCallback(() => {\n goToSlide(currentIndex + 1);\n }, [currentIndex, goToSlide]);\n\n useEffect(() => {\n if (autoPlay && !isHovered && !reducedMotion) {\n const timer = setInterval(goToNext, autoPlayInterval);\n return () => clearInterval(timer);\n }\n }, [autoPlay, autoPlayInterval, isHovered, reducedMotion, goToNext]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n goToPrevious();\n break;\n case 'ArrowRight':\n e.preventDefault();\n goToNext();\n break;\n case 'Home':\n e.preventDefault();\n goToSlide(0);\n break;\n case 'End':\n e.preventDefault();\n goToSlide(maxIndex);\n break;\n }\n };\n\n const slideWidth = `calc((100% - ${gap * (slidesToShow - 1)}px) / ${slidesToShow})`;\n\n return (\n <div\n ref={ref}\n className={cn('relative', className)}\n style={style}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n <div\n ref={containerRef}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label=\"Image carousel\"\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className=\"overflow-hidden rounded-xl outline-none focus-visible:ring-2 focus-visible:ring-[var(--lg-ring)]\"\n >\n <div\n aria-live={autoPlay ? 'off' : 'polite'}\n className=\"flex\"\n style={{\n gap,\n transform: `translateX(calc(-${currentIndex} * (${slideWidth} + ${gap}px)))`,\n transition: reducedMotion ? 'none' : 'transform 400ms var(--lg-ease)',\n }}\n >\n {slides.map((slide, index) => (\n <div\n key={index}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`Slide ${index + 1} of ${totalSlides}`}\n aria-hidden={index < currentIndex || index >= currentIndex + slidesToShow}\n className=\"flex-shrink-0\"\n style={{ width: slideWidth }}\n >\n {slide}\n </div>\n ))}\n </div>\n </div>\n\n {/* Arrow controls */}\n {showArrows && totalSlides > slidesToShow && (\n <>\n <button\n onClick={goToPrevious}\n disabled={!loop && currentIndex === 0}\n aria-label=\"Previous slide\"\n className={cn(\n 'lg-glass lg-interactive',\n 'absolute top-1/2 left-2 -translate-y-1/2',\n 'w-10 h-10 rounded-full',\n 'flex items-center justify-center',\n 'border-0 cursor-pointer',\n 'disabled:opacity-30 disabled:cursor-default',\n 'hover:bg-[var(--lg-glass-active)] transition-colors'\n )}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <button\n onClick={goToNext}\n disabled={!loop && currentIndex === maxIndex}\n aria-label=\"Next slide\"\n className={cn(\n 'lg-glass lg-interactive',\n 'absolute top-1/2 right-2 -translate-y-1/2',\n 'w-10 h-10 rounded-full',\n 'flex items-center justify-center',\n 'border-0 cursor-pointer',\n 'disabled:opacity-30 disabled:cursor-default',\n 'hover:bg-[var(--lg-glass-active)] transition-colors'\n )}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </>\n )}\n\n {/* Dot indicators */}\n {showDots && totalSlides > slidesToShow && (\n <div\n role=\"tablist\"\n aria-label=\"Carousel navigation\"\n className=\"flex items-center justify-center gap-2 mt-4\"\n >\n {Array.from({ length: maxIndex + 1 }).map((_, index) => (\n <button\n key={index}\n role=\"tab\"\n aria-selected={index === currentIndex}\n aria-label={`Go to slide ${index + 1}`}\n onClick={() => goToSlide(index)}\n className={cn(\n 'w-2 h-2 rounded-full border-0 cursor-pointer',\n 'transition-all duration-200',\n index === currentIndex\n ? 'bg-[var(--lg-accent)] w-6'\n : 'bg-[var(--lg-muted)] opacity-50 hover:opacity-100'\n )}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nCarousel.displayName = 'Carousel';\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\nimport { usePressedState } from '../hooks/use-pressed-state';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface FloatingActionButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n size?: 'sm' | 'md' | 'lg';\n variant?: 'primary' | 'secondary' | 'glass';\n position?: 'bottom-right' | 'bottom-left' | 'bottom-center' | 'top-right' | 'top-left';\n extended?: boolean;\n label?: string;\n 'aria-label': string;\n}\n\nconst sizeConfig = {\n sm: { size: 40, iconSize: 20 },\n md: { size: 56, iconSize: 24 },\n lg: { size: 72, iconSize: 32 },\n};\n\nconst positionStyles: Record<string, { bottom?: number; top?: number; left?: number | string; right?: number; transform?: string }> = {\n 'bottom-right': { bottom: 24, right: 24 },\n 'bottom-left': { bottom: 24, left: 24 },\n 'bottom-center': { bottom: 24, left: '50%', transform: 'translateX(-50%)' },\n 'top-right': { top: 24, right: 24 },\n 'top-left': { top: 24, left: 24 },\n};\n\nexport const FloatingActionButton = forwardRef<HTMLButtonElement, FloatingActionButtonProps>(\n (\n {\n className,\n style,\n icon,\n size = 'md',\n variant = 'primary',\n position = 'bottom-right',\n extended = false,\n label,\n disabled,\n ...props\n },\n ref\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const { isPressed, pressHandlers } = usePressedState({ disabled });\n const reducedMotion = useReducedMotion();\n const config = sizeConfig[size];\n\n const fabStyles: CSSProperties = {\n position: 'fixed',\n zIndex: 40,\n height: config.size,\n minWidth: config.size,\n borderRadius: extended && label ? config.size / 2 : '50%',\n padding: extended && label ? `0 ${config.size / 2}px` : 0,\n ...positionStyles[position],\n ...style,\n };\n\n const variantClasses = {\n primary: 'bg-[var(--lg-accent)] text-white hover:bg-[var(--lg-accent-hover)]',\n secondary: 'bg-[var(--lg-foreground)] text-[var(--lg-background)]',\n glass: 'lg-glass lg-glass-elevated',\n };\n\n return (\n <button\n ref={ref}\n className={cn(\n 'lg-interactive lg-focus-ring',\n 'inline-flex items-center justify-center gap-2',\n 'border-0 font-medium cursor-pointer',\n 'transition-all shadow-lg',\n variantClasses[variant],\n isPressed && 'scale-95',\n disabled && 'opacity-50 cursor-default',\n className\n )}\n style={{\n ...fabStyles,\n boxShadow: '0 6px 20px rgba(0, 0, 0, 0.2)',\n transition: reducedMotion ? 'none' : 'all 200ms var(--lg-ease-spring)',\n transform: `${positionStyles[position].transform || ''} ${isPressed ? 'scale(0.95)' : isHovered ? 'scale(1.05)' : 'scale(1)'}`.trim(),\n }}\n disabled={disabled}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...pressHandlers}\n {...props}\n >\n <span\n className=\"flex items-center justify-center\"\n style={{ width: config.iconSize, height: config.iconSize }}\n >\n {icon}\n </span>\n {extended && label && (\n <span className=\"text-sm font-medium\">{label}</span>\n )}\n </button>\n );\n }\n);\n\nFloatingActionButton.displayName = 'FloatingActionButton';\n\nexport { FloatingActionButton as FAB };\n","import { forwardRef, HTMLAttributes, useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface DatePickerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'> {\n value?: Date | null;\n defaultValue?: Date | null;\n onValueChange?: (date: Date | null) => void;\n placeholder?: string;\n disabled?: boolean;\n minDate?: Date;\n maxDate?: Date;\n locale?: string;\n formatDate?: (date: Date) => string;\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: Date | null, b: Date | null): boolean {\n if (!a || !b) return false;\n return a.getFullYear() === b.getFullYear() && \n a.getMonth() === b.getMonth() && \n a.getDate() === b.getDate();\n}\n\nfunction isDateDisabled(date: Date, minDate?: Date, maxDate?: Date): boolean {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n className,\n style,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select date',\n disabled = false,\n minDate,\n maxDate,\n locale = 'en-US',\n formatDate = (date) => date.toLocaleDateString(locale, { year: 'numeric', month: 'long', day: 'numeric' }),\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<Date | null>(defaultValue || null);\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n \n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(() => value || new Date());\n const [focusedDate, setFocusedDate] = useState<Date | null>(null);\n \n const triggerRef = useRef<HTMLButtonElement>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const inputId = useId();\n const calendarId = useId();\n\n const setValue = useCallback((date: Date | null) => {\n if (controlledValue === undefined) {\n setInternalValue(date);\n }\n onValueChange?.(date);\n }, [controlledValue, onValueChange]);\n\n const handleDateSelect = (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate)) return;\n setValue(date);\n setIsOpen(false);\n triggerRef.current?.focus();\n };\n\n const handlePrevMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1));\n };\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n triggerRef.current?.focus();\n return;\n }\n\n if (!focusedDate) return;\n\n const newDate = new Date(focusedDate);\n\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n newDate.setDate(newDate.getDate() - 1);\n setFocusedDate(newDate);\n if (newDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n break;\n case 'ArrowRight':\n e.preventDefault();\n newDate.setDate(newDate.getDate() + 1);\n setFocusedDate(newDate);\n if (newDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n newDate.setDate(newDate.getDate() - 7);\n setFocusedDate(newDate);\n if (newDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n break;\n case 'ArrowDown':\n e.preventDefault();\n newDate.setDate(newDate.getDate() + 7);\n setFocusedDate(newDate);\n if (newDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n break;\n }\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n !triggerRef.current?.contains(e.target as Node) &&\n !calendarRef.current?.contains(e.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n setFocusedDate(value || new Date());\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('mousedown', handleClickOutside);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, value]);\n\n useEffect(() => {\n if (isOpen && triggerRef.current && calendarRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n calendarRef.current.style.top = `${rect.bottom + window.scrollY + 8}px`;\n calendarRef.current.style.left = `${rect.left + window.scrollX}px`;\n }\n }, [isOpen]);\n\n const days = useMemo(() => {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n \n const days: (Date | null)[] = [];\n \n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n \n for (let i = 1; i <= daysInMonth; i++) {\n days.push(new Date(year, month, i));\n }\n \n return days;\n }, [viewDate]);\n\n const today = new Date();\n\n return (\n <div ref={ref} className={cn('relative inline-block', className)} style={style} {...props}>\n <button\n ref={triggerRef}\n type=\"button\"\n id={inputId}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-controls={isOpen ? calendarId : undefined}\n disabled={disabled}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={cn(\n 'lg-glass lg-interactive lg-focus-ring lg-text',\n 'flex items-center gap-2 h-10 px-4 w-full max-w-[280px]',\n 'border-0 text-left cursor-pointer',\n disabled && 'opacity-35 cursor-default'\n )}\n style={{ borderRadius: 20 }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-muted)\" strokeWidth=\"2\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n <span className={value ? '' : 'text-[var(--lg-muted)]'}>\n {value ? formatDate(value) : placeholder}\n </span>\n </button>\n\n {isOpen && typeof document !== 'undefined' && createPortal(\n <div\n ref={calendarRef}\n id={calendarId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Choose date\"\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 p-4',\n !reducedMotion && 'animate-[lg-scale-in_150ms_var(--lg-ease-spring)]'\n )}\n style={{\n borderRadius: 16,\n width: 300,\n transformOrigin: 'top left',\n }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center',\n 'border-0 bg-transparent cursor-pointer',\n 'hover:bg-[var(--lg-glass)] transition-colors'\n )}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <span className=\"font-medium\">\n {MONTHS[viewDate.getMonth()]} {viewDate.getFullYear()}\n </span>\n <button\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center',\n 'border-0 bg-transparent cursor-pointer',\n 'hover:bg-[var(--lg-glass)] transition-colors'\n )}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n\n {/* Weekday headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map(day => (\n <div\n key={day}\n className=\"text-center text-xs font-medium text-[var(--lg-muted)] py-1\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Days grid */}\n <div className=\"grid grid-cols-7 gap-1\" role=\"grid\">\n {days.map((date, index) => {\n if (!date) {\n return <div key={`empty-${index}`} />;\n }\n\n const isSelected = isSameDay(date, value);\n const isFocused = isSameDay(date, focusedDate);\n const isToday = isSameDay(date, today);\n const isDisabled = isDateDisabled(date, minDate, maxDate);\n\n return (\n <button\n key={date.toISOString()}\n role=\"gridcell\"\n aria-selected={isSelected}\n aria-current={isToday ? 'date' : undefined}\n tabIndex={isFocused ? 0 : -1}\n disabled={isDisabled}\n onClick={() => handleDateSelect(date)}\n onFocus={() => setFocusedDate(date)}\n className={cn(\n 'w-9 h-9 rounded-full flex items-center justify-center',\n 'border-0 text-sm cursor-pointer transition-colors',\n isSelected && 'bg-[var(--lg-accent)] text-white',\n !isSelected && isToday && 'ring-1 ring-[var(--lg-accent)]',\n !isSelected && !isDisabled && 'hover:bg-[var(--lg-glass)]',\n isFocused && !isSelected && 'bg-[var(--lg-highlight)]',\n isDisabled && 'opacity-30 cursor-default'\n )}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Today button */}\n <button\n onClick={() => {\n const now = new Date();\n setViewDate(new Date(now.getFullYear(), now.getMonth(), 1));\n handleDateSelect(now);\n }}\n className={cn(\n 'w-full mt-4 py-2 rounded-lg',\n 'border-0 text-sm font-medium cursor-pointer',\n 'bg-[var(--lg-glass)] hover:bg-[var(--lg-glass-active)]',\n 'transition-colors'\n )}\n >\n Today\n </button>\n </div>,\n document.body\n )}\n </div>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n","import { useState, useEffect } from 'react';\n\nconst QUERY = '(prefers-reduced-transparency: reduce)';\n\nfunction getInitialState(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(QUERY).matches;\n}\n\nexport function useReducedTransparency(): boolean {\n const [reducedTransparency, setReducedTransparency] = useState(getInitialState);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(QUERY);\n \n const handler = (event: MediaQueryListEvent) => {\n setReducedTransparency(event.matches);\n };\n\n mediaQuery.addEventListener('change', handler);\n setReducedTransparency(mediaQuery.matches);\n\n return () => {\n mediaQuery.removeEventListener('change', handler);\n };\n }, []);\n\n return reducedTransparency;\n}\n","import { useState, useEffect } from 'react';\n\nexport function useMounted(): boolean {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return mounted;\n}\n"],"mappings":"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","names":["useState","useEffect","useState","useEffect","jsx","forwardRef","jsx","forwardRef","forwardRef","useState","useCallback","useRef","useEffect","jsx","forwardRef","sizeConfig","variantStyles","forwardRef","jsx","sizeStyles","forwardRef","sizeConfig","variantStyles","forwardRef","useState","useCallback","jsx","jsxs","forwardRef","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","useState","jsx","forwardRef","useState","forwardRef","jsx","jsxs","forwardRef","forwardRef","useState","useRef","useEffect","useCallback","Fragment","jsx","jsxs","sizeConfig","forwardRef","useState","useRef","useCallback","useEffect","forwardRef","jsx","jsxs","sizeConfig","forwardRef","forwardRef","createContext","useContext","jsx","jsxs","createContext","sizeConfig","forwardRef","useContext","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","useState","useRef","useCallback","jsx","jsxs","forwardRef","useState","useRef","useCallback","forwardRef","useState","jsx","jsxs","forwardRef","useState","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","createContext","useContext","jsx","createContext","forwardRef","useContext","forwardRef","jsx","jsxs","forwardRef","forwardRef","createContext","useContext","useState","useCallback","Fragment","jsx","jsxs","createContext","useContext","useState","useCallback","forwardRef","forwardRef","useState","useRef","jsx","jsxs","forwardRef","useState","useRef","forwardRef","useEffect","useCallback","useRef","createPortal","jsx","jsxs","sizeConfig","forwardRef","useRef","useCallback","useEffect","createPortal","forwardRef","useEffect","useCallback","useRef","createPortal","jsx","jsxs","sizeConfig","forwardRef","useRef","useCallback","useEffect","createPortal","forwardRef","useState","useRef","useEffect","createPortal","jsx","jsxs","forwardRef","useState","useRef","useEffect","createPortal","useState","useRef","useEffect","createPortal","Fragment","jsx","jsxs","useState","useRef","useEffect","createPortal","forwardRef","useState","useEffect","createContext","useContext","useCallback","createPortal","jsx","jsxs","forwardRef","useState","useEffect","createContext","useCallback","createPortal","useContext","forwardRef","jsx","jsxs","forwardRef","forwardRef","jsx","jsxs","forwardRef","config","forwardRef","jsx","jsxs","forwardRef","forwardRef","jsx","jsxs","sizeConfig","forwardRef","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","jsx","jsxs","sizeConfig","forwardRef","forwardRef","createContext","useContext","useState","useCallback","jsx","jsxs","createContext","forwardRef","useState","useCallback","useContext","forwardRef","jsx","forwardRef","forwardRef","jsx","forwardRef","forwardRef","useEffect","useCallback","useRef","createPortal","jsx","jsxs","sizeConfig","forwardRef","useRef","useCallback","useEffect","createPortal","useState","useRef","useEffect","useCallback","cloneElement","isValidElement","createPortal","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","isValidElement","cloneElement","createPortal","useState","useRef","useEffect","useCallback","cloneElement","isValidElement","createPortal","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","isValidElement","cloneElement","createPortal","useState","useRef","useEffect","useCallback","createPortal","jsx","jsxs","useState","useRef","useCallback","useEffect","createPortal","forwardRef","useState","useRef","useEffect","useCallback","Fragment","jsx","jsxs","forwardRef","useState","useRef","useCallback","useEffect","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","useState","useRef","useEffect","useCallback","useMemo","createPortal","jsx","jsxs","forwardRef","useState","useRef","useCallback","useEffect","useMemo","days","createPortal","useState","useEffect","QUERY","getInitialState","useState","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/GlassProvider.tsx","../src/components/Glass.tsx","../src/utils/cn.ts","../src/hooks/use-pointer-position.ts","../src/hooks/use-reduced-motion.ts","../src/hooks/use-glisse-effect.ts","../src/core/svg-filters.ts","../src/components/GlassCard.tsx","../src/components/Button.tsx","../src/hooks/use-pressed-state.ts","../src/components/IconButton.tsx","../src/components/Toggle.tsx","../src/hooks/use-controllable.ts","../src/components/Input.tsx","../src/components/Textarea.tsx","../src/components/SearchField.tsx","../src/components/Select.tsx","../src/hooks/use-id.ts","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Switch.tsx","../src/components/Slider.tsx","../src/utils/index.ts","../src/components/TabBar.tsx","../src/components/SegmentedControl.tsx","../src/components/Tabs.tsx","../src/components/Navbar.tsx","../src/components/Sidebar.tsx","../src/components/Dock.tsx","../src/components/Modal.tsx","../src/components/Sheet.tsx","../src/components/Menu.tsx","../src/components/Tooltip.tsx","../src/components/Toast.tsx","../src/components/Alert.tsx","../src/components/Progress.tsx","../src/components/Spinner.tsx","../src/components/Badge.tsx","../src/components/Avatar.tsx","../src/components/Chip.tsx","../src/components/Accordion.tsx","../src/components/Separator.tsx","../src/components/Skeleton.tsx","../src/components/Drawer.tsx","../src/components/Popover.tsx","../src/components/ContextMenu.tsx","../src/components/CommandPalette.tsx","../src/components/Carousel.tsx","../src/components/FloatingActionButton.tsx","../src/components/DatePicker.tsx","../src/hooks/use-reduced-transparency.ts","../src/hooks/use-mounted.ts"],"sourcesContent":["import { createContext, useContext, useState, useEffect, ReactNode } from 'react';\n\nexport type Theme = 'light' | 'dark' | 'system';\nexport type ResolvedTheme = 'light' | 'dark';\n\nexport interface RefractionConfig {\n enabled: boolean;\n depth: number;\n dome: number;\n shine: number;\n lightAngle: number;\n}\n\nexport interface GlassConfig {\n blur?: number;\n saturation?: number;\n bendStrength?: number;\n accentColor?: string;\n reducedMotion?: boolean;\n reducedTransparency?: boolean;\n refraction?: Partial<RefractionConfig>;\n}\n\nexport interface GlassContextValue {\n theme: Theme;\n resolvedTheme: ResolvedTheme;\n setTheme: (theme: Theme) => void;\n config: GlassConfig;\n setConfig: (config: Partial<GlassConfig>) => void;\n refraction: RefractionConfig;\n}\n\nconst DEFAULT_REFRACTION: RefractionConfig = {\n enabled: true,\n depth: 8,\n dome: 4,\n shine: 0.3,\n lightAngle: 225,\n};\n\nconst GlassContext = createContext<GlassContextValue | null>(null);\n\nexport interface GlassProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n config?: GlassConfig;\n storageKey?: string;\n}\n\nfunction getSystemTheme(): ResolvedTheme {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nexport function GlassProvider({\n children,\n defaultTheme = 'system',\n config: initialConfig = {},\n storageKey = 'liquidglass-theme',\n}: GlassProviderProps) {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window === 'undefined') return defaultTheme;\n const stored = localStorage.getItem(storageKey);\n return (stored as Theme) || defaultTheme;\n });\n\n const [resolvedTheme, setResolvedTheme] = useState<ResolvedTheme>(() => {\n if (theme === 'system') return getSystemTheme();\n return theme;\n });\n\n const [config, setConfigState] = useState<GlassConfig>(initialConfig);\n\n const refraction: RefractionConfig = {\n ...DEFAULT_REFRACTION,\n ...config.refraction,\n };\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n if (typeof window !== 'undefined') {\n localStorage.setItem(storageKey, newTheme);\n }\n };\n\n const setConfig = (newConfig: Partial<GlassConfig>) => {\n setConfigState(prev => ({ ...prev, ...newConfig }));\n };\n\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n const handleChange = () => {\n if (theme === 'system') {\n setResolvedTheme(getSystemTheme());\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [theme]);\n\n useEffect(() => {\n if (theme === 'system') {\n setResolvedTheme(getSystemTheme());\n } else {\n setResolvedTheme(theme);\n }\n }, [theme]);\n\n useEffect(() => {\n const root = document.documentElement;\n root.setAttribute('data-theme', resolvedTheme);\n \n if (config.blur !== undefined) {\n root.style.setProperty('--lg-blur', `${config.blur}px`);\n }\n if (config.saturation !== undefined) {\n root.style.setProperty('--lg-saturate', String(config.saturation));\n }\n if (config.accentColor) {\n root.style.setProperty('--lg-accent', config.accentColor);\n }\n }, [resolvedTheme, config]);\n\n return (\n <GlassContext.Provider\n value={{\n theme,\n resolvedTheme,\n setTheme,\n config,\n setConfig,\n refraction,\n }}\n >\n {children}\n </GlassContext.Provider>\n );\n}\n\nexport function useGlass(): GlassContextValue {\n const context = useContext(GlassContext);\n if (!context) {\n throw new Error('useGlass must be used within a GlassProvider');\n }\n return context;\n}\n\nexport function useTheme(): Pick<GlassContextValue, 'theme' | 'resolvedTheme' | 'setTheme'> {\n const { theme, resolvedTheme, setTheme } = useGlass();\n return { theme, resolvedTheme, setTheme };\n}\n\nexport function useRefraction(): RefractionConfig {\n const context = useContext(GlassContext);\n if (!context) {\n return DEFAULT_REFRACTION;\n }\n return context.refraction;\n}\n","/**\n * Glass Component - Apple Liquid Glass effect with glisse-style refraction\n * \n * Refraction implementation based on glisse (MIT License)\n * https://github.com/0kzh/glisse\n * Copyright (c) 2024 Kelvin Zhang\n */\n\nimport { forwardRef, useRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { usePointerPosition } from '../hooks/use-pointer-position';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useGlisseEffect } from '../hooks/use-glisse-effect';\nimport { createRimLightGradient } from '../core/svg-filters';\nimport { useRefraction } from './GlassProvider';\n\nexport interface GlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Visual variant */\n variant?: 'default' | 'elevated' | 'subtle' | 'solid';\n /** Blur intensity in pixels */\n blur?: number;\n /** Color saturation multiplier */\n saturation?: number;\n /** Custom tint color */\n tint?: string;\n /** Enable pointer tracking for highlight effect */\n interactive?: boolean;\n /** Show rim light gradient (legacy, superseded by refraction) */\n rimLight?: boolean;\n /** \n * Enable glisse-style edge refraction with chromatic aberration and specular highlights.\n * Defaults to true. Set to false to disable.\n */\n refraction?: boolean;\n /** Refraction depth in pixels from edge. Default: 8 */\n refractionDepth?: number;\n /** Dome curvature for lens effect. Default: 4 */\n refractionDome?: number;\n /** Specular shine intensity (-2 to 2). Default: 0.3 */\n shine?: number;\n /** Light angle in degrees for rim and refraction. Default: 225 */\n lightAngle?: number;\n}\n\nexport const Glass = forwardRef<HTMLDivElement, GlassProps>(\n (\n {\n className,\n style,\n variant = 'default',\n blur,\n saturation,\n tint,\n interactive = false,\n rimLight = false,\n refraction,\n refractionDepth,\n refractionDome,\n shine,\n lightAngle,\n children,\n ...props\n },\n ref\n ) => {\n const localRef = useRef<HTMLDivElement>(null);\n const combinedRef = (ref as React.RefObject<HTMLDivElement>) || localRef;\n const reducedMotion = useReducedMotion();\n const pointerPosition = usePointerPosition(combinedRef, { enabled: interactive && !reducedMotion });\n \n // Get global refraction config\n const globalRefraction = useRefraction();\n \n // Resolve refraction settings (prop overrides global)\n const shouldRefract = refraction ?? globalRefraction.enabled;\n const depth = refractionDepth ?? globalRefraction.depth;\n const dome = refractionDome ?? globalRefraction.dome;\n const shineValue = shine ?? globalRefraction.shine;\n const angle = lightAngle ?? globalRefraction.lightAngle;\n \n // Glisse-style refraction effect\n const { filterUrl, rimGradient: glisseRim, isReady } = useGlisseEffect(combinedRef, {\n enabled: shouldRefract && !reducedMotion,\n depth,\n dome,\n shine: shineValue,\n lightAngle: angle,\n });\n\n const customStyles: CSSProperties & Record<string, string | number | undefined> = {\n ...style,\n };\n\n if (blur !== undefined) {\n customStyles['--lg-blur'] = `${blur}px`;\n }\n\n if (saturation !== undefined) {\n customStyles['--lg-saturate'] = String(saturation);\n }\n\n if (tint) {\n customStyles.backgroundColor = tint;\n }\n\n // Apply rim light gradient\n if (shouldRefract && isReady) {\n customStyles.backgroundImage = glisseRim;\n } else if (rimLight) {\n customStyles.backgroundImage = createRimLightGradient({ intensity: 0.15, angle });\n }\n\n // Apply refraction filter\n if (shouldRefract && filterUrl && isReady) {\n customStyles.filter = filterUrl;\n }\n\n if (interactive && pointerPosition.isInside) {\n customStyles['--lg-pointer-x'] = `${pointerPosition.percentX}%`;\n customStyles['--lg-pointer-y'] = `${pointerPosition.percentY}%`;\n }\n\n const variantClasses = {\n default: 'lg-glass',\n elevated: 'lg-glass lg-glass-elevated',\n subtle: 'lg-glass lg-glass-subtle',\n solid: '',\n };\n\n return (\n <div\n ref={combinedRef}\n className={cn(variantClasses[variant], className)}\n style={customStyles}\n data-hover={interactive && pointerPosition.isInside ? '' : undefined}\n data-rim={shouldRefract && isReady ? '' : undefined}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nGlass.displayName = 'Glass';\n","type ClassValue = string | number | boolean | undefined | null | ClassValue[];\n\nexport function cn(...inputs: ClassValue[]): string {\n const classes: string[] = [];\n\n for (const input of inputs) {\n if (!input) continue;\n\n if (typeof input === 'string' || typeof input === 'number') {\n classes.push(String(input));\n } else if (Array.isArray(input)) {\n const nested = cn(...input);\n if (nested) classes.push(nested);\n }\n }\n\n return classes.join(' ');\n}\n","import { useState, useEffect, useCallback, RefObject } from 'react';\n\nexport interface PointerPosition {\n x: number;\n y: number;\n percentX: number;\n percentY: number;\n isInside: boolean;\n}\n\nconst defaultPosition: PointerPosition = {\n x: 0,\n y: 0,\n percentX: 50,\n percentY: 50,\n isInside: false,\n};\n\nexport function usePointerPosition(\n ref: RefObject<HTMLElement | null>,\n options: { enabled?: boolean } = {}\n): PointerPosition {\n const { enabled = true } = options;\n const [position, setPosition] = useState<PointerPosition>(defaultPosition);\n\n const updatePosition = useCallback((event: PointerEvent) => {\n if (!ref.current) return;\n\n const rect = ref.current.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const percentX = (x / rect.width) * 100;\n const percentY = (y / rect.height) * 100;\n\n setPosition({\n x,\n y,\n percentX,\n percentY,\n isInside: true,\n });\n }, [ref]);\n\n const handleLeave = useCallback(() => {\n setPosition(prev => ({ ...prev, isInside: false }));\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n\n const element = ref.current;\n if (!element) return;\n\n element.addEventListener('pointermove', updatePosition);\n element.addEventListener('pointerleave', handleLeave);\n\n return () => {\n element.removeEventListener('pointermove', updatePosition);\n element.removeEventListener('pointerleave', handleLeave);\n };\n }, [ref, enabled, updatePosition, handleLeave]);\n\n return enabled ? position : defaultPosition;\n}\n","import { useState, useEffect } from 'react';\n\nconst QUERY = '(prefers-reduced-motion: reduce)';\n\nfunction getInitialState(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(QUERY).matches;\n}\n\nexport function useReducedMotion(): boolean {\n const [reducedMotion, setReducedMotion] = useState(getInitialState);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(QUERY);\n \n const handler = (event: MediaQueryListEvent) => {\n setReducedMotion(event.matches);\n };\n\n mediaQuery.addEventListener('change', handler);\n setReducedMotion(mediaQuery.matches);\n\n return () => {\n mediaQuery.removeEventListener('change', handler);\n };\n }, []);\n\n return reducedMotion;\n}\n","/**\n * Glisse-compatible glass refraction effect hook\n * \n * Based on glisse (MIT License)\n * https://github.com/0kzh/glisse\n * Copyright (c) 2024 Kelvin Zhang\n */\n\nimport { useEffect, useRef, useState, useCallback, RefObject } from 'react';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\ninterface Shape {\n width: number;\n height: number;\n radius: number;\n}\n\ninterface LensOptions {\n depth: number;\n dome: number;\n splay: number;\n relative: boolean;\n}\n\ninterface LightOptions {\n angle: number;\n glow: number;\n spread: number;\n glowPower: number;\n edge: number;\n edgeWidth: number;\n edgePower: number;\n}\n\ninterface LensMap {\n columns: number;\n rows: number;\n across: Uint8ClampedArray;\n down: Uint8ClampedArray;\n light: Uint8ClampedArray;\n}\n\ninterface EncodedMaps {\n across: string;\n down: string;\n light: string;\n}\n\nconst DEFAULT_LIGHT: LightOptions = {\n angle: 225,\n glow: 0.4,\n spread: 0.5,\n glowPower: 2,\n edge: 0.5,\n edgeWidth: 1.5,\n edgePower: 1,\n};\n\nconst DEFAULT_LENS: LensOptions = {\n depth: 8,\n dome: 4,\n splay: 0.85,\n relative: false,\n};\n\nconst clamp = (value: number, min: number, max: number): number =>\n Math.min(max, Math.max(min, value));\n\nconst erf = (x: number): number => Math.tanh(1.7724538509 * x);\n\nfunction distance(\n x: number,\n y: number,\n halfWidth: number,\n halfHeight: number,\n radius: number\n): number {\n const qx = Math.abs(x) - halfWidth + radius;\n const qy = Math.abs(y) - halfHeight + radius;\n return Math.hypot(Math.max(qx, 0), Math.max(qy, 0)) + Math.min(Math.max(qx, qy), 0) - radius;\n}\n\nfunction arc(sag: number, half: number): { radius: number; scale: number } {\n const r = (half * half + sag * sag) / (2 * sag);\n let sum = 0;\n for (let i = 0; i <= 200; i++) {\n const x = (i / 200) * half;\n const s = x / Math.sqrt(r * r - x * x);\n sum += i === 0 || i === 200 ? s / 2 : s;\n }\n const mean = sum / 200;\n return { radius: r, scale: mean > 0 ? 0.5 / mean : 1 };\n}\n\nfunction slopeAt(x: number, curve: { radius: number; scale: number }): number {\n const inside = Math.min(x, 0.999 * curve.radius);\n return (inside / Math.sqrt(curve.radius * curve.radius - inside * inside)) * curve.scale;\n}\n\nfunction grey(data: Uint8ClampedArray, i: number, value: number, alpha = 255): void {\n data[i] = data[i + 1] = data[i + 2] = value;\n data[i + 3] = alpha;\n}\n\nfunction lensMap(\n shape: Shape,\n options: LensOptions,\n light: LightOptions,\n density: number\n): LensMap {\n const { width, height } = shape;\n const halfWidth = width / 2;\n const halfHeight = height / 2;\n const radius = clamp(shape.radius, 0, Math.min(halfWidth, halfHeight));\n const columns = Math.max(1, Math.round(width * density));\n const rows = Math.max(1, Math.round(height * density));\n\n const pullAcross = new Uint8ClampedArray(columns * rows * 4);\n const pullDown = new Uint8ClampedArray(columns * rows * 4);\n const caught = new Uint8ClampedArray(columns * rows * 4);\n\n const share = options.relative ? Math.min(width, height) : 1;\n const depth = options.depth * share;\n const dome = options.dome * share;\n const { splay } = options;\n\n const innerWidth = Math.max(0, halfWidth - depth);\n const innerHeight = Math.max(0, halfHeight - depth);\n const innerRadius = clamp(radius, 0, Math.min(innerWidth, innerHeight));\n const ramp = depth > 0 ? 1 / (depth * Math.SQRT2) : 1e6;\n\n const sag = Math.max(0.01, Math.min(dome, Math.min(halfWidth, halfHeight) - 1));\n const across = dome > 0 ? arc(sag, halfWidth) : null;\n const down = dome > 0 ? arc(sag, halfHeight) : null;\n const reach = 0.5 * Math.min(halfWidth, halfHeight);\n\n const cos = Math.cos((light.angle * Math.PI) / 180);\n const sin = Math.sin((light.angle * Math.PI) / 180);\n const glowStart = (1 - light.spread) * Math.SQRT2;\n const glowRange = light.spread * Math.SQRT2;\n\n for (let row = 0; row < rows; row++) {\n for (let column = 0; column < columns; column++) {\n const i = (row * columns + column) * 4;\n const x = ((column + 0.5) / columns) * width - halfWidth;\n const y = ((row + 0.5) / rows) * height - halfHeight;\n const edge = distance(x, y, halfWidth, halfHeight, radius);\n\n if (edge >= 0) {\n grey(pullAcross, i, 128);\n grey(pullDown, i, 128);\n grey(caught, i, 128, 0);\n continue;\n }\n\n const ax = Math.abs(x);\n const ay = Math.abs(y);\n let dx = across ? Math.sign(x) * slopeAt(ax, across) : clamp(x / halfWidth, -1, 1);\n let dy = down ? Math.sign(y) * slopeAt(ay, down) : clamp(y / halfHeight, -1, 1);\n\n if (splay < 1 && reach > 0) {\n const keepX = Math.max(0, 1 - (halfHeight - ay) / reach) * (1 - splay);\n const keepY = Math.max(0, 1 - (halfWidth - ax) / reach) * (1 - splay);\n if (keepX > 0.001 || keepY > 0.001) {\n const before = Math.hypot(dx, dy);\n dx *= 1 - keepX;\n dy *= 1 - keepY;\n const after = Math.hypot(dx, dy);\n if (after > 0.001) {\n dx *= before / after;\n dy *= before / after;\n }\n }\n }\n\n const falloff = 0.5 * (1 + erf(distance(x, y, innerWidth, innerHeight, innerRadius) * ramp));\n grey(pullAcross, i, Math.round((0.5 - 0.5 * dx * falloff) * 255));\n grey(pullDown, i, Math.round((0.5 - 0.5 * dy * falloff) * 255));\n\n const facing = Math.abs(clamp(x / halfWidth, -1, 1) * cos + clamp(y / halfHeight, -1, 1) * sin);\n const glow =\n glowRange > 0.001\n ? light.glow * Math.pow(clamp((facing - glowStart) / glowRange, 0, 1), light.glowPower) * falloff\n : 0;\n const rim = light.edge * Math.max(0, 1 + edge / light.edgeWidth) * Math.pow(facing, light.edgePower);\n const amount = Math.min(1, glow + rim);\n const bends = Math.min(1, falloff * 20, -edge);\n grey(caught, i, Math.round(127 * amount + 128), Math.round(255 * bends));\n }\n }\n\n return { columns, rows, across: pullAcross, down: pullDown, light: caught };\n}\n\nconst encodedCache = new Map<string, EncodedMaps>();\n\nfunction encode(key: string, draw: () => LensMap): EncodedMaps | null {\n const cached = encodedCache.get(key);\n if (cached) return cached;\n\n const map = draw();\n const canvas = document.createElement('canvas');\n canvas.width = map.columns;\n canvas.height = map.rows;\n const context = canvas.getContext('2d');\n if (!context) return null;\n\n const image = context.createImageData(map.columns, map.rows);\n const png = (data: Uint8ClampedArray): string => {\n image.data.set(data);\n context.putImageData(image, 0, 0);\n return canvas.toDataURL();\n };\n\n const result: EncodedMaps = {\n across: png(map.across),\n down: png(map.down),\n light: png(map.light),\n };\n\n encodedCache.set(key, result);\n return result;\n}\n\nfunction svg<K extends keyof SVGElementTagNameMap>(\n tag: K,\n attrs: Record<string, string | number> = {}\n): SVGElementTagNameMap[K] {\n const el = document.createElementNS(SVG_NS, tag);\n for (const [key, value] of Object.entries(attrs)) {\n el.setAttribute(key, String(value));\n }\n return el;\n}\n\nconst CHANNELS = [\n '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0',\n '0 0 0 0 0 0 1 0 0 0 0 0 0 0 0',\n '0 0 0 0 0 0 0 0 0 0 0 0 1 0 0',\n];\n\nfunction isWebKit(): boolean {\n if (typeof navigator === 'undefined') return false;\n return /AppleWebKit\\//.test(navigator.userAgent) && !/Chrom(?:e|ium)\\//.test(navigator.userAgent);\n}\n\n/** True when feDisplacementMap can be constructed (Chromium/Safari/Firefox modern). */\nfunction supportsDisplacementMap(): boolean {\n if (typeof document === 'undefined') return false;\n try {\n const el = document.createElementNS(SVG_NS, 'feDisplacementMap');\n return !!el && el.namespaceURI === SVG_NS && 'scale' in el;\n } catch {\n return false;\n }\n}\n\ninterface LensConfig {\n maps: EncodedMaps;\n shine: number;\n}\n\nfunction buildFilter(lenses: LensConfig[], box: boolean): SVGFilterElement {\n const unit = box ? 'objectBoundingBox' : 'userSpaceOnUse';\n const filter = svg('filter', {\n filterUnits: unit,\n primitiveUnits: unit,\n 'color-interpolation-filters': 'sRGB',\n });\n\n if (box) {\n filter.setAttribute('x', '0');\n filter.setAttribute('y', '0');\n filter.setAttribute('width', '1');\n filter.setAttribute('height', '1');\n }\n\n const single = lenses.length === 1;\n\n lenses.forEach(({ maps, shine }, k) => {\n const merged = (name: string) => (single ? name : `${name}-${k}`);\n const image = (href: string, result: string) =>\n svg('feImage', { href, preserveAspectRatio: 'none', result });\n\n filter.append(\n image(maps.across, `across-${k}`),\n image(maps.down, `down-${k}`),\n image(maps.light, merged('raw')),\n svg('feFlood', { 'flood-color': 'rgb(128, 128, 128)', result: `neutral-${k}` })\n );\n\n for (const pull of ['across', 'down']) {\n const half = svg('feComponentTransfer', {\n in: `${pull}-grey-${k}`,\n result: `${pull}-pull-${k}`,\n });\n half.append(svg('feFuncA', { type: 'linear', slope: 0, intercept: 0.5 }));\n filter.append(\n svg('feComposite', {\n in: `${pull}-${k}`,\n in2: `neutral-${k}`,\n operator: 'over',\n result: `${pull}-grey-${k}`,\n }),\n half\n );\n }\n\n CHANNELS.forEach((_, i) => {\n filter.append(\n svg('feDisplacementMap', {\n in: 'SourceGraphic',\n in2: `across-pull-${k}`,\n xChannelSelector: 'R',\n yChannelSelector: 'A',\n result: `across-${k}-${i}`,\n }),\n svg('feDisplacementMap', {\n in: `across-${k}-${i}`,\n in2: `down-pull-${k}`,\n xChannelSelector: 'A',\n yChannelSelector: 'R',\n result: `ray-${k}-${i}`,\n })\n );\n });\n\n CHANNELS.forEach((channel, i) => {\n filter.append(\n svg('feColorMatrix', {\n in: `ray-${k}-${i}`,\n type: 'matrix',\n values: `${channel} 0 0 0 0.3333 0`,\n result: `light-${k}-${i}`,\n })\n );\n });\n\n filter.append(\n svg('feComposite', {\n in: `light-${k}-0`,\n in2: `light-${k}-1`,\n operator: 'arithmetic',\n k2: 1,\n k3: 1,\n result: `light-${k}-01`,\n }),\n svg('feComposite', {\n in: `light-${k}-01`,\n in2: `light-${k}-2`,\n operator: 'arithmetic',\n k2: 1,\n k3: 1,\n result: `spread-${k}`,\n }),\n svg('feColorMatrix', {\n in: `spread-${k}`,\n type: 'matrix',\n values: '3 0 0 0 0 0 3 0 0 0 0 0 3 0 0 0 0 0 1 0',\n result: `bent-${k}`,\n })\n );\n\n const bent = `bent-${k}`;\n let lit = bent;\n\n if (shine > 0) {\n const white = `0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 ${-128 / 255}`;\n filter.append(\n svg('feColorMatrix', {\n in: merged('raw'),\n type: 'matrix',\n values: white,\n result: `glint-${k}`,\n }),\n svg('feComposite', {\n in: `glint-${k}`,\n in2: bent,\n operator: 'arithmetic',\n k2: shine,\n k3: 1,\n result: `lit-${k}`,\n })\n );\n lit = `lit-${k}`;\n } else if (shine < 0) {\n const row = `0 0 ${shine} 0 ${1 - (128 * shine) / 255}`;\n filter.append(\n svg('feColorMatrix', {\n in: merged('raw'),\n type: 'matrix',\n values: `${row} ${row} ${row} 0 0 0 0 1`,\n result: `shade-${k}`,\n }),\n svg('feComposite', {\n in: `shade-${k}`,\n in2: bent,\n operator: 'arithmetic',\n k1: 1,\n result: `lit-${k}`,\n })\n );\n lit = `lit-${k}`;\n }\n\n filter.append(\n svg('feComposite', {\n in: lit,\n in2: merged('raw'),\n operator: 'in',\n result: merged('inside'),\n })\n );\n });\n\n filter.append(\n svg('feComposite', {\n in: 'SourceGraphic',\n in2: 'raw',\n operator: 'out',\n result: 'outside',\n }),\n svg('feComposite', {\n in: 'inside',\n in2: 'outside',\n operator: 'arithmetic',\n k2: 1,\n k3: 1,\n result: 'seen',\n })\n );\n\n return filter;\n}\n\nlet filterIdCounter = 0;\nlet filterContainer: HTMLElement | null = null;\n\nfunction getFilterContainer(): HTMLElement {\n if (filterContainer && filterContainer.isConnected) {\n return filterContainer;\n }\n \n let container = document.getElementById('lg-glisse-filters');\n if (!container) {\n container = document.createElement('div');\n container.id = 'lg-glisse-filters';\n container.innerHTML =\n '<svg aria-hidden=\"true\" style=\"position:absolute;width:0;height:0;overflow:hidden;pointer-events:none\"><defs></defs></svg>';\n document.body.appendChild(container);\n }\n filterContainer = container;\n return container;\n}\n\nexport interface UseGlisseEffectOptions {\n enabled?: boolean;\n depth?: number;\n dome?: number;\n splay?: number;\n shine?: number;\n density?: number;\n lightAngle?: number;\n}\n\nexport interface GlisseEffectResult {\n filterUrl: string | null;\n rimGradient: string;\n isReady: boolean;\n}\n\nexport function useGlisseEffect(\n ref: RefObject<HTMLElement | null>,\n options: UseGlisseEffectOptions = {}\n): GlisseEffectResult {\n const {\n enabled = true,\n depth = DEFAULT_LENS.depth,\n dome = DEFAULT_LENS.dome,\n splay = DEFAULT_LENS.splay,\n shine = 0.3,\n density = 0.5,\n lightAngle = DEFAULT_LIGHT.angle,\n } = options;\n\n const [filterUrl, setFilterUrl] = useState<string | null>(null);\n const [isReady, setIsReady] = useState(false);\n const filterRef = useRef<SVGFilterElement | null>(null);\n const currentFilterId = useRef<string | null>(null);\n const lastDimensions = useRef<{ width: number; height: number; radius: number } | null>(null);\n const rafRef = useRef<number | null>(null);\n const supportsRef = useRef<boolean | null>(null);\n\n const cleanup = useCallback(() => {\n if (rafRef.current != null) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n }\n if (filterRef.current) {\n filterRef.current.remove();\n filterRef.current = null;\n }\n currentFilterId.current = null;\n setFilterUrl(null);\n setIsReady(false);\n }, []);\n\n const updateFilter = useCallback((el: HTMLElement) => {\n if (!enabled || typeof document === 'undefined') {\n cleanup();\n return;\n }\n\n // Safari/Firefox/legacy fallback: skip SVG displacement when unsupported.\n // Callers still get rimGradient for a glass look via backdrop-filter.\n if (supportsRef.current === null) {\n supportsRef.current = supportsDisplacementMap();\n }\n if (!supportsRef.current) {\n setFilterUrl(null);\n setIsReady(true);\n return;\n }\n\n const rect = el.getBoundingClientRect();\n const width = Math.max(1, Math.round(rect.width));\n const height = Math.max(1, Math.round(rect.height));\n const computedStyle = getComputedStyle(el);\n const radius = parseFloat(computedStyle.borderRadius) || 0;\n\n // Skip if dimensions haven't changed significantly\n if (lastDimensions.current) {\n const { width: lw, height: lh, radius: lr } = lastDimensions.current;\n if (Math.abs(width - lw) < 2 && Math.abs(height - lh) < 2 && Math.abs(radius - lr) < 1) {\n return;\n }\n }\n lastDimensions.current = { width, height, radius };\n\n const shape: Shape = { width, height, radius };\n const lensOpts: LensOptions = { depth, dome, splay, relative: false };\n const lightOpts: LightOptions = { ...DEFAULT_LIGHT, angle: lightAngle };\n\n const cacheKey = `${width}:${height}:${radius}:${depth}:${dome}:${splay}:${lightAngle}:${density}`;\n const maps = encode(cacheKey, () => lensMap(shape, lensOpts, lightOpts, density));\n\n if (!maps) {\n cleanup();\n return;\n }\n\n const lensConfig: LensConfig = { maps, shine };\n const webKit = isWebKit();\n const filter = buildFilter([lensConfig], webKit);\n\n const filterId = `lg-glisse-${++filterIdCounter}`;\n filter.id = filterId;\n\n const container = getFilterContainer();\n const defs = container.querySelector('defs')!;\n\n // Clean up previous filter\n if (filterRef.current) {\n filterRef.current.remove();\n }\n\n defs.appendChild(filter);\n filterRef.current = filter;\n currentFilterId.current = filterId;\n\n setFilterUrl(`url(#${filterId})`);\n setIsReady(true);\n }, [enabled, depth, dome, splay, shine, density, lightAngle, cleanup]);\n\n useEffect(() => {\n if (!enabled || typeof document === 'undefined' || typeof ResizeObserver === 'undefined') {\n cleanup();\n return;\n }\n\n const el = ref.current;\n if (!el) return;\n\n // Initial setup\n updateFilter(el);\n\n // Throttle ResizeObserver via rAF to avoid filter rebuild storms while dragging\n const observer = new ResizeObserver(() => {\n if (rafRef.current != null) return;\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = null;\n if (ref.current) updateFilter(ref.current);\n });\n });\n observer.observe(el);\n\n return () => {\n observer.disconnect();\n cleanup();\n };\n }, [ref, enabled, updateFilter, cleanup]);\n\n const rimGradient = `linear-gradient(${lightAngle + 90}deg, \n rgba(255,255,255,0.12) 0%, \n rgba(255,255,255,0.06) 30%, \n transparent 50%, \n rgba(0,0,0,0.04) 100%)`;\n\n return { filterUrl, rimGradient, isReady };\n}\n\nexport function clearGlisseCache(): void {\n encodedCache.clear();\n}\n","/**\n * SVG Filter System for Liquid Glass Refraction Effects\n * Creates dynamic SVG filters for lens/refraction effects\n */\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nlet filterContainer: SVGSVGElement | null = null;\nlet filterCounter = 0;\n\nfunction getFilterContainer(): SVGSVGElement {\n if (filterContainer && document.body.contains(filterContainer)) {\n return filterContainer;\n }\n\n filterContainer = document.createElementNS(SVG_NS, 'svg');\n filterContainer.setAttribute('aria-hidden', 'true');\n filterContainer.style.cssText = `\n position: absolute;\n width: 0;\n height: 0;\n overflow: hidden;\n pointer-events: none;\n `;\n\n const defs = document.createElementNS(SVG_NS, 'defs');\n filterContainer.appendChild(defs);\n document.body.appendChild(filterContainer);\n\n return filterContainer;\n}\n\nfunction getDefs(): SVGDefsElement {\n const container = getFilterContainer();\n return container.querySelector('defs')!;\n}\n\nfunction createSVGElement<K extends keyof SVGElementTagNameMap>(\n tag: K,\n attrs: Record<string, string | number> = {}\n): SVGElementTagNameMap[K] {\n const el = document.createElementNS(SVG_NS, tag);\n for (const [key, value] of Object.entries(attrs)) {\n el.setAttribute(key, String(value));\n }\n return el;\n}\n\nexport interface RefractionFilterOptions {\n bendStrength?: number;\n dispersion?: number;\n blur?: number;\n brightness?: number;\n saturation?: number;\n rimShine?: number;\n}\n\nexport interface GlassFilterResult {\n id: string;\n remove: () => void;\n update: (options: Partial<RefractionFilterOptions>) => void;\n}\n\nexport function createRefractionFilter(\n options: RefractionFilterOptions = {}\n): GlassFilterResult {\n const {\n bendStrength = 0.3,\n dispersion = 0.15,\n blur = 2,\n brightness = 1.05,\n saturation = 1.5,\n rimShine = 0.2,\n } = options;\n\n const id = `lg-refraction-${++filterCounter}`;\n const defs = getDefs();\n\n const filter = createSVGElement('filter', {\n id,\n filterUnits: 'objectBoundingBox',\n primitiveUnits: 'objectBoundingBox',\n 'color-interpolation-filters': 'sRGB',\n x: '-20%',\n y: '-20%',\n width: '140%',\n height: '140%',\n });\n\n const turbulence = createSVGElement('feTurbulence', {\n type: 'fractalNoise',\n baseFrequency: 0.01,\n numOctaves: 2,\n seed: Math.floor(Math.random() * 100),\n result: 'noise',\n });\n\n const displacementX = createSVGElement('feDisplacementMap', {\n in: 'SourceGraphic',\n in2: 'noise',\n scale: bendStrength * 30,\n xChannelSelector: 'R',\n yChannelSelector: 'G',\n result: 'displaced',\n });\n\n const colorMatrix = createSVGElement('feColorMatrix', {\n in: 'displaced',\n type: 'matrix',\n values: `\n ${saturation} 0 0 0 0\n 0 ${saturation} 0 0 0\n 0 0 ${saturation} 0 0\n 0 0 0 1 0\n `.trim(),\n result: 'saturated',\n });\n\n const brightnessMatrix = createSVGElement('feColorMatrix', {\n in: 'saturated',\n type: 'matrix',\n values: `\n ${brightness} 0 0 0 0\n 0 ${brightness} 0 0 0\n 0 0 ${brightness} 0 0\n 0 0 0 1 0\n `.trim(),\n result: 'brightened',\n });\n\n const gaussianBlur = createSVGElement('feGaussianBlur', {\n in: 'brightened',\n stdDeviation: blur * 0.01,\n result: 'blurred',\n });\n\n filter.appendChild(turbulence);\n filter.appendChild(displacementX);\n filter.appendChild(colorMatrix);\n filter.appendChild(brightnessMatrix);\n filter.appendChild(gaussianBlur);\n defs.appendChild(filter);\n\n return {\n id,\n remove: () => filter.remove(),\n update: (newOptions) => {\n if (newOptions.bendStrength !== undefined) {\n displacementX.setAttribute('scale', String(newOptions.bendStrength * 30));\n }\n if (newOptions.saturation !== undefined) {\n colorMatrix.setAttribute('values', `\n ${newOptions.saturation} 0 0 0 0\n 0 ${newOptions.saturation} 0 0 0\n 0 0 ${newOptions.saturation} 0 0\n 0 0 0 1 0\n `.trim());\n }\n if (newOptions.brightness !== undefined) {\n brightnessMatrix.setAttribute('values', `\n ${newOptions.brightness} 0 0 0 0\n 0 ${newOptions.brightness} 0 0 0\n 0 0 ${newOptions.brightness} 0 0\n 0 0 0 1 0\n `.trim());\n }\n if (newOptions.blur !== undefined) {\n gaussianBlur.setAttribute('stdDeviation', String(newOptions.blur * 0.01));\n }\n },\n };\n}\n\nexport interface LensFilterOptions {\n bendX?: number;\n bendY?: number;\n dispersion?: number;\n chromatic?: boolean;\n}\n\nexport function createLensFilter(options: LensFilterOptions = {}): GlassFilterResult {\n const {\n bendX = 0.4,\n bendY = 0.3,\n dispersion = 0.2,\n chromatic = true,\n } = options;\n\n const id = `lg-lens-${++filterCounter}`;\n const defs = getDefs();\n\n const filter = createSVGElement('filter', {\n id,\n filterUnits: 'objectBoundingBox',\n primitiveUnits: 'objectBoundingBox',\n 'color-interpolation-filters': 'sRGB',\n x: '-50%',\n y: '-50%',\n width: '200%',\n height: '200%',\n });\n\n const blurForMap = createSVGElement('feGaussianBlur', {\n in: 'SourceAlpha',\n stdDeviation: 0.1,\n result: 'blurredAlpha',\n });\n\n const displacementMapX = createSVGElement('feDisplacementMap', {\n in: 'SourceGraphic',\n in2: 'blurredAlpha',\n scale: bendX * 50,\n xChannelSelector: 'A',\n yChannelSelector: 'A',\n result: 'displacedX',\n });\n\n const displacementMapY = createSVGElement('feDisplacementMap', {\n in: 'displacedX',\n in2: 'blurredAlpha',\n scale: bendY * 50,\n xChannelSelector: 'A',\n yChannelSelector: 'A',\n result: 'displaced',\n });\n\n filter.appendChild(blurForMap);\n filter.appendChild(displacementMapX);\n filter.appendChild(displacementMapY);\n\n if (chromatic && dispersion > 0) {\n const offsetR = createSVGElement('feOffset', {\n in: 'displaced',\n dx: dispersion * 0.02,\n dy: 0,\n result: 'redOffset',\n });\n\n const offsetB = createSVGElement('feOffset', {\n in: 'displaced',\n dx: -dispersion * 0.02,\n dy: 0,\n result: 'blueOffset',\n });\n\n const extractR = createSVGElement('feColorMatrix', {\n in: 'redOffset',\n type: 'matrix',\n values: '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0',\n result: 'redChannel',\n });\n\n const extractG = createSVGElement('feColorMatrix', {\n in: 'displaced',\n type: 'matrix',\n values: '0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0',\n result: 'greenChannel',\n });\n\n const extractB = createSVGElement('feColorMatrix', {\n in: 'blueOffset',\n type: 'matrix',\n values: '0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0',\n result: 'blueChannel',\n });\n\n const mergeRG = createSVGElement('feComposite', {\n in: 'redChannel',\n in2: 'greenChannel',\n operator: 'arithmetic',\n k1: 0,\n k2: 1,\n k3: 1,\n k4: 0,\n result: 'rgMerge',\n });\n\n const mergeRGB = createSVGElement('feComposite', {\n in: 'rgMerge',\n in2: 'blueChannel',\n operator: 'arithmetic',\n k1: 0,\n k2: 1,\n k3: 1,\n k4: 0,\n });\n\n filter.appendChild(offsetR);\n filter.appendChild(offsetB);\n filter.appendChild(extractR);\n filter.appendChild(extractG);\n filter.appendChild(extractB);\n filter.appendChild(mergeRG);\n filter.appendChild(mergeRGB);\n }\n\n defs.appendChild(filter);\n\n return {\n id,\n remove: () => filter.remove(),\n update: (newOptions: Partial<LensFilterOptions>) => {\n if (newOptions.bendX !== undefined) {\n displacementMapX.setAttribute('scale', String(newOptions.bendX * 50));\n }\n if (newOptions.bendY !== undefined) {\n displacementMapY.setAttribute('scale', String(newOptions.bendY * 50));\n }\n },\n };\n}\n\nexport interface RimLightOptions {\n intensity?: number;\n angle?: number;\n spread?: number;\n}\n\nexport function createRimLightGradient(\n options: RimLightOptions = {}\n): string {\n const {\n intensity = 0.3,\n angle = 135,\n spread = 0.5,\n } = options;\n\n const radians = (angle * Math.PI) / 180;\n const x1 = 50 - Math.cos(radians) * 50;\n const y1 = 50 - Math.sin(radians) * 50;\n const x2 = 50 + Math.cos(radians) * 50;\n const y2 = 50 + Math.sin(radians) * 50;\n\n return `linear-gradient(\n ${angle}deg,\n rgba(255, 255, 255, ${intensity}) 0%,\n rgba(255, 255, 255, ${intensity * spread}) ${30}%,\n transparent ${60}%,\n rgba(0, 0, 0, ${intensity * 0.3}) 100%\n )`;\n}\n\nexport function createSpecularHighlight(\n x: number,\n y: number,\n radius: number = 200,\n intensity: number = 0.08\n): string {\n return `radial-gradient(\n circle ${radius}px at ${x}% ${y}%,\n rgba(255, 255, 255, ${intensity}),\n rgba(255, 255, 255, ${intensity * 0.5}) 50%,\n transparent\n )`;\n}\n\nexport function cleanupFilters(): void {\n if (filterContainer) {\n filterContainer.remove();\n filterContainer = null;\n }\n filterCounter = 0;\n}\n\nexport function supportsBackdropFilter(): boolean {\n if (typeof CSS === 'undefined' || typeof CSS.supports !== 'function') {\n return false;\n }\n return (\n CSS.supports('backdrop-filter', 'blur(1px)') ||\n CSS.supports('-webkit-backdrop-filter', 'blur(1px)')\n );\n}\n\nexport function supportsSVGFilters(): boolean {\n if (typeof document === 'undefined' || typeof window === 'undefined') return false;\n try {\n const svg = document.createElementNS(SVG_NS, 'svg');\n if (!(svg instanceof SVGElement)) return false;\n // feDisplacementMap powers glisse refraction — require it explicitly.\n const displace = document.createElementNS(SVG_NS, 'feDisplacementMap');\n return !!displace && displace.namespaceURI === SVG_NS && 'scale' in displace;\n } catch {\n return false;\n }\n}\n","import { forwardRef, HTMLAttributes, CSSProperties, useRef } from 'react';\nimport { cn } from '../utils/cn';\nimport { useGlisseEffect } from '../hooks/use-glisse-effect';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface GlassCardProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'elevated' | 'outlined';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n radius?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n hoverable?: boolean;\n /** Disable glisse refraction effect. Defaults to false (refraction enabled). */\n disableRefraction?: boolean;\n}\n\nconst paddingMap = {\n none: '0',\n sm: '12px',\n md: '16px',\n lg: '24px',\n};\n\nconst radiusMap = {\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '20px',\n full: '9999px',\n};\n\nexport const GlassCard = forwardRef<HTMLDivElement, GlassCardProps>(\n (\n {\n className,\n style,\n variant = 'default',\n padding = 'md',\n radius = 'lg',\n hoverable = false,\n disableRefraction = false,\n children,\n ...props\n },\n ref\n ) => {\n const localRef = useRef<HTMLDivElement>(null);\n const combinedRef = (ref as React.RefObject<HTMLDivElement>) || localRef;\n const reducedMotion = useReducedMotion();\n \n const { filterUrl, rimGradient, isReady } = useGlisseEffect(combinedRef, {\n enabled: !disableRefraction && !reducedMotion,\n });\n\n const customStyles: CSSProperties = {\n padding: paddingMap[padding],\n borderRadius: radiusMap[radius],\n ...style,\n };\n\n if (isReady && filterUrl) {\n customStyles.filter = filterUrl;\n customStyles.backgroundImage = rimGradient;\n }\n\n const baseClasses = cn(\n 'lg-glass',\n variant === 'elevated' && 'lg-glass-elevated',\n variant === 'outlined' && 'border border-[var(--lg-edge-strong)]',\n hoverable && 'transition-transform hover:scale-[1.02] hover:shadow-lg cursor-pointer',\n className\n );\n\n return (\n <div ref={combinedRef} className={baseClasses} style={customStyles} {...props}>\n {children}\n </div>\n );\n }\n);\n\nGlassCard.displayName = 'GlassCard';\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties, useRef } from 'react';\nimport { cn } from '../utils/cn';\nimport { usePressedState } from '../hooks/use-pressed-state';\nimport { useGlisseEffect } from '../hooks/use-glisse-effect';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'glass' | 'filled' | 'outlined' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n icon?: ReactNode;\n iconPosition?: 'start' | 'end';\n destructive?: boolean;\n tint?: string;\n loading?: boolean;\n fullWidth?: boolean;\n /** Disable glisse refraction effect. Defaults to false (refraction enabled for glass variant). */\n disableRefraction?: boolean;\n}\n\nconst sizeStyles = {\n sm: {\n height: '32px',\n padding: '0 12px',\n fontSize: '13px',\n borderRadius: '16px',\n iconSize: '16px',\n gap: '6px',\n },\n md: {\n height: '40px',\n padding: '0 16px',\n fontSize: '14px',\n borderRadius: '20px',\n iconSize: '20px',\n gap: '8px',\n },\n lg: {\n height: '48px',\n padding: '0 24px',\n fontSize: '16px',\n borderRadius: '24px',\n iconSize: '24px',\n gap: '10px',\n },\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n style,\n variant = 'glass',\n size = 'md',\n icon,\n iconPosition = 'start',\n destructive = false,\n tint,\n loading = false,\n fullWidth = false,\n disabled,\n disableRefraction = false,\n children,\n ...props\n },\n ref\n ) => {\n const localRef = useRef<HTMLButtonElement>(null);\n const combinedRef = (ref as React.RefObject<HTMLButtonElement>) || localRef;\n const { isPressed, pressHandlers } = usePressedState({ disabled: disabled || loading });\n const reducedMotion = useReducedMotion();\n const sizeConfig = sizeStyles[size];\n \n // Refraction for glass variant buttons\n const shouldRefract = variant === 'glass' && !disableRefraction && !reducedMotion;\n const { filterUrl, rimGradient, isReady } = useGlisseEffect(combinedRef, {\n enabled: shouldRefract,\n depth: 6,\n dome: 3,\n shine: 0.25,\n });\n\n const customStyles: CSSProperties & Record<string, string | number | undefined> = {\n height: sizeConfig.height,\n padding: icon && !children ? '0' : sizeConfig.padding,\n fontSize: sizeConfig.fontSize,\n borderRadius: sizeConfig.borderRadius,\n gap: sizeConfig.gap,\n width: icon && !children ? sizeConfig.height : fullWidth ? '100%' : undefined,\n ...style,\n };\n\n if (tint && !destructive) {\n customStyles['--lg-tint'] = tint;\n }\n\n // Apply refraction effect\n if (shouldRefract && isReady && filterUrl) {\n customStyles.filter = filterUrl;\n customStyles.backgroundImage = rimGradient;\n }\n\n const baseClasses = cn(\n 'lg-glass lg-interactive lg-focus-ring',\n 'inline-flex items-center justify-center',\n 'font-medium transition-colors',\n 'border-0 cursor-pointer',\n variant === 'filled' && 'text-white',\n variant === 'outlined' && 'bg-transparent border border-[var(--lg-edge-strong)]',\n variant === 'ghost' && 'bg-transparent backdrop-blur-none',\n destructive && 'text-[var(--lg-destructive)]',\n (disabled || loading) && 'opacity-35 cursor-default',\n fullWidth && 'w-full',\n className\n );\n\n const variantStyles: CSSProperties = {};\n \n if (variant === 'filled') {\n const fillColor = destructive ? 'var(--lg-destructive)' : (tint || 'var(--lg-fill)');\n variantStyles.backgroundColor = fillColor;\n variantStyles.color = 'white';\n }\n\n if ((tint || destructive) && variant !== 'filled') {\n variantStyles.color = destructive ? 'var(--lg-destructive)' : tint;\n }\n\n return (\n <button\n ref={combinedRef}\n className={baseClasses}\n style={{ ...customStyles, ...variantStyles }}\n disabled={disabled || loading}\n data-pressed={isPressed ? '' : undefined}\n data-variant={variant}\n data-destructive={destructive ? '' : undefined}\n data-icon={icon ? (children ? 'with-text' : 'only') : undefined}\n {...pressHandlers}\n {...props}\n >\n {loading ? (\n <span\n className=\"animate-spin\"\n style={{\n width: sizeConfig.iconSize,\n height: sizeConfig.iconSize,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n }}\n />\n ) : (\n <>\n {icon && iconPosition === 'start' && (\n <span\n className=\"flex items-center justify-center\"\n style={{ width: sizeConfig.iconSize, height: sizeConfig.iconSize }}\n >\n {icon}\n </span>\n )}\n {children}\n {icon && iconPosition === 'end' && (\n <span\n className=\"flex items-center justify-center\"\n style={{ width: sizeConfig.iconSize, height: sizeConfig.iconSize }}\n >\n {icon}\n </span>\n )}\n </>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n","import { useState, useCallback, useRef, useEffect } from 'react';\n\nexport interface UsePressedStateOptions {\n disabled?: boolean;\n onPressStart?: () => void;\n onPressEnd?: () => void;\n}\n\nexport interface PressedState {\n isPressed: boolean;\n pressHandlers: {\n onPointerDown: (e: React.PointerEvent) => void;\n onPointerUp: (e: React.PointerEvent) => void;\n onPointerCancel: (e: React.PointerEvent) => void;\n onPointerLeave: (e: React.PointerEvent) => void;\n onKeyDown: (e: React.KeyboardEvent) => void;\n onKeyUp: (e: React.KeyboardEvent) => void;\n };\n}\n\nexport function usePressedState(options: UsePressedStateOptions = {}): PressedState {\n const { disabled = false, onPressStart, onPressEnd } = options;\n const [isPressed, setIsPressed] = useState(false);\n const pointerIdRef = useRef<number | null>(null);\n\n const handlePressStart = useCallback(() => {\n if (disabled) return;\n setIsPressed(true);\n onPressStart?.();\n }, [disabled, onPressStart]);\n\n const handlePressEnd = useCallback(() => {\n setIsPressed(false);\n onPressEnd?.();\n }, [onPressEnd]);\n\n const onPointerDown = useCallback((e: React.PointerEvent) => {\n if (disabled || pointerIdRef.current !== null) return;\n pointerIdRef.current = e.pointerId;\n handlePressStart();\n (e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n }, [disabled, handlePressStart]);\n\n const onPointerUp = useCallback((e: React.PointerEvent) => {\n if (pointerIdRef.current !== e.pointerId) return;\n pointerIdRef.current = null;\n handlePressEnd();\n }, [handlePressEnd]);\n\n const onPointerCancel = useCallback((e: React.PointerEvent) => {\n if (pointerIdRef.current !== e.pointerId) return;\n pointerIdRef.current = null;\n handlePressEnd();\n }, [handlePressEnd]);\n\n const onPointerLeave = useCallback((e: React.PointerEvent) => {\n if (pointerIdRef.current !== e.pointerId) return;\n }, []);\n\n const onKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (disabled) return;\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n handlePressStart();\n }\n }, [disabled, handlePressStart]);\n\n const onKeyUp = useCallback((e: React.KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n handlePressEnd();\n }\n }, [handlePressEnd]);\n\n useEffect(() => {\n return () => {\n pointerIdRef.current = null;\n };\n }, []);\n\n return {\n isPressed,\n pressHandlers: {\n onPointerDown,\n onPointerUp,\n onPointerCancel,\n onPointerLeave,\n onKeyDown,\n onKeyUp,\n },\n };\n}\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { usePressedState } from '../hooks/use-pressed-state';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n variant?: 'glass' | 'filled' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n destructive?: boolean;\n tint?: string;\n loading?: boolean;\n 'aria-label': string;\n}\n\nconst sizeStyles = {\n sm: { size: '32px', iconSize: '16px' },\n md: { size: '40px', iconSize: '20px' },\n lg: { size: '48px', iconSize: '24px' },\n};\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n className,\n style,\n icon,\n variant = 'glass',\n size = 'md',\n destructive = false,\n tint,\n loading = false,\n disabled,\n ...props\n },\n ref\n ) => {\n const { isPressed, pressHandlers } = usePressedState({ disabled: disabled || loading });\n const sizeConfig = sizeStyles[size];\n\n const customStyles: CSSProperties = {\n width: sizeConfig.size,\n height: sizeConfig.size,\n borderRadius: '50%',\n ...style,\n };\n\n if (tint && !destructive) {\n customStyles.color = tint;\n }\n\n const baseClasses = cn(\n 'lg-glass lg-interactive lg-focus-ring',\n 'inline-flex items-center justify-center',\n 'border-0 p-0',\n variant === 'filled' && 'text-white',\n variant === 'ghost' && 'bg-transparent backdrop-blur-none',\n destructive && 'text-[var(--lg-destructive)]',\n (disabled || loading) && 'opacity-35 cursor-default',\n className\n );\n\n const variantStyles: CSSProperties = {};\n if (variant === 'filled') {\n variantStyles.backgroundColor = destructive ? 'var(--lg-destructive)' : (tint || 'var(--lg-fill)');\n variantStyles.color = 'white';\n }\n\n return (\n <button\n ref={ref}\n className={baseClasses}\n style={{ ...customStyles, ...variantStyles }}\n disabled={disabled || loading}\n data-pressed={isPressed ? '' : undefined}\n {...pressHandlers}\n {...props}\n >\n {loading ? (\n <span\n className=\"animate-spin\"\n style={{\n width: sizeConfig.iconSize,\n height: sizeConfig.iconSize,\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n }}\n />\n ) : (\n <span\n className=\"flex items-center justify-center\"\n style={{ width: sizeConfig.iconSize, height: sizeConfig.iconSize }}\n >\n {icon}\n </span>\n )}\n </button>\n );\n }\n);\n\nIconButton.displayName = 'IconButton';\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllableBoolean } from '../hooks/use-controllable';\nimport { usePressedState } from '../hooks/use-pressed-state';\n\nexport interface ToggleProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: 'sm' | 'md' | 'lg';\n variant?: 'default' | 'outline';\n icon?: ReactNode;\n}\n\nconst sizeConfig = {\n sm: { size: 32, padding: '0 8px', fontSize: 12, iconSize: 16 },\n md: { size: 40, padding: '0 12px', fontSize: 14, iconSize: 20 },\n lg: { size: 48, padding: '0 16px', fontSize: 16, iconSize: 24 },\n};\n\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n className,\n style,\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n size = 'md',\n variant = 'default',\n icon,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const [pressed, setPressed] = useControllableBoolean({\n checked: controlledPressed,\n defaultChecked: defaultPressed,\n onCheckedChange: onPressedChange,\n });\n\n const { isPressed: isPointerPressed, pressHandlers } = usePressedState({ disabled });\n const config = sizeConfig[size];\n\n const handleClick = () => {\n if (!disabled) {\n setPressed(!pressed);\n }\n };\n\n const toggleStyles: CSSProperties = {\n height: config.size,\n padding: icon && !children ? '0' : config.padding,\n width: icon && !children ? config.size : undefined,\n fontSize: config.fontSize,\n borderRadius: config.size / 2,\n ...style,\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={pressed}\n disabled={disabled}\n onClick={handleClick}\n className={cn(\n 'lg-interactive lg-focus-ring',\n 'inline-flex items-center justify-center gap-2',\n 'border-0 font-medium cursor-pointer',\n 'transition-colors',\n variant === 'default' && 'lg-glass',\n variant === 'outline' && 'bg-transparent border border-[var(--lg-edge-strong)]',\n pressed && 'bg-[var(--lg-accent-light)] text-[var(--lg-accent)]',\n pressed && variant === 'outline' && 'border-[var(--lg-accent)]',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={toggleStyles}\n data-pressed={isPointerPressed ? '' : undefined}\n data-state={pressed ? 'on' : 'off'}\n {...pressHandlers}\n {...props}\n >\n {icon && (\n <span\n className=\"flex items-center justify-center\"\n style={{ width: config.iconSize, height: config.iconSize }}\n >\n {icon}\n </span>\n )}\n {children}\n </button>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n","import { useState, useCallback, useRef, useEffect } from 'react';\n\nexport interface UseControllableOptions<T> {\n value?: T;\n defaultValue?: T;\n onChange?: (value: T) => void;\n}\n\nexport function useControllable<T>(\n options: UseControllableOptions<T>\n): [T | undefined, (value: T) => void, boolean] {\n const { value: controlledValue, defaultValue, onChange } = options;\n \n const isControlled = controlledValue !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState<T | undefined>(defaultValue);\n \n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = useCallback((newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n }, [isControlled, onChange]);\n\n return [value, setValue, isControlled];\n}\n\nexport function useControllableBoolean(\n options: {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n }\n): [boolean, (checked: boolean) => void, boolean] {\n const { checked, defaultChecked = false, onCheckedChange } = options;\n \n const isControlled = checked !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultChecked);\n \n const value = isControlled ? checked : uncontrolledValue;\n\n const setValue = useCallback((newValue: boolean) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onCheckedChange?.(newValue);\n }, [isControlled, onCheckedChange]);\n\n return [value, setValue, isControlled];\n}\n","import { forwardRef, InputHTMLAttributes, ReactNode, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange' | 'size'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n icon?: ReactNode;\n rightElement?: ReactNode;\n size?: 'sm' | 'md' | 'lg';\n error?: boolean;\n clearable?: boolean;\n onClear?: () => void;\n}\n\nconst sizeConfig = {\n sm: { height: 32, padding: '0 10px', fontSize: 13, iconSize: 14, borderRadius: 16 },\n md: { height: 40, padding: '0 14px', fontSize: 14, iconSize: 16, borderRadius: 20 },\n lg: { height: 48, padding: '0 18px', fontSize: 16, iconSize: 18, borderRadius: 24 },\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n style,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n icon,\n rightElement,\n size = 'md',\n error = false,\n clearable = false,\n onClear,\n disabled,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [isFocused, setIsFocused] = useState(false);\n const config = sizeConfig[size];\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value);\n };\n\n const handleClear = () => {\n setValue('');\n onClear?.();\n };\n\n const containerStyles: CSSProperties = {\n height: config.height,\n padding: config.padding,\n paddingLeft: icon ? config.height * 0.35 : undefined,\n paddingRight: (clearable && value) || rightElement ? config.height * 0.35 : undefined,\n fontSize: config.fontSize,\n borderRadius: config.borderRadius,\n ...style,\n };\n\n return (\n <div\n className={cn(\n 'lg-glass lg-text',\n 'relative flex items-center gap-2.5 w-full max-w-[360px]',\n 'transition-colors',\n isFocused && 'bg-[var(--lg-glass-active)]',\n error && 'ring-2 ring-[var(--lg-destructive)]',\n disabled && 'opacity-35',\n className\n )}\n style={containerStyles}\n >\n {icon && (\n <span\n className=\"flex-none flex items-center justify-center text-[var(--lg-muted)]\"\n style={{ width: config.iconSize, height: config.iconSize }}\n >\n {icon}\n </span>\n )}\n\n <input\n ref={ref}\n type=\"text\"\n value={value}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n disabled={disabled}\n className={cn(\n 'flex-1 min-w-0 h-full',\n 'p-0 border-0 outline-none',\n 'bg-transparent text-inherit',\n 'placeholder:text-[var(--lg-muted)]'\n )}\n style={{ font: 'inherit' }}\n {...props}\n />\n\n {clearable && value && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={cn(\n 'flex-none flex items-center justify-center',\n 'w-8 h-8 -mr-2 p-0 border-0 rounded-full',\n 'bg-transparent text-[var(--lg-muted)] cursor-pointer',\n 'hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Clear\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M15 9l-6 6M9 9l6 6\" />\n </svg>\n </button>\n )}\n\n {rightElement && (\n <span className=\"flex-none\">{rightElement}</span>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n","import { forwardRef, TextareaHTMLAttributes, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\n\nexport interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'defaultValue' | 'onChange'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n error?: boolean;\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n style,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n error = false,\n resize = 'vertical',\n disabled,\n rows = 3,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [isFocused, setIsFocused] = useState(false);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value);\n };\n\n const containerStyles: CSSProperties = {\n borderRadius: 16,\n ...style,\n };\n\n return (\n <div\n className={cn(\n 'lg-glass lg-text',\n 'relative w-full max-w-[400px] p-3',\n 'transition-colors',\n isFocused && 'bg-[var(--lg-glass-active)]',\n error && 'ring-2 ring-[var(--lg-destructive)]',\n disabled && 'opacity-35',\n className\n )}\n style={containerStyles}\n >\n <textarea\n ref={ref}\n value={value}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n disabled={disabled}\n rows={rows}\n className={cn(\n 'w-full min-h-[60px]',\n 'p-0 border-0 outline-none',\n 'bg-transparent text-inherit',\n 'placeholder:text-[var(--lg-muted)]',\n 'leading-relaxed'\n )}\n style={{\n font: 'inherit',\n fontSize: 14,\n resize,\n }}\n {...props}\n />\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n","import { forwardRef } from 'react';\nimport { Input, InputProps } from './Input';\n\nexport type SearchFieldProps = Omit<InputProps, 'type' | 'icon'>;\n\nconst SearchIcon = () => (\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n);\n\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n ({ placeholder = 'Search', clearable = true, ...props }, ref) => {\n return (\n <Input\n ref={ref}\n type=\"search\"\n placeholder={placeholder}\n icon={<SearchIcon />}\n clearable={clearable}\n {...props}\n />\n );\n }\n);\n\nSearchField.displayName = 'SearchField';\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties, useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'defaultValue' | 'onChange'> {\n options: SelectOption[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n size?: 'sm' | 'md' | 'lg';\n error?: boolean;\n}\n\nconst sizeConfig = {\n sm: { height: 32, padding: '0 10px', fontSize: 13, borderRadius: 16 },\n md: { height: 40, padding: '0 14px', fontSize: 14, borderRadius: 20 },\n lg: { height: 48, padding: '0 18px', fontSize: 16, borderRadius: 24 },\n};\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n className,\n style,\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select an option',\n size = 'md',\n error = false,\n disabled,\n id: providedId,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const id = useId(providedId);\n const menuId = `${id}-menu`;\n\n const config = sizeConfig[size];\n const selectedOption = options.find(opt => opt.value === value);\n\n const updateMenuPosition = useCallback(() => {\n if (!triggerRef.current || !menuRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n menuRef.current.style.top = `${rect.bottom + window.scrollY + 4}px`;\n menuRef.current.style.left = `${rect.left + window.scrollX}px`;\n menuRef.current.style.width = `${rect.width}px`;\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n updateMenuPosition();\n window.addEventListener('scroll', updateMenuPosition, true);\n window.addEventListener('resize', updateMenuPosition);\n }\n\n return () => {\n window.removeEventListener('scroll', updateMenuPosition, true);\n window.removeEventListener('resize', updateMenuPosition);\n };\n }, [isOpen, updateMenuPosition]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n triggerRef.current?.contains(e.target as Node) ||\n menuRef.current?.contains(e.target as Node)\n ) {\n return;\n }\n setIsOpen(false);\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n const handleSelect = (optionValue: string) => {\n setValue(optionValue);\n setIsOpen(false);\n triggerRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && focusedIndex >= 0) {\n const option = options[focusedIndex];\n if (!option.disabled) handleSelect(option.value);\n } else {\n setIsOpen(true);\n }\n break;\n case 'Escape':\n setIsOpen(false);\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setFocusedIndex(prev => {\n let next = prev + 1;\n while (next < options.length && options[next].disabled) next++;\n return next < options.length ? next : prev;\n });\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n setFocusedIndex(prev => {\n let next = prev - 1;\n while (next >= 0 && options[next].disabled) next--;\n return next >= 0 ? next : prev;\n });\n break;\n }\n };\n\n const triggerStyles: CSSProperties = {\n height: config.height,\n padding: config.padding,\n fontSize: config.fontSize,\n borderRadius: config.borderRadius,\n ...style,\n };\n\n return (\n <>\n <button\n ref={(node) => {\n (triggerRef as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={isOpen ? menuId : undefined}\n id={id}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className={cn(\n 'lg-glass lg-interactive lg-focus-ring lg-text',\n 'flex items-center justify-between gap-2 w-full max-w-[360px]',\n 'border-0 text-left cursor-pointer',\n error && 'ring-2 ring-[var(--lg-destructive)]',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={triggerStyles}\n {...props}\n >\n <span className={selectedOption ? '' : 'text-[var(--lg-muted)]'}>\n {selectedOption?.label ?? placeholder}\n </span>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={cn(\n 'transition-transform',\n isOpen && 'rotate-180'\n )}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n {isOpen && typeof document !== 'undefined' && createPortal(\n <div\n ref={menuRef}\n role=\"listbox\"\n id={menuId}\n aria-labelledby={id}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 py-1.5 overflow-auto max-h-[300px]',\n !reducedMotion && 'animate-[lg-scale-in_150ms_ease-out]'\n )}\n style={{\n borderRadius: 12,\n transformOrigin: 'top center',\n }}\n >\n {options.map((option, index) => (\n <button\n key={option.value}\n role=\"option\"\n aria-selected={option.value === value}\n disabled={option.disabled}\n onClick={() => !option.disabled && handleSelect(option.value)}\n onMouseEnter={() => setFocusedIndex(index)}\n className={cn(\n 'w-full flex items-center gap-2 px-3 py-2',\n 'border-0 bg-transparent text-left cursor-pointer',\n 'transition-colors',\n option.value === value && 'font-medium',\n focusedIndex === index && 'bg-[var(--lg-highlight)]',\n option.disabled && 'opacity-35 cursor-default'\n )}\n style={{ fontSize: config.fontSize }}\n >\n <span className=\"flex-1\">{option.label}</span>\n {option.value === value && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-accent)\" strokeWidth=\"2\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n </button>\n ))}\n </div>,\n document.body\n )}\n </>\n );\n }\n);\n\nSelect.displayName = 'Select';\n","import { useId as useReactId } from 'react';\n\nlet idCounter = 0;\n\nexport function useId(providedId?: string): string {\n const reactId = useReactId();\n \n if (providedId) {\n return providedId;\n }\n \n return reactId || `lg-${++idCounter}`;\n}\n","import { forwardRef, InputHTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllableBoolean } from '../hooks/use-controllable';\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'defaultChecked' | 'onChange' | 'size'> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n label?: string;\n size?: 'sm' | 'md' | 'lg';\n indeterminate?: boolean;\n}\n\nconst sizeConfig = {\n sm: { size: 16, iconSize: 10, borderRadius: 4 },\n md: { size: 20, iconSize: 12, borderRadius: 5 },\n lg: { size: 24, iconSize: 14, borderRadius: 6 },\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n style,\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n label,\n size = 'md',\n indeterminate = false,\n disabled,\n id,\n ...props\n },\n ref\n ) => {\n const [checked, setChecked] = useControllableBoolean({\n checked: controlledChecked,\n defaultChecked,\n onCheckedChange,\n });\n\n const config = sizeConfig[size];\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setChecked(e.target.checked);\n };\n\n const boxStyles: CSSProperties = {\n width: config.size,\n height: config.size,\n borderRadius: config.borderRadius,\n };\n\n return (\n <label\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={style}\n >\n <span\n className={cn(\n 'lg-glass relative flex items-center justify-center',\n 'transition-colors',\n (checked || indeterminate) && 'bg-[var(--lg-accent)]'\n )}\n style={boxStyles}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n id={id}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer m-0\"\n {...props}\n />\n {(checked || indeterminate) && (\n <svg\n width={config.iconSize}\n height={config.iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {indeterminate ? (\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n ) : (\n <polyline points=\"20 6 9 17 4 12\" />\n )}\n </svg>\n )}\n </span>\n {label && (\n <span className=\"text-sm\" style={{ color: 'var(--lg-foreground)' }}>\n {label}\n </span>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","import { forwardRef, InputHTMLAttributes, createContext, useContext, ReactNode } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\n\ninterface RadioGroupContextValue {\n name: string;\n value: string | undefined;\n onChange: (value: string) => void;\n disabled?: boolean;\n size: 'sm' | 'md' | 'lg';\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport interface RadioGroupProps {\n children: ReactNode;\n name: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n orientation?: 'horizontal' | 'vertical';\n className?: string;\n}\n\nexport function RadioGroup({\n children,\n name,\n value: controlledValue,\n defaultValue,\n onValueChange,\n disabled,\n size = 'md',\n orientation = 'vertical',\n className,\n}: RadioGroupProps) {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n return (\n <RadioGroupContext.Provider\n value={{\n name,\n value,\n onChange: setValue,\n disabled,\n size,\n }}\n >\n <div\n role=\"radiogroup\"\n className={cn(\n 'flex',\n orientation === 'vertical' ? 'flex-col gap-2' : 'flex-row gap-4',\n className\n )}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst sizeConfig = {\n sm: { size: 16, dotSize: 6 },\n md: { size: 20, dotSize: 8 },\n lg: { size: 24, dotSize: 10 },\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className,\n style,\n label,\n size: sizeProp,\n value,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const group = useContext(RadioGroupContext);\n const size = sizeProp ?? group?.size ?? 'md';\n const disabled = disabledProp ?? group?.disabled;\n const isChecked = group ? group.value === value : false;\n const config = sizeConfig[size];\n\n const handleChange = () => {\n if (group && value !== undefined) {\n group.onChange(value as string);\n }\n };\n\n return (\n <label\n className={cn(\n 'inline-flex items-center gap-2 cursor-pointer',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={style}\n >\n <span\n className={cn(\n 'lg-glass relative flex items-center justify-center rounded-full',\n 'transition-colors',\n isChecked && 'bg-[var(--lg-accent)]'\n )}\n style={{\n width: config.size,\n height: config.size,\n }}\n >\n <input\n ref={ref}\n type=\"radio\"\n name={group?.name}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={disabled}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer m-0\"\n {...props}\n />\n {isChecked && (\n <span\n className=\"rounded-full bg-white\"\n style={{\n width: config.dotSize,\n height: config.dotSize,\n }}\n />\n )}\n </span>\n {label && (\n <span className=\"text-sm\" style={{ color: 'var(--lg-foreground)' }}>\n {label}\n </span>\n )}\n </label>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n","/**\n * Switch — glisse-compatible glass pill track with large white thumb\n *\n * Dimensions and structure mirror glisse (MIT, Kelvin Zhang):\n * button 160×67 × scale, bed inset -6/-12, track inset 6/12,\n * thumb 146×92 × scale at 0.65, travel 57.9 × scale.\n */\nimport {\n forwardRef,\n ButtonHTMLAttributes,\n CSSProperties,\n useRef,\n useState,\n useImperativeHandle,\n} from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllableBoolean } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useGlisseEffect } from '../hooks/use-glisse-effect';\n\nexport interface SwitchProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'defaultValue' | 'onChange'> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n /** Visual scale. `md` matches glisse exactly. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SCALE_BY_SIZE = {\n sm: 0.3,\n md: 0.375,\n lg: 0.5,\n} as const;\n\nconst THUMB_SHADOW = `\n 0 6px 24px rgba(0,0,0,0.2),\n inset 0 0 0 1.5px rgba(255,255,255,0.5),\n inset 0 2px 1px rgba(255,255,255,0.45),\n inset 2px 7px 24px rgba(0,0,0,0.09),\n inset -2px -7px 24px rgba(255,255,255,0.16)\n`;\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n className,\n style,\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n size = 'md',\n disabled,\n ...props\n },\n forwardedRef\n ) => {\n const [checked, setChecked] = useControllableBoolean({\n checked: controlledChecked,\n defaultChecked,\n onCheckedChange,\n });\n\n const [lift, setLift] = useState(0);\n const reducedMotion = useReducedMotion();\n const rootRef = useRef<HTMLButtonElement>(null);\n const thumbRef = useRef<HTMLSpanElement>(null);\n const gestureRef = useRef<{ id: number; x: number; from: number } | null>(null);\n\n useImperativeHandle(forwardedRef, () => rootRef.current as HTMLButtonElement);\n\n const scale = SCALE_BY_SIZE[size];\n const travel = 57.9 * scale;\n const width = 160 * scale;\n const height = 67 * scale;\n const thumbWidth = 146 * scale;\n const thumbHeight = 92 * scale;\n const thumbScale = 0.65 + lift * 0.25;\n const thumbX = checked ? travel : 0;\n\n // Thumb lens — glisse uses depth:2, dome:6 on the switch thumb\n const { filterUrl, rimGradient, isReady } = useGlisseEffect(thumbRef, {\n enabled: !reducedMotion,\n depth: 2,\n dome: 6,\n splay: 0.4,\n shine: 0.3,\n });\n\n const handleClick = () => {\n if (!disabled && !gestureRef.current) {\n setChecked(!checked);\n }\n };\n\n const handlePointerDown = (e: React.PointerEvent) => {\n if (disabled || e.button !== 0) return;\n e.preventDefault();\n gestureRef.current = {\n id: e.pointerId,\n x: e.clientX,\n from: checked ? 1 : 0,\n };\n rootRef.current?.setPointerCapture(e.pointerId);\n if (!reducedMotion) setLift(1);\n };\n\n const handlePointerUp = (e: React.PointerEvent) => {\n if (gestureRef.current?.id !== e.pointerId) return;\n const gesture = gestureRef.current;\n gestureRef.current = null;\n setLift(0);\n\n const dx = e.clientX - gesture.x;\n if (Math.abs(dx) > 4) {\n const value = gesture.from + dx / travel;\n setChecked(value > 0.5);\n } else {\n setChecked(!checked);\n }\n };\n\n const handlePointerCancel = () => {\n gestureRef.current = null;\n setLift(0);\n };\n\n const rootStyles: CSSProperties = {\n width,\n height,\n ...style,\n };\n\n const thumbStyles: CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: -21.95 * scale,\n width: thumbWidth,\n height: thumbHeight,\n transform: `translate(${thumbX}px, -50%) scale(${thumbScale})`,\n transition: reducedMotion ? 'none' : 'transform 200ms cubic-bezier(.25,.1,.25,1)',\n borderRadius: 9999,\n backdropFilter: `blur(${2 * (1 - lift) + 0.5 * lift}px) brightness(${1 + 0.15 * (1 - lift)}) saturate(1.5)`,\n WebkitBackdropFilter: `blur(${2 * (1 - lift) + 0.5 * lift}px) brightness(${1 + 0.15 * (1 - lift)}) saturate(1.5)`,\n boxShadow: THUMB_SHADOW,\n pointerEvents: 'none',\n ...(isReady && filterUrl\n ? { filter: filterUrl, backgroundImage: rimGradient }\n : {}),\n };\n\n return (\n <button\n ref={rootRef}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n className={cn(\n 'lg-focus-ring relative inline-flex items-center shrink-0',\n 'p-0 border-0 rounded-full cursor-pointer touch-pan-y',\n 'bg-transparent',\n disabled && 'opacity-35 cursor-default',\n className\n )}\n style={rootStyles}\n disabled={disabled}\n onClick={handleClick}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerCancel}\n {...props}\n >\n {/* Expanded bed — makes the green glass pill match glisse's visual size */}\n <span\n aria-hidden\n style={{ position: 'absolute', inset: '-6px -12px', pointerEvents: 'none' }}\n >\n <span\n style={{\n position: 'absolute',\n inset: '6px 12px',\n borderRadius: 9999,\n backgroundColor: 'var(--lg-track)',\n }}\n >\n <span\n style={{\n position: 'absolute',\n inset: 0,\n borderRadius: 9999,\n backgroundColor: 'var(--lg-on)',\n opacity: checked ? 1 : 0,\n transition: reducedMotion ? 'none' : 'opacity 200ms cubic-bezier(.25,.1,.25,1)',\n }}\n />\n </span>\n </span>\n\n {/* Large white glass thumb */}\n <span ref={thumbRef} aria-hidden style={thumbStyles}>\n <span\n aria-hidden\n style={{\n position: 'absolute',\n inset: 0,\n borderRadius: 'inherit',\n backgroundColor: '#fff',\n opacity: 1 - lift * 0.85,\n }}\n />\n </span>\n </button>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n","/**\n * Slider — glisse-compatible glass thumb pill on a rail\n *\n * Thumb is 60×40 at scale 0.6 (visual ~36×24), matching glisse.\n */\nimport {\n forwardRef,\n InputHTMLAttributes,\n CSSProperties,\n useState,\n useRef,\n useCallback,\n} from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useGlisseEffect } from '../hooks/use-glisse-effect';\nimport { mapRange } from '../utils';\n\nexport interface SliderProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'defaultValue' | 'onChange'> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n showValue?: boolean;\n formatValue?: (value: number) => string;\n}\n\nconst THUMB_SHADOW = `\n 0 6px 24px rgba(0,0,0,0.2),\n inset 0 0 0 1.5px rgba(255,255,255,0.5),\n inset 0 2px 1px rgba(255,255,255,0.45),\n inset 2px 7px 24px rgba(0,0,0,0.09),\n inset -2px -7px 24px rgba(255,255,255,0.16)\n`;\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n (\n {\n className,\n style,\n value: controlledValue,\n defaultValue = 0,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n showValue = false,\n formatValue = (v) => String(Math.round(v)),\n disabled,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const [lift, setLift] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const reducedMotion = useReducedMotion();\n const thumbRef = useRef<HTMLDivElement>(null);\n\n const currentValue = value ?? defaultValue;\n const progress = mapRange(currentValue, min, max, 0, 1);\n const thumbScale = 0.6 + lift * 0.4;\n\n const { filterUrl, rimGradient, isReady } = useGlisseEffect(thumbRef, {\n enabled: !reducedMotion,\n depth: 2,\n dome: 6,\n splay: 0.4,\n shine: 0.3,\n });\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return;\n setIsDragging(true);\n if (!reducedMotion) setLift(1);\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n },\n [disabled, reducedMotion]\n );\n\n const handlePointerUp = useCallback(() => {\n setIsDragging(false);\n setLift(0);\n }, []);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(parseFloat(e.target.value));\n };\n\n const thumbStyles: CSSProperties = {\n position: 'absolute',\n top: 0,\n left: `calc((100% - 36px) * ${progress} - 12px)`,\n width: 60,\n height: 40,\n transform: `scale(${thumbScale})`,\n transformOrigin: 'center center',\n transition:\n reducedMotion || isDragging\n ? 'none'\n : 'transform 150ms cubic-bezier(.25,.1,.25,1), left 50ms linear',\n borderRadius: 9999,\n backdropFilter: `blur(${2 * (1 - lift) + 0.5 * lift}px) brightness(${1 + 0.15 * (1 - lift)}) saturate(1.5)`,\n WebkitBackdropFilter: `blur(${2 * (1 - lift) + 0.5 * lift}px) brightness(${1 + 0.15 * (1 - lift)}) saturate(1.5)`,\n boxShadow: THUMB_SHADOW,\n pointerEvents: 'none',\n ...(isReady && filterUrl\n ? { filter: filterUrl, backgroundImage: rimGradient }\n : {}),\n };\n\n return (\n <div\n className={cn('relative w-full h-10', disabled && 'opacity-35', className)}\n style={style}\n >\n {/* Rail */}\n <div\n className=\"absolute rounded-[3px] pointer-events-none\"\n style={{\n top: 17,\n left: 0,\n right: 0,\n height: 6,\n backgroundColor: 'var(--lg-rail)',\n }}\n >\n <span\n className=\"block h-full rounded-[inherit]\"\n style={{\n width: `calc((100% - 36px) * ${progress} + 18px)`,\n backgroundColor: 'var(--lg-fill)',\n transition: isDragging ? 'none' : 'width 50ms linear',\n }}\n />\n </div>\n\n {/* Glass thumb pill */}\n <div ref={thumbRef} aria-hidden style={thumbStyles}>\n <span\n aria-hidden\n style={{\n position: 'absolute',\n inset: 0,\n borderRadius: 'inherit',\n backgroundColor: '#fff',\n opacity: 1 - lift * 0.85,\n }}\n />\n </div>\n\n <input\n ref={ref}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleInputChange}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n disabled={disabled}\n className={cn(\n 'absolute inset-0 w-full h-full',\n 'm-0 opacity-0 cursor-pointer',\n disabled && 'cursor-default'\n )}\n style={{ touchAction: 'none' }}\n {...props}\n />\n\n {showValue && (\n <div\n className=\"absolute text-xs font-medium text-center pointer-events-none\"\n style={{\n left: `${progress * 100}%`,\n top: -20,\n transform: 'translateX(-50%)',\n color: 'var(--lg-foreground)',\n }}\n >\n {formatValue(currentValue)}\n </div>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = 'Slider';\n","export { cn } from './cn';\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function lerp(start: number, end: number, t: number): number {\n return start + (end - start) * t;\n}\n\nexport function mapRange(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number\n): number {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin;\n}\n\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport function throttle<T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let lastCall = 0;\n return (...args: Parameters<T>) => {\n const now = Date.now();\n if (now - lastCall >= delay) {\n lastCall = now;\n fn(...args);\n }\n };\n}\n\nexport function noop(): void {}\n\nexport function isServer(): boolean {\n return typeof window === 'undefined';\n}\n\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n","/**\n * TabBar — glisse-compatible floating glass selection lens\n */\nimport {\n forwardRef,\n HTMLAttributes,\n ReactNode,\n ElementType,\n CSSProperties,\n useState,\n useRef,\n} from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useGlisseEffect } from '../hooks/use-glisse-effect';\n\nexport interface TabBarItem {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n href?: string;\n}\n\nexport interface TabBarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n items: TabBarItem[];\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n link?: ElementType;\n showLabels?: boolean;\n}\n\nexport const TabBar = forwardRef<HTMLDivElement, TabBarProps>(\n (\n {\n className,\n style,\n items,\n value: controlledValue,\n defaultValue,\n onValueChange,\n link: LinkComponent,\n showLabels = true,\n 'aria-label': ariaLabel,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable<string | null>({\n value: controlledValue,\n defaultValue: defaultValue ?? items[0]?.value ?? null,\n onChange: onValueChange as ((value: string | null) => void) | undefined,\n });\n\n const [lift, setLift] = useState(0);\n const reducedMotion = useReducedMotion();\n const containerRef = useRef<HTMLElement>(null);\n const lensRef = useRef<HTMLDivElement>(null);\n\n const selectedIndex = items.findIndex((item) => item.value === value);\n const hasIcons = items.some((item) => item.icon);\n\n const tabWidth = hasIcons ? 72 : 84;\n const tabHeight = hasIcons ? 52 : 32;\n const inset = 4;\n const lensGrowX = hasIcons ? 24 : 27;\n const lensGrowY = hasIcons ? 16 : 20;\n\n const { filterUrl: containerFilter, rimGradient: containerRim, isReady: containerReady } =\n useGlisseEffect(containerRef, {\n enabled: !reducedMotion,\n depth: 6,\n dome: 3,\n });\n\n const { filterUrl: lensFilter, rimGradient: lensRim, isReady: lensReady } = useGlisseEffect(\n lensRef,\n {\n enabled: !reducedMotion && lift > 0.01,\n depth: 4,\n dome: 3,\n splay: 0.5,\n }\n );\n\n const handleSelect = (itemValue: string) => {\n setValue(itemValue);\n };\n\n const handlePointerDown = () => {\n if (!reducedMotion) setLift(1);\n };\n\n const handlePointerUp = () => {\n setLift(0);\n };\n\n const setRefs = (node: HTMLElement | null) => {\n (containerRef as React.MutableRefObject<HTMLElement | null>).current = node;\n if (typeof ref === 'function') ref(node as HTMLDivElement);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node as HTMLDivElement;\n };\n\n const containerStyles: CSSProperties = {\n padding: inset,\n borderRadius: tabHeight / 2 + inset,\n ...(containerReady && containerFilter\n ? { filter: containerFilter, backgroundImage: containerRim }\n : {}),\n ...style,\n };\n\n const lensStyles: CSSProperties = {\n position: 'absolute',\n top: inset - (lift * lensGrowY) / 2,\n left: inset - (lift * lensGrowX) / 2,\n width: tabWidth + lift * lensGrowX,\n height: tabHeight + lift * lensGrowY,\n borderRadius: (tabHeight + lift * lensGrowY) / 2,\n transform: `translateX(${Math.max(0, selectedIndex) * tabWidth}px)`,\n transition: reducedMotion\n ? 'none'\n : 'transform 200ms cubic-bezier(.25,.1,.25,1), width 150ms cubic-bezier(.25,.1,.25,1), height 150ms cubic-bezier(.25,.1,.25,1), top 150ms, left 150ms, background-color 140ms',\n backgroundColor: lift > 0.5 ? 'var(--lg-lens)' : 'var(--lg-selection)',\n boxShadow:\n lift > 0.5\n ? `0 ${7 / (1 + lift * 0.5)}px ${11 / (1 + lift * 0.5)}px var(--lg-lens-drop)`\n : 'none',\n pointerEvents: 'none',\n zIndex: lift > 0.5 ? 2 : 0,\n ...(lensReady && lensFilter\n ? { filter: lensFilter, backgroundImage: lensRim }\n : {}),\n };\n\n return (\n <nav\n ref={setRefs}\n role=\"tablist\"\n aria-label={ariaLabel}\n className={cn('lg-glass lg-interactive', 'relative inline-flex', className)}\n style={containerStyles}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n {...props}\n >\n {selectedIndex >= 0 && <div ref={lensRef} aria-hidden style={lensStyles} />}\n\n <div className=\"relative flex z-[1]\">\n {items.map((item) => {\n const isSelected = item.value === value;\n const TabElement = item.href && LinkComponent ? LinkComponent : 'button';\n\n return (\n <TabElement\n key={item.value}\n role=\"tab\"\n aria-selected={isSelected}\n href={item.href}\n type={TabElement === 'button' ? 'button' : undefined}\n onClick={() => handleSelect(item.value)}\n className={cn(\n 'flex flex-col items-center justify-center',\n 'border-0 bg-transparent cursor-pointer',\n 'no-underline transition-colors',\n hasIcons ? 'gap-0.5 text-[10px] font-medium' : 'text-sm'\n )}\n style={{\n width: tabWidth,\n height: tabHeight,\n color: isSelected\n ? hasIcons\n ? 'var(--lg-fill)'\n : 'var(--lg-foreground)'\n : 'var(--lg-muted)',\n }}\n >\n {item.icon && (\n <span className=\"flex items-center justify-center w-[26px] h-[26px]\">\n {item.icon}\n </span>\n )}\n {(showLabels || !item.icon) && <span className=\"block\">{item.label}</span>}\n </TabElement>\n );\n })}\n </div>\n </nav>\n );\n }\n);\n\nTabBar.displayName = 'TabBar';\n","import { forwardRef, HTMLAttributes, ReactNode, useRef, useState, useCallback, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface SegmentedControlItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n items: SegmentedControlItem[];\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst sizeConfig = {\n sm: { height: 28, padding: 2, fontSize: 12, segmentWidth: 72 },\n md: { height: 32, padding: 2, fontSize: 13, segmentWidth: 84 },\n lg: { height: 40, padding: 3, fontSize: 14, segmentWidth: 100 },\n};\n\nexport const SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n (\n {\n className,\n style,\n items,\n value: controlledValue,\n defaultValue,\n onValueChange,\n size = 'md',\n 'aria-label': ariaLabel,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable<string | null>({\n value: controlledValue,\n defaultValue: defaultValue ?? items[0]?.value ?? null,\n onChange: onValueChange as ((value: string | null) => void) | undefined,\n });\n\n const [lift, setLift] = useState(0);\n const reducedMotion = useReducedMotion();\n const config = sizeConfig[size];\n\n const selectedIndex = items.findIndex(item => item.value === value);\n\n const handleSelect = (itemValue: string, disabled?: boolean) => {\n if (disabled) return;\n setValue(itemValue);\n };\n\n const handlePointerDown = () => {\n if (!reducedMotion) setLift(1);\n };\n\n const handlePointerUp = () => {\n setLift(0);\n };\n\n const containerStyles: CSSProperties = {\n height: config.height,\n borderRadius: config.height / 2,\n ...style,\n };\n\n const thumbStyles: CSSProperties = {\n '--lg-lift': lift,\n position: 'absolute',\n top: config.padding,\n left: config.padding,\n width: config.segmentWidth - config.padding * 2,\n height: config.height - config.padding * 2,\n borderRadius: (config.height - config.padding * 2) / 2,\n transform: `translateX(${selectedIndex * config.segmentWidth}px) scale(${1 + lift * 0.1}, ${1 + lift * 0.05})`,\n transition: reducedMotion ? 'none' : 'transform 200ms var(--lg-ease-spring), opacity 150ms var(--lg-ease)',\n background: 'var(--lg-segment-thumb)',\n boxShadow: lift > 0 ? '0 4px 12px rgb(0 0 0 / 0.15)' : '0 1px 3px rgb(0 0 0 / 0.1)',\n } as CSSProperties;\n\n return (\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n className={cn(\n 'lg-glass lg-interactive',\n 'relative inline-flex',\n className\n )}\n style={containerStyles}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n {...props}\n >\n {/* Background */}\n <div\n className=\"absolute inset-0 rounded-full\"\n style={{\n background: 'var(--lg-segment-track)',\n }}\n />\n\n {/* Thumb */}\n {selectedIndex >= 0 && (\n <div style={thumbStyles} />\n )}\n\n {/* Segments */}\n <div className=\"relative flex z-10\">\n {items.map((item, index) => (\n <button\n key={item.value}\n role=\"radio\"\n aria-checked={item.value === value}\n disabled={item.disabled}\n onClick={() => handleSelect(item.value, item.disabled)}\n className={cn(\n 'flex items-center justify-center',\n 'border-0 bg-transparent cursor-pointer',\n 'transition-colors',\n item.disabled && 'opacity-35 cursor-default'\n )}\n style={{\n width: config.segmentWidth,\n height: config.height,\n fontSize: config.fontSize,\n fontWeight: item.value === value ? 500 : 400,\n color: 'var(--lg-segment-label)',\n }}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n );\n }\n);\n\nSegmentedControl.displayName = 'SegmentedControl';\n","import { forwardRef, HTMLAttributes, ReactNode, createContext, useContext, useState, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useControllable } from '../hooks/use-controllable';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\ninterface TabsContextValue {\n value: string | undefined;\n onChange: (value: string) => void;\n baseId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n children,\n ...props\n },\n ref\n ) => {\n const [value, setValue] = useControllable({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n\n const baseId = useId();\n\n return (\n <TabsContext.Provider value={{ value, onChange: setValue, baseId }}>\n <div\n ref={ref}\n className={cn(\n orientation === 'vertical' && 'flex',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n }\n);\n\nTabs.displayName = 'Tabs';\n\nexport interface TabsListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"tablist\"\n className={cn(\n 'lg-glass inline-flex items-center gap-1 p-1 rounded-lg',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTabsList.displayName = 'TabsList';\n\nexport interface TabsTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const TabsTrigger = forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, disabled = false, children, ...props }, ref) => {\n const context = useContext(TabsContext);\n if (!context) throw new Error('TabsTrigger must be used within Tabs');\n\n const { value: selectedValue, onChange, baseId } = context;\n const isSelected = selectedValue === value;\n const reducedMotion = useReducedMotion();\n\n return (\n <button\n ref={ref}\n role=\"tab\"\n id={`${baseId}-trigger-${value}`}\n aria-selected={isSelected}\n aria-controls={`${baseId}-content-${value}`}\n tabIndex={isSelected ? 0 : -1}\n disabled={disabled}\n onClick={() => !disabled && onChange(value)}\n className={cn(\n 'px-3 py-1.5 rounded-md text-sm font-medium',\n 'border-0 bg-transparent cursor-pointer',\n 'transition-colors',\n isSelected \n ? 'bg-white text-[var(--lg-foreground)] shadow-sm' \n : 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]',\n disabled && 'opacity-50 cursor-default',\n className\n )}\n style={{\n transition: reducedMotion ? 'none' : 'all 150ms var(--lg-ease)',\n }}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nTabsTrigger.displayName = 'TabsTrigger';\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children: ReactNode;\n}\n\nexport const TabsContent = forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, children, ...props }, ref) => {\n const context = useContext(TabsContext);\n if (!context) throw new Error('TabsContent must be used within Tabs');\n\n const { value: selectedValue, baseId } = context;\n const isSelected = selectedValue === value;\n const reducedMotion = useReducedMotion();\n\n if (!isSelected) return null;\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`${baseId}-content-${value}`}\n aria-labelledby={`${baseId}-trigger-${value}`}\n tabIndex={0}\n className={cn(\n 'mt-3 outline-none',\n !reducedMotion && 'animate-[lg-fade-in_150ms_ease-out]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTabsContent.displayName = 'TabsContent';\n","import { forwardRef, HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface NavbarProps extends HTMLAttributes<HTMLElement> {\n logo?: ReactNode;\n children?: ReactNode;\n actions?: ReactNode;\n sticky?: boolean;\n bordered?: boolean;\n}\n\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n (\n {\n className,\n style,\n logo,\n children,\n actions,\n sticky = false,\n bordered = true,\n ...props\n },\n ref\n ) => {\n return (\n <header\n ref={ref}\n className={cn(\n 'lg-glass lg-text',\n 'flex items-center justify-between gap-4',\n 'px-4 h-16',\n sticky && 'sticky top-0 z-40',\n bordered && 'border-b border-[var(--lg-separator)]',\n className\n )}\n style={style}\n {...props}\n >\n {logo && (\n <div className=\"flex-shrink-0\">\n {logo}\n </div>\n )}\n\n {children && (\n <nav className=\"flex-1 flex items-center gap-1\">\n {children}\n </nav>\n )}\n\n {actions && (\n <div className=\"flex-shrink-0 flex items-center gap-2\">\n {actions}\n </div>\n )}\n </header>\n );\n }\n);\n\nNavbar.displayName = 'Navbar';\n\nexport interface NavbarLinkProps extends HTMLAttributes<HTMLAnchorElement> {\n href: string;\n active?: boolean;\n children: ReactNode;\n}\n\nexport const NavbarLink = forwardRef<HTMLAnchorElement, NavbarLinkProps>(\n ({ className, href, active = false, children, ...props }, ref) => {\n return (\n <a\n ref={ref}\n href={href}\n className={cn(\n 'px-3 py-2 rounded-lg text-sm font-medium',\n 'transition-colors no-underline',\n active\n ? 'bg-[var(--lg-accent-light)] text-[var(--lg-accent)]'\n : 'text-[var(--lg-foreground-secondary)] hover:bg-[var(--lg-glass)] hover:text-[var(--lg-foreground)]',\n className\n )}\n aria-current={active ? 'page' : undefined}\n {...props}\n >\n {children}\n </a>\n );\n }\n);\n\nNavbarLink.displayName = 'NavbarLink';\n","import { forwardRef, HTMLAttributes, ReactNode, createContext, useContext, useState, useCallback } from 'react';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\ninterface SidebarContextValue {\n isCollapsed: boolean;\n toggleCollapsed: () => void;\n setCollapsed: (collapsed: boolean) => void;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nexport function useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider');\n }\n return context;\n}\n\nexport interface SidebarProviderProps {\n children: ReactNode;\n defaultCollapsed?: boolean;\n}\n\nexport function SidebarProvider({ children, defaultCollapsed = false }: SidebarProviderProps) {\n const [isCollapsed, setCollapsed] = useState(defaultCollapsed);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed(prev => !prev);\n }, []);\n\n return (\n <SidebarContext.Provider value={{ isCollapsed, toggleCollapsed, setCollapsed }}>\n {children}\n </SidebarContext.Provider>\n );\n}\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n width?: number;\n collapsedWidth?: number;\n}\n\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(\n (\n {\n className,\n style,\n children,\n width = 260,\n collapsedWidth = 72,\n ...props\n },\n ref\n ) => {\n const { isCollapsed } = useSidebar();\n const reducedMotion = useReducedMotion();\n\n return (\n <aside\n ref={ref}\n className={cn(\n 'lg-glass lg-text',\n 'h-full flex flex-col',\n 'border-r border-[var(--lg-separator)]',\n className\n )}\n style={{\n width: isCollapsed ? collapsedWidth : width,\n transition: reducedMotion ? 'none' : 'width 200ms var(--lg-ease)',\n ...style,\n }}\n {...props}\n >\n {children}\n </aside>\n );\n }\n);\n\nSidebar.displayName = 'Sidebar';\n\nexport interface SidebarHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const SidebarHeader = forwardRef<HTMLDivElement, SidebarHeaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center h-16 px-4',\n 'border-b border-[var(--lg-separator)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarHeader.displayName = 'SidebarHeader';\n\nexport interface SidebarContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const SidebarContent = forwardRef<HTMLDivElement, SidebarContentProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex-1 overflow-auto p-3', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nSidebarContent.displayName = 'SidebarContent';\n\nexport interface SidebarItemProps {\n icon?: ReactNode;\n label: string;\n active?: boolean;\n href?: string;\n onClick?: () => void;\n className?: string;\n}\n\nexport const SidebarItem = forwardRef<HTMLButtonElement, SidebarItemProps>(\n ({ className, icon, label, active = false, href, onClick, ...props }, ref) => {\n const { isCollapsed } = useSidebar();\n\n const sharedProps = {\n className: cn(\n 'w-full flex items-center gap-3 px-3 py-2.5 rounded-lg',\n 'border-0 text-left text-sm font-medium',\n 'transition-colors cursor-pointer no-underline',\n active\n ? 'bg-[var(--lg-accent-light)] text-[var(--lg-accent)]'\n : 'bg-transparent text-[var(--lg-foreground-secondary)] hover:bg-[var(--lg-glass)] hover:text-[var(--lg-foreground)]',\n isCollapsed && 'justify-center px-0',\n className\n ),\n title: isCollapsed ? label : undefined,\n };\n\n const content = (\n <>\n {icon && (\n <span className=\"flex-shrink-0 w-5 h-5\">{icon}</span>\n )}\n {!isCollapsed && <span className=\"truncate\">{label}</span>}\n </>\n );\n\n if (href) {\n return (\n <a href={href} onClick={onClick} {...sharedProps} {...props}>\n {content}\n </a>\n );\n }\n\n return (\n <button ref={ref} onClick={onClick} {...sharedProps} {...props}>\n {content}\n </button>\n );\n }\n);\n\nSidebarItem.displayName = 'SidebarItem';\n\nexport interface SidebarGroupProps extends HTMLAttributes<HTMLDivElement> {\n title?: string;\n children: ReactNode;\n}\n\nexport const SidebarGroup = forwardRef<HTMLDivElement, SidebarGroupProps>(\n ({ className, title, children, ...props }, ref) => {\n const { isCollapsed } = useSidebar();\n\n return (\n <div ref={ref} className={cn('mb-4', className)} {...props}>\n {title && !isCollapsed && (\n <div className=\"px-3 py-2 text-xs font-semibold text-[var(--lg-muted)] uppercase tracking-wider\">\n {title}\n </div>\n )}\n <div className=\"space-y-1\">{children}</div>\n </div>\n );\n }\n);\n\nSidebarGroup.displayName = 'SidebarGroup';\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface DockItem {\n id: string;\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n href?: string;\n badge?: number;\n}\n\nexport interface DockProps extends HTMLAttributes<HTMLDivElement> {\n items: DockItem[];\n magnification?: number;\n distance?: number;\n direction?: 'bottom' | 'left' | 'right';\n}\n\nexport const Dock = forwardRef<HTMLDivElement, DockProps>(\n (\n {\n className,\n style,\n items,\n magnification = 1.5,\n distance = 100,\n direction = 'bottom',\n ...props\n },\n ref\n ) => {\n const [mouseX, setMouseX] = useState<number | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (reducedMotion) return;\n const rect = containerRef.current?.getBoundingClientRect();\n if (rect) {\n setMouseX(e.clientX - rect.left);\n }\n };\n\n const handleMouseLeave = () => {\n setMouseX(null);\n };\n\n const getScale = (index: number): number => {\n if (mouseX === null || reducedMotion) return 1;\n\n const iconSize = 48;\n const gap = 8;\n const totalWidth = items.length * (iconSize + gap) - gap;\n const startX = (containerRef.current?.offsetWidth || 0) / 2 - totalWidth / 2;\n const iconCenter = startX + index * (iconSize + gap) + iconSize / 2;\n\n const distanceFromMouse = Math.abs(mouseX - iconCenter);\n if (distanceFromMouse > distance) return 1;\n\n const scale = 1 + (magnification - 1) * (1 - distanceFromMouse / distance);\n return scale;\n };\n\n const isHorizontal = direction === 'bottom';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'lg-glass lg-glass-elevated',\n 'inline-flex items-end gap-2 p-2',\n !isHorizontal && 'flex-col items-center',\n className\n )}\n style={{\n borderRadius: 20,\n ...style,\n }}\n {...props}\n >\n <div\n ref={containerRef}\n className={cn(\n 'flex items-end gap-2',\n !isHorizontal && 'flex-col items-center'\n )}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {items.map((item, index) => {\n const scale = getScale(index);\n const Element = item.href ? 'a' : 'button';\n\n const itemStyles: CSSProperties = {\n transform: `scale(${scale})`,\n transformOrigin: isHorizontal ? 'bottom center' : \n direction === 'left' ? 'center right' : 'center left',\n transition: reducedMotion ? 'none' : 'transform 150ms var(--lg-ease-spring)',\n };\n\n return (\n <Element\n key={item.id}\n href={item.href}\n onClick={item.onClick}\n className={cn(\n 'lg-glass lg-interactive lg-focus-ring',\n 'relative flex items-center justify-center',\n 'w-12 h-12 p-0 border-0 rounded-xl',\n 'text-[var(--lg-foreground)]',\n 'hover:bg-[var(--lg-glass-active)] transition-colors'\n )}\n style={itemStyles}\n title={item.label}\n aria-label={item.label}\n >\n <span className=\"w-6 h-6\">{item.icon}</span>\n {item.badge !== undefined && item.badge > 0 && (\n <span\n className=\"absolute -top-1 -right-1 flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full bg-[var(--lg-destructive)] text-white text-[10px] font-medium\"\n >\n {item.badge > 99 ? '99+' : item.badge}\n </span>\n )}\n </Element>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nDock.displayName = 'Dock';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties, useEffect, useCallback, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useGlisseEffect } from '../hooks/use-glisse-effect';\n\nexport interface ModalProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n title?: string;\n description?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n showCloseButton?: boolean;\n /** Disable glisse refraction effect. Defaults to false (refraction enabled). */\n disableRefraction?: boolean;\n}\n\nconst sizeConfig = {\n sm: { maxWidth: 400 },\n md: { maxWidth: 500 },\n lg: { maxWidth: 640 },\n xl: { maxWidth: 800 },\n full: { maxWidth: '90vw' },\n};\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n className,\n style,\n open,\n onOpenChange,\n children,\n title,\n description,\n size = 'md',\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showCloseButton = true,\n disableRefraction = false,\n ...props\n },\n ref\n ) => {\n const reducedMotion = useReducedMotion();\n const localRef = useRef<HTMLDivElement>(null);\n const combinedRef = (ref as React.RefObject<HTMLDivElement>) || localRef;\n const config = sizeConfig[size];\n\n const { filterUrl, rimGradient, isReady } = useGlisseEffect(combinedRef, {\n enabled: open && !disableRefraction && !reducedMotion,\n });\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n handleClose();\n }\n };\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (closeOnEscape && e.key === 'Escape') {\n handleClose();\n }\n }, [closeOnEscape, handleClose]);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown);\n document.body.style.overflow = 'hidden';\n combinedRef.current?.focus();\n }\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.body.style.overflow = '';\n };\n }, [open, handleKeyDown, combinedRef]);\n\n if (!open) return null;\n\n const modalStyles: CSSProperties = {\n maxWidth: config.maxWidth,\n borderRadius: 24,\n ...style,\n };\n\n if (isReady && filterUrl) {\n modalStyles.filter = filterUrl;\n modalStyles.backgroundImage = rimGradient;\n }\n\n const modalContent = (\n <div\n className={cn(\n 'fixed inset-0 z-50 flex items-center justify-center p-4',\n 'bg-black/40 backdrop-blur-sm',\n !reducedMotion && 'animate-[lg-fade-in_200ms_ease-out]'\n )}\n onClick={handleOverlayClick}\n aria-modal=\"true\"\n role=\"dialog\"\n aria-labelledby={title ? 'modal-title' : undefined}\n aria-describedby={description ? 'modal-description' : undefined}\n >\n <div\n ref={combinedRef}\n tabIndex={-1}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'relative w-full outline-none',\n !reducedMotion && 'animate-[lg-scale-in_200ms_var(--lg-ease-spring)]',\n className\n )}\n style={modalStyles}\n {...props}\n >\n {/* Close button */}\n {showCloseButton && (\n <button\n onClick={handleClose}\n className={cn(\n 'absolute top-4 right-4',\n 'w-8 h-8 rounded-full',\n 'flex items-center justify-center',\n 'bg-[var(--lg-glass)] hover:bg-[var(--lg-glass-active)]',\n 'border-0 cursor-pointer transition-colors',\n 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n\n {/* Header */}\n {(title || description) && (\n <div className=\"px-6 pt-6 pb-2\">\n {title && (\n <h2\n id=\"modal-title\"\n className=\"text-lg font-semibold m-0\"\n style={{ color: 'var(--lg-foreground)' }}\n >\n {title}\n </h2>\n )}\n {description && (\n <p\n id=\"modal-description\"\n className=\"text-sm mt-1 m-0\"\n style={{ color: 'var(--lg-muted)' }}\n >\n {description}\n </p>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"p-6\">\n {children}\n </div>\n </div>\n </div>\n );\n\n return createPortal(modalContent, document.body);\n }\n);\n\nModal.displayName = 'Modal';\n\nexport interface ModalFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex items-center justify-end gap-3',\n 'pt-4 border-t border-[var(--lg-separator)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nModalFooter.displayName = 'ModalFooter';\n","import { forwardRef, HTMLAttributes, ReactNode, useEffect, useCallback, useRef, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useGlisseEffect } from '../hooks/use-glisse-effect';\n\nexport interface SheetProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n side?: 'bottom' | 'top' | 'left' | 'right';\n size?: 'sm' | 'md' | 'lg' | 'full';\n showHandle?: boolean;\n /** Disable glisse refraction effect. Defaults to false (refraction enabled). */\n disableRefraction?: boolean;\n}\n\nconst sizeConfig = {\n sm: { width: 320, height: 300 },\n md: { width: 400, height: 400 },\n lg: { width: 500, height: 500 },\n full: { width: '100%', height: '85vh' },\n};\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(\n (\n {\n className,\n style,\n open,\n onOpenChange,\n children,\n side = 'bottom',\n size = 'md',\n showHandle = true,\n disableRefraction = false,\n ...props\n },\n ref\n ) => {\n const reducedMotion = useReducedMotion();\n const localRef = useRef<HTMLDivElement>(null);\n const combinedRef = (ref as React.RefObject<HTMLDivElement>) || localRef;\n const config = sizeConfig[size];\n\n const { filterUrl, rimGradient, isReady } = useGlisseEffect(combinedRef, {\n enabled: open && !disableRefraction && !reducedMotion,\n });\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n handleClose();\n }\n };\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleClose();\n }\n }, [handleClose]);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.body.style.overflow = '';\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n const sheetStyles: CSSProperties = {\n position: 'fixed',\n zIndex: 50,\n ...(side === 'bottom' && {\n bottom: 0,\n left: 0,\n right: 0,\n height: typeof config.height === 'number' ? config.height : config.height,\n maxHeight: '90vh',\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n }),\n ...(side === 'top' && {\n top: 0,\n left: 0,\n right: 0,\n height: typeof config.height === 'number' ? config.height : config.height,\n maxHeight: '90vh',\n borderBottomLeftRadius: 20,\n borderBottomRightRadius: 20,\n }),\n ...(side === 'left' && {\n top: 0,\n left: 0,\n bottom: 0,\n width: typeof config.width === 'number' ? config.width : config.width,\n maxWidth: '90vw',\n borderTopRightRadius: 20,\n borderBottomRightRadius: 20,\n }),\n ...(side === 'right' && {\n top: 0,\n right: 0,\n bottom: 0,\n width: typeof config.width === 'number' ? config.width : config.width,\n maxWidth: '90vw',\n borderTopLeftRadius: 20,\n borderBottomLeftRadius: 20,\n }),\n ...style,\n };\n\n if (isReady && filterUrl) {\n sheetStyles.filter = filterUrl;\n sheetStyles.backgroundImage = rimGradient;\n }\n\n const animationClass = reducedMotion ? '' : {\n bottom: 'animate-[lg-slide-up_300ms_var(--lg-ease-spring)]',\n top: 'animate-[lg-slide-down_300ms_var(--lg-ease-spring)]',\n left: 'animate-[lg-slide-right_300ms_var(--lg-ease-spring)]',\n right: 'animate-[lg-slide-left_300ms_var(--lg-ease-spring)]',\n }[side];\n\n const sheetContent = (\n <div\n className={cn(\n 'fixed inset-0 z-50',\n 'bg-black/40 backdrop-blur-sm',\n !reducedMotion && 'animate-[lg-fade-in_200ms_ease-out]'\n )}\n onClick={handleOverlayClick}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n <div\n ref={combinedRef}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'overflow-auto',\n animationClass,\n className\n )}\n style={sheetStyles}\n {...props}\n >\n {showHandle && (side === 'bottom' || side === 'top') && (\n <div className=\"flex justify-center py-3\">\n <div\n className=\"w-10 h-1 rounded-full bg-[var(--lg-muted)] opacity-50\"\n />\n </div>\n )}\n <div className=\"p-4\">\n {children}\n </div>\n </div>\n </div>\n );\n\n return createPortal(sheetContent, document.body);\n }\n);\n\nSheet.displayName = 'Sheet';\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface MenuItem {\n label: ReactNode;\n icon?: ReactNode;\n onSelect?: () => void;\n destructive?: boolean;\n disabled?: boolean;\n shortcut?: string;\n}\n\nexport type MenuEntry = MenuItem | 'separator';\n\nexport interface MenuProps extends HTMLAttributes<HTMLDivElement> {\n items: MenuEntry[];\n trigger: ReactNode;\n align?: 'start' | 'end';\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(\n (\n {\n className,\n items,\n trigger,\n align = 'end',\n 'aria-label': ariaLabel,\n ...props\n },\n ref\n ) => {\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n\n const updatePosition = () => {\n if (!triggerRef.current || !menuRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const menuRect = menuRef.current.getBoundingClientRect();\n\n let left = align === 'end' \n ? triggerRect.right - menuRect.width \n : triggerRect.left;\n \n if (left < 8) left = 8;\n if (left + menuRect.width > window.innerWidth - 8) {\n left = window.innerWidth - menuRect.width - 8;\n }\n\n setPosition({\n top: triggerRect.bottom + window.scrollY + 4,\n left: left + window.scrollX,\n });\n };\n\n useEffect(() => {\n if (isOpen) {\n updatePosition();\n \n const handleClickOutside = (e: MouseEvent) => {\n if (\n !triggerRef.current?.contains(e.target as Node) &&\n !menuRef.current?.contains(e.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setIsOpen(false);\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }\n }, [isOpen]);\n\n const handleItemClick = (item: MenuItem) => {\n if (item.disabled) return;\n item.onSelect?.();\n setIsOpen(false);\n };\n\n return (\n <div ref={ref} className={cn('relative inline-flex', className)} {...props}>\n <button\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n className=\"lg-glass lg-interactive lg-focus-ring w-10 h-10 flex items-center justify-center rounded-full border-0\"\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n aria-haspopup=\"menu\"\n >\n {trigger}\n </button>\n\n {isOpen && typeof document !== 'undefined' && createPortal(\n <div\n ref={menuRef}\n role=\"menu\"\n aria-label={ariaLabel}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 min-w-[180px] p-1.5',\n !reducedMotion && 'animate-[lg-scale-in_150ms_var(--lg-ease-spring)]'\n )}\n style={{\n top: position.top,\n left: position.left,\n borderRadius: 12,\n transformOrigin: align === 'end' ? 'top right' : 'top left',\n }}\n >\n {items.map((item, index) => {\n if (item === 'separator') {\n return (\n <div\n key={`sep-${index}`}\n className=\"my-1.5 mx-2 border-t border-[var(--lg-separator)]\"\n />\n );\n }\n\n return (\n <button\n key={index}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => handleItemClick(item)}\n className={cn(\n 'w-full flex items-center gap-2.5 px-3 py-2 rounded-lg',\n 'border-0 bg-transparent text-left text-sm cursor-pointer',\n 'transition-colors',\n item.destructive && 'text-[var(--lg-destructive)]',\n item.disabled && 'opacity-40 cursor-default',\n !item.disabled && 'hover:bg-[var(--lg-highlight)]'\n )}\n style={{ color: item.destructive ? undefined : 'var(--lg-foreground)' }}\n >\n {item.icon && (\n <span className=\"flex-shrink-0 w-4 h-4\">{item.icon}</span>\n )}\n <span className=\"flex-1\">{item.label}</span>\n {item.shortcut && (\n <span className=\"text-xs text-[var(--lg-muted)]\">{item.shortcut}</span>\n )}\n </button>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n }\n);\n\nMenu.displayName = 'Menu';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties, useState, useRef, useEffect, cloneElement, isValidElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface TooltipProps {\n content: ReactNode;\n children: ReactNode;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n delay?: number;\n disabled?: boolean;\n}\n\nexport function Tooltip({\n content,\n children,\n side = 'top',\n align = 'center',\n delay = 200,\n disabled = false,\n}: TooltipProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>();\n const reducedMotion = useReducedMotion();\n\n const updatePosition = () => {\n if (!triggerRef.current || !tooltipRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const gap = 8;\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case 'top':\n top = triggerRect.top - tooltipRect.height - gap;\n break;\n case 'bottom':\n top = triggerRect.bottom + gap;\n break;\n case 'left':\n left = triggerRect.left - tooltipRect.width - gap;\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2;\n break;\n case 'right':\n left = triggerRect.right + gap;\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = triggerRect.left;\n break;\n case 'center':\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2;\n break;\n case 'end':\n left = triggerRect.right - tooltipRect.width;\n break;\n }\n }\n\n setPosition({ top: top + window.scrollY, left: left + window.scrollX });\n };\n\n useEffect(() => {\n if (isOpen) {\n updatePosition();\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n }\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [isOpen]);\n\n const handleMouseEnter = () => {\n if (disabled) return;\n timeoutRef.current = setTimeout(() => setIsOpen(true), delay);\n };\n\n const handleMouseLeave = () => {\n clearTimeout(timeoutRef.current);\n setIsOpen(false);\n };\n\n const child = isValidElement(children) ? children : <span>{children}</span>;\n\n const trigger = cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleMouseEnter,\n onBlur: handleMouseLeave,\n });\n\n return (\n <>\n {trigger}\n {isOpen && typeof document !== 'undefined' && createPortal(\n <div\n ref={tooltipRef}\n role=\"tooltip\"\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 px-3 py-1.5 text-sm',\n !reducedMotion && 'animate-[lg-fade-in_150ms_ease-out]'\n )}\n style={{\n top: position.top,\n left: position.left,\n borderRadius: 8,\n maxWidth: 300,\n }}\n >\n {content}\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties, useState, useEffect, createContext, useContext, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface ToastProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'success' | 'warning' | 'error' | 'info';\n title?: string;\n description?: string;\n icon?: ReactNode;\n action?: ReactNode;\n duration?: number;\n onClose?: () => void;\n}\n\nconst variantIcons = {\n default: null,\n success: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-success)\" strokeWidth=\"2\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22,4 12,14.01 9,11.01\" />\n </svg>\n ),\n warning: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-warning)\" strokeWidth=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n error: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-destructive)\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n ),\n info: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-info)\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n ),\n};\n\nexport const Toast = forwardRef<HTMLDivElement, ToastProps>(\n (\n {\n className,\n style,\n variant = 'default',\n title,\n description,\n icon,\n action,\n duration = 5000,\n onClose,\n children,\n ...props\n },\n ref\n ) => {\n const reducedMotion = useReducedMotion();\n const [isLeaving, setIsLeaving] = useState(false);\n\n useEffect(() => {\n if (duration > 0) {\n const timer = setTimeout(() => {\n setIsLeaving(true);\n setTimeout(() => onClose?.(), reducedMotion ? 0 : 200);\n }, duration);\n return () => clearTimeout(timer);\n }\n }, [duration, onClose, reducedMotion]);\n\n const handleClose = () => {\n setIsLeaving(true);\n setTimeout(() => onClose?.(), reducedMotion ? 0 : 200);\n };\n\n const displayIcon = icon ?? variantIcons[variant];\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'flex items-start gap-3 p-4 min-w-[300px] max-w-[420px]',\n !reducedMotion && (isLeaving ? 'animate-[lg-slide-down_200ms_ease-in_forwards]' : 'animate-[lg-slide-up_200ms_ease-out]'),\n className\n )}\n style={{\n borderRadius: 16,\n ...style,\n }}\n {...props}\n >\n {displayIcon && (\n <span className=\"flex-shrink-0 mt-0.5\">{displayIcon}</span>\n )}\n\n <div className=\"flex-1 min-w-0\">\n {title && (\n <div className=\"font-medium text-sm\" style={{ color: 'var(--lg-foreground)' }}>\n {title}\n </div>\n )}\n {description && (\n <div className=\"text-sm mt-0.5\" style={{ color: 'var(--lg-muted)' }}>\n {description}\n </div>\n )}\n {children}\n </div>\n\n {action && <div className=\"flex-shrink-0\">{action}</div>}\n\n <button\n onClick={handleClose}\n className={cn(\n 'flex-shrink-0 w-6 h-6 rounded-full',\n 'flex items-center justify-center',\n 'bg-transparent hover:bg-[var(--lg-glass)]',\n 'border-0 cursor-pointer transition-colors',\n 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n );\n }\n);\n\nToast.displayName = 'Toast';\n\ninterface ToastData extends Omit<ToastProps, 'onClose'> {\n id: string;\n}\n\ninterface ToastContextValue {\n toasts: ToastData[];\n toast: (props: Omit<ToastData, 'id'>) => string;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nlet toastId = 0;\n\nexport function ToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n\n const toast = useCallback((props: Omit<ToastData, 'id'>) => {\n const id = `toast-${++toastId}`;\n setToasts(prev => [...prev, { ...props, id }]);\n return id;\n }, []);\n\n const dismiss = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const dismissAll = useCallback(() => {\n setToasts([]);\n }, []);\n\n return (\n <ToastContext.Provider value={{ toasts, toast, dismiss, dismissAll }}>\n {children}\n {typeof document !== 'undefined' && createPortal(\n <div className=\"fixed bottom-4 right-4 z-50 flex flex-col gap-2\">\n {toasts.map(t => (\n <Toast key={t.id} {...t} onClose={() => dismiss(t.id)} />\n ))}\n </div>,\n document.body\n )}\n </ToastContext.Provider>\n );\n}\n\nexport function useToast(): Omit<ToastContextValue, 'toasts'> {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n const { toast, dismiss, dismissAll } = context;\n return { toast, dismiss, dismissAll };\n}\n","import { forwardRef, HTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface AlertProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'info' | 'success' | 'warning' | 'error';\n title?: string;\n icon?: ReactNode;\n action?: ReactNode;\n onClose?: () => void;\n}\n\nconst variantConfig = {\n default: {\n icon: null,\n borderColor: 'var(--lg-edge)',\n },\n info: {\n icon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-info)\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n ),\n borderColor: 'var(--lg-info)',\n },\n success: {\n icon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-success)\" strokeWidth=\"2\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22,4 12,14.01 9,11.01\" />\n </svg>\n ),\n borderColor: 'var(--lg-success)',\n },\n warning: {\n icon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-warning)\" strokeWidth=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n borderColor: 'var(--lg-warning)',\n },\n error: {\n icon: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-destructive)\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n ),\n borderColor: 'var(--lg-destructive)',\n },\n};\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n style,\n variant = 'default',\n title,\n icon,\n action,\n onClose,\n children,\n ...props\n },\n ref\n ) => {\n const config = variantConfig[variant];\n const displayIcon = icon ?? config.icon;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'lg-glass lg-text',\n 'relative flex gap-3 p-4',\n className\n )}\n style={{\n borderRadius: 12,\n borderLeft: `3px solid ${config.borderColor}`,\n ...style,\n }}\n {...props}\n >\n {displayIcon && (\n <span className=\"flex-shrink-0 mt-0.5\">{displayIcon}</span>\n )}\n\n <div className=\"flex-1 min-w-0\">\n {title && (\n <div className=\"font-medium text-sm mb-1\" style={{ color: 'var(--lg-foreground)' }}>\n {title}\n </div>\n )}\n <div className=\"text-sm\" style={{ color: 'var(--lg-foreground-secondary)' }}>\n {children}\n </div>\n </div>\n\n {action && <div className=\"flex-shrink-0\">{action}</div>}\n\n {onClose && (\n <button\n onClick={onClose}\n className={cn(\n 'absolute top-2 right-2',\n 'w-6 h-6 rounded-full',\n 'flex items-center justify-center',\n 'bg-transparent hover:bg-[var(--lg-glass)]',\n 'border-0 cursor-pointer transition-colors',\n 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n }\n);\n\nAlert.displayName = 'Alert';\n","import { forwardRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\nimport { clamp } from '../utils';\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n value?: number;\n max?: number;\n variant?: 'linear' | 'circular';\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n showValue?: boolean;\n indeterminate?: boolean;\n}\n\nconst linearSizeConfig = {\n sm: { height: 4, borderRadius: 2 },\n md: { height: 6, borderRadius: 3 },\n lg: { height: 8, borderRadius: 4 },\n};\n\nconst circularSizeConfig = {\n sm: { size: 24, strokeWidth: 3 },\n md: { size: 40, strokeWidth: 4 },\n lg: { size: 56, strokeWidth: 5 },\n};\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n style,\n value = 0,\n max = 100,\n variant = 'linear',\n size = 'md',\n color,\n showValue = false,\n indeterminate = false,\n ...props\n },\n ref\n ) => {\n const percentage = clamp((value / max) * 100, 0, 100);\n const fillColor = color || 'var(--lg-fill)';\n\n if (variant === 'circular') {\n const config = circularSizeConfig[size];\n const radius = (config.size - config.strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const strokeDashoffset = circumference - (percentage / 100) * circumference;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={cn('relative inline-flex items-center justify-center', className)}\n style={{ width: config.size, height: config.size, ...style }}\n {...props}\n >\n <svg\n width={config.size}\n height={config.size}\n className={indeterminate ? 'animate-spin' : undefined}\n >\n {/* Background circle */}\n <circle\n cx={config.size / 2}\n cy={config.size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"var(--lg-rail)\"\n strokeWidth={config.strokeWidth}\n />\n {/* Progress circle */}\n <circle\n cx={config.size / 2}\n cy={config.size / 2}\n r={radius}\n fill=\"none\"\n stroke={fillColor}\n strokeWidth={config.strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={indeterminate ? circumference * 0.75 : strokeDashoffset}\n transform={`rotate(-90 ${config.size / 2} ${config.size / 2})`}\n style={{\n transition: indeterminate ? 'none' : 'stroke-dashoffset 300ms var(--lg-ease)',\n }}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n className=\"absolute text-xs font-medium\"\n style={{ color: 'var(--lg-foreground)' }}\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n }\n\n const config = linearSizeConfig[size];\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n className={cn('w-full', className)}\n style={style}\n {...props}\n >\n <div\n className=\"w-full overflow-hidden\"\n style={{\n height: config.height,\n borderRadius: config.borderRadius,\n backgroundColor: 'var(--lg-rail)',\n }}\n >\n <div\n className={indeterminate ? 'animate-pulse' : undefined}\n style={{\n width: indeterminate ? '50%' : `${percentage}%`,\n height: '100%',\n borderRadius: config.borderRadius,\n backgroundColor: fillColor,\n transition: indeterminate ? 'none' : 'width 300ms var(--lg-ease)',\n ...(indeterminate && {\n animation: 'lg-progress-indeterminate 1.5s ease-in-out infinite',\n }),\n }}\n />\n </div>\n {showValue && !indeterminate && (\n <span\n className=\"block mt-1 text-xs font-medium text-right\"\n style={{ color: 'var(--lg-muted)' }}\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n }\n);\n\nProgress.displayName = 'Progress';\n","import { forwardRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | number;\n color?: string;\n thickness?: number;\n label?: string;\n}\n\nconst sizeMap = {\n sm: 16,\n md: 24,\n lg: 32,\n};\n\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(\n (\n {\n className,\n style,\n size = 'md',\n color = 'currentColor',\n thickness = 2,\n label = 'Loading',\n ...props\n },\n ref\n ) => {\n const sizeValue = typeof size === 'number' ? size : sizeMap[size];\n\n const spinnerStyles: CSSProperties = {\n width: sizeValue,\n height: sizeValue,\n ...style,\n };\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cn('inline-flex items-center justify-center', className)}\n style={spinnerStyles}\n {...props}\n >\n <svg\n width={sizeValue}\n height={sizeValue}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className=\"animate-spin\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth={thickness}\n strokeOpacity={0.25}\n />\n <path\n d=\"M12 2a10 10 0 0 1 10 10\"\n stroke={color}\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n />\n </svg>\n <span className=\"lg-sr-only\">{label}</span>\n </div>\n );\n }\n);\n\nSpinner.displayName = 'Spinner';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'default' | 'secondary' | 'success' | 'warning' | 'destructive' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n dot?: boolean;\n icon?: ReactNode;\n}\n\nconst variantStyles = {\n default: {\n background: 'var(--lg-accent)',\n color: 'white',\n },\n secondary: {\n background: 'var(--lg-glass)',\n color: 'var(--lg-foreground)',\n backdropFilter: 'blur(8px)',\n },\n success: {\n background: 'var(--lg-success)',\n color: 'white',\n },\n warning: {\n background: 'var(--lg-warning)',\n color: 'black',\n },\n destructive: {\n background: 'var(--lg-destructive)',\n color: 'white',\n },\n outline: {\n background: 'transparent',\n color: 'var(--lg-foreground)',\n border: '1px solid var(--lg-edge-strong)',\n },\n};\n\nconst sizeConfig = {\n sm: { height: 18, padding: '0 6px', fontSize: 10, dotSize: 6 },\n md: { height: 22, padding: '0 8px', fontSize: 11, dotSize: 8 },\n lg: { height: 26, padding: '0 10px', fontSize: 12, dotSize: 10 },\n};\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n className,\n style,\n variant = 'default',\n size = 'md',\n dot = false,\n icon,\n children,\n ...props\n },\n ref\n ) => {\n const config = sizeConfig[size];\n const variantStyle = variantStyles[variant];\n\n if (dot) {\n return (\n <span\n ref={ref}\n className={cn('inline-block rounded-full', className)}\n style={{\n width: config.dotSize,\n height: config.dotSize,\n ...variantStyle,\n ...style,\n }}\n {...props}\n />\n );\n }\n\n const badgeStyles: CSSProperties = {\n height: config.height,\n padding: config.padding,\n fontSize: config.fontSize,\n borderRadius: config.height / 2,\n ...variantStyle,\n ...style,\n };\n\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center gap-1',\n 'font-medium whitespace-nowrap',\n className\n )}\n style={badgeStyles}\n {...props}\n >\n {icon && <span className=\"flex-shrink-0\">{icon}</span>}\n {children}\n </span>\n );\n }\n);\n\nBadge.displayName = 'Badge';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n fallback?: ReactNode;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n shape?: 'circle' | 'square';\n status?: 'online' | 'offline' | 'busy' | 'away';\n}\n\nconst sizeConfig = {\n xs: { size: 24, fontSize: 10, statusSize: 6 },\n sm: { size: 32, fontSize: 12, statusSize: 8 },\n md: { size: 40, fontSize: 14, statusSize: 10 },\n lg: { size: 56, fontSize: 18, statusSize: 12 },\n xl: { size: 80, fontSize: 24, statusSize: 16 },\n};\n\nconst statusColors = {\n online: 'var(--lg-success)',\n offline: 'var(--lg-muted)',\n busy: 'var(--lg-destructive)',\n away: 'var(--lg-warning)',\n};\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map(part => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n}\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n className,\n style,\n src,\n alt = '',\n fallback,\n size = 'md',\n shape = 'circle',\n status,\n ...props\n },\n ref\n ) => {\n const [imageError, setImageError] = useState(false);\n const config = sizeConfig[size];\n\n const showFallback = !src || imageError;\n\n const avatarStyles: CSSProperties = {\n width: config.size,\n height: config.size,\n fontSize: config.fontSize,\n borderRadius: shape === 'circle' ? '50%' : '20%',\n ...style,\n };\n\n const renderFallback = () => {\n if (fallback) return fallback;\n if (alt) return getInitials(alt);\n return (\n <svg width=\"60%\" height=\"60%\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/>\n </svg>\n );\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'lg-glass relative inline-flex items-center justify-center',\n 'overflow-hidden font-medium',\n 'text-[var(--lg-foreground-secondary)]',\n className\n )}\n style={avatarStyles}\n {...props}\n >\n {showFallback ? (\n renderFallback()\n ) : (\n <img\n src={src}\n alt={alt}\n onError={() => setImageError(true)}\n className=\"w-full h-full object-cover\"\n />\n )}\n\n {status && (\n <span\n className=\"absolute bottom-0 right-0 rounded-full border-2 border-white\"\n style={{\n width: config.statusSize,\n height: config.statusSize,\n backgroundColor: statusColors[status],\n }}\n />\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = 'Avatar';\n","import { forwardRef, HTMLAttributes, ReactNode, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface ChipProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'filled' | 'outlined' | 'glass';\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n icon?: ReactNode;\n onRemove?: () => void;\n removable?: boolean;\n selected?: boolean;\n onClick?: () => void;\n}\n\nconst sizeConfig = {\n sm: { height: 24, padding: '0 8px', fontSize: 11, iconSize: 14 },\n md: { height: 32, padding: '0 12px', fontSize: 13, iconSize: 16 },\n lg: { height: 40, padding: '0 16px', fontSize: 14, iconSize: 18 },\n};\n\nexport const Chip = forwardRef<HTMLSpanElement, ChipProps>(\n (\n {\n className,\n style,\n variant = 'glass',\n size = 'md',\n color,\n icon,\n onRemove,\n removable = false,\n selected = false,\n onClick,\n children,\n ...props\n },\n ref\n ) => {\n const config = sizeConfig[size];\n const isClickable = !!onClick;\n\n const chipStyles: CSSProperties = {\n height: config.height,\n padding: config.padding,\n fontSize: config.fontSize,\n borderRadius: config.height / 2,\n ...style,\n };\n\n if (color && variant === 'filled') {\n chipStyles.backgroundColor = color;\n chipStyles.color = 'white';\n } else if (color && variant === 'outlined') {\n chipStyles.borderColor = color;\n chipStyles.color = color;\n }\n\n return (\n <span\n ref={ref}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onClick={onClick}\n onKeyDown={(e) => {\n if (isClickable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick?.();\n }\n }}\n className={cn(\n 'inline-flex items-center gap-1.5',\n 'font-medium whitespace-nowrap',\n variant === 'glass' && 'lg-glass',\n variant === 'filled' && 'bg-[var(--lg-accent)] text-white',\n variant === 'outlined' && 'bg-transparent border border-[var(--lg-edge-strong)]',\n selected && variant === 'glass' && 'bg-[var(--lg-accent-light)] ring-1 ring-[var(--lg-accent)]',\n isClickable && 'cursor-pointer hover:opacity-80 transition-opacity',\n className\n )}\n style={chipStyles}\n {...props}\n >\n {icon && (\n <span\n className=\"flex-shrink-0 flex items-center justify-center\"\n style={{ width: config.iconSize, height: config.iconSize }}\n >\n {icon}\n </span>\n )}\n {children}\n {removable && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n className={cn(\n 'flex-shrink-0 flex items-center justify-center',\n 'w-4 h-4 -mr-1 p-0 border-0 rounded-full',\n 'bg-transparent cursor-pointer',\n 'hover:bg-black/10 transition-colors'\n )}\n aria-label=\"Remove\"\n >\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </span>\n );\n }\n);\n\nChip.displayName = 'Chip';\n","import { forwardRef, HTMLAttributes, ReactNode, createContext, useContext, useState, useCallback } from 'react';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\ninterface AccordionContextValue {\n expandedItems: string[];\n toggleItem: (value: string) => void;\n type: 'single' | 'multiple';\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nexport interface AccordionProps extends HTMLAttributes<HTMLDivElement> {\n type?: 'single' | 'multiple';\n defaultValue?: string | string[];\n collapsible?: boolean;\n}\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n (\n {\n className,\n type = 'single',\n defaultValue,\n collapsible = true,\n children,\n ...props\n },\n ref\n ) => {\n const [expandedItems, setExpandedItems] = useState<string[]>(() => {\n if (defaultValue) {\n return Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n }\n return [];\n });\n\n const toggleItem = useCallback((value: string) => {\n setExpandedItems(prev => {\n const isExpanded = prev.includes(value);\n \n if (type === 'single') {\n if (isExpanded && collapsible) return [];\n if (isExpanded && !collapsible) return prev;\n return [value];\n }\n\n if (isExpanded) {\n return prev.filter(v => v !== value);\n }\n return [...prev, value];\n });\n }, [type, collapsible]);\n\n return (\n <AccordionContext.Provider value={{ expandedItems, toggleItem, type }}>\n <div\n ref={ref}\n className={cn('divide-y divide-[var(--lg-separator)]', className)}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n }\n);\n\nAccordion.displayName = 'Accordion';\n\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n disabled?: boolean;\n}\n\ninterface AccordionItemContextValue {\n value: string;\n isExpanded: boolean;\n disabled: boolean;\n triggerId: string;\n contentId: string;\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null);\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ className, value, disabled = false, children, ...props }, ref) => {\n const context = useContext(AccordionContext);\n if (!context) throw new Error('AccordionItem must be used within Accordion');\n\n const isExpanded = context.expandedItems.includes(value);\n const id = useId();\n const triggerId = `${id}-trigger`;\n const contentId = `${id}-content`;\n\n return (\n <AccordionItemContext.Provider\n value={{ value, isExpanded, disabled, triggerId, contentId }}\n >\n <div\n ref={ref}\n className={cn(disabled && 'opacity-50', className)}\n {...props}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n }\n);\n\nAccordionItem.displayName = 'AccordionItem';\n\nexport interface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n}\n\nexport const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ className, children, ...props }, ref) => {\n const accordionContext = useContext(AccordionContext);\n const itemContext = useContext(AccordionItemContext);\n const reducedMotion = useReducedMotion();\n\n if (!accordionContext || !itemContext) {\n throw new Error('AccordionTrigger must be used within AccordionItem');\n }\n\n const { toggleItem } = accordionContext;\n const { value, isExpanded, disabled, triggerId, contentId } = itemContext;\n\n return (\n <button\n ref={ref}\n id={triggerId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n disabled={disabled}\n onClick={() => !disabled && toggleItem(value)}\n className={cn(\n 'flex w-full items-center justify-between py-4 px-1',\n 'text-left font-medium text-sm',\n 'border-0 bg-transparent cursor-pointer',\n 'hover:bg-[var(--lg-glass)] transition-colors rounded-lg -mx-1',\n disabled && 'cursor-default',\n className\n )}\n style={{ color: 'var(--lg-foreground)' }}\n {...props}\n >\n {children}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={cn(\n !reducedMotion && 'transition-transform duration-200'\n )}\n style={{\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n );\n }\n);\n\nAccordionTrigger.displayName = 'AccordionTrigger';\n\nexport interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ className, children, ...props }, ref) => {\n const itemContext = useContext(AccordionItemContext);\n const reducedMotion = useReducedMotion();\n\n if (!itemContext) {\n throw new Error('AccordionContent must be used within AccordionItem');\n }\n\n const { isExpanded, triggerId, contentId } = itemContext;\n\n if (!isExpanded) return null;\n\n return (\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n className={cn(\n 'pb-4 text-sm',\n !reducedMotion && 'animate-[lg-slide-up_200ms_ease-out]',\n className\n )}\n style={{ color: 'var(--lg-foreground-secondary)' }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nAccordionContent.displayName = 'AccordionContent';\n","import { forwardRef, HTMLAttributes } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n decorative?: boolean;\n}\n\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n (\n {\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : orientation}\n className={cn(\n 'bg-[var(--lg-separator)]',\n orientation === 'horizontal' ? 'h-px w-full' : 'w-px h-full',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSeparator.displayName = 'Separator';\n","import { forwardRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'text' | 'circular' | 'rectangular' | 'rounded';\n width?: number | string;\n height?: number | string;\n animation?: 'pulse' | 'wave' | 'none';\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n className,\n style,\n variant = 'text',\n width,\n height,\n animation = 'pulse',\n ...props\n },\n ref\n ) => {\n const skeletonStyles: CSSProperties = {\n width: width ?? (variant === 'circular' ? height : '100%'),\n height: height ?? (variant === 'text' ? '1em' : undefined),\n ...style,\n };\n\n const borderRadius = {\n text: '4px',\n circular: '50%',\n rectangular: '0',\n rounded: '8px',\n }[variant];\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-[var(--lg-glass)]',\n animation === 'pulse' && 'animate-pulse',\n animation === 'wave' && 'relative overflow-hidden after:absolute after:inset-0 after:translate-x-[-100%] after:animate-[lg-shimmer_2s_infinite] after:bg-gradient-to-r after:from-transparent after:via-white/20 after:to-transparent',\n className\n )}\n style={{\n ...skeletonStyles,\n borderRadius,\n }}\n aria-hidden=\"true\"\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = 'Skeleton';\n","import { forwardRef, HTMLAttributes, ReactNode, useEffect, useCallback, useRef, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface DrawerProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n side?: 'left' | 'right';\n size?: 'sm' | 'md' | 'lg' | 'xl';\n title?: string;\n description?: string;\n showCloseButton?: boolean;\n closeOnOverlayClick?: boolean;\n closeOnEscape?: boolean;\n}\n\nconst sizeConfig = {\n sm: 280,\n md: 320,\n lg: 400,\n xl: 500,\n};\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n (\n {\n className,\n style,\n open,\n onOpenChange,\n children,\n side = 'right',\n size = 'md',\n title,\n description,\n showCloseButton = true,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n ...props\n },\n ref\n ) => {\n const reducedMotion = useReducedMotion();\n const drawerRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const descId = useId();\n const width = sizeConfig[size];\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n handleClose();\n }\n };\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (closeOnEscape && e.key === 'Escape') {\n handleClose();\n }\n }, [closeOnEscape, handleClose]);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown);\n document.body.style.overflow = 'hidden';\n drawerRef.current?.focus();\n }\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.body.style.overflow = '';\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n const drawerStyles: CSSProperties = {\n position: 'fixed',\n top: 0,\n bottom: 0,\n width,\n maxWidth: '90vw',\n ...(side === 'left' ? { left: 0 } : { right: 0 }),\n ...style,\n };\n\n const animationClass = reducedMotion ? '' : \n side === 'left' \n ? 'animate-[lg-slide-from-left_300ms_var(--lg-ease-spring)]' \n : 'animate-[lg-slide-from-right_300ms_var(--lg-ease-spring)]';\n\n const drawerContent = (\n <div\n className={cn(\n 'fixed inset-0 z-50',\n 'bg-black/40 backdrop-blur-sm',\n !reducedMotion && 'animate-[lg-fade-in_200ms_ease-out]'\n )}\n onClick={handleOverlayClick}\n >\n <div\n ref={ref || drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descId : undefined}\n tabIndex={-1}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'h-full flex flex-col outline-none overflow-hidden',\n animationClass,\n className\n )}\n style={drawerStyles}\n {...props}\n >\n {/* Header */}\n {(title || showCloseButton) && (\n <div className=\"flex items-start justify-between p-4 border-b border-[var(--lg-separator)]\">\n <div>\n {title && (\n <h2\n id={titleId}\n className=\"text-lg font-semibold m-0\"\n style={{ color: 'var(--lg-foreground)' }}\n >\n {title}\n </h2>\n )}\n {description && (\n <p\n id={descId}\n className=\"text-sm mt-1 m-0\"\n style={{ color: 'var(--lg-muted)' }}\n >\n {description}\n </p>\n )}\n </div>\n {showCloseButton && (\n <button\n onClick={handleClose}\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center',\n 'bg-[var(--lg-glass)] hover:bg-[var(--lg-glass-active)]',\n 'border-0 cursor-pointer transition-colors',\n 'text-[var(--lg-muted)] hover:text-[var(--lg-foreground)]'\n )}\n aria-label=\"Close drawer\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4\">\n {children}\n </div>\n </div>\n </div>\n );\n\n return createPortal(drawerContent, document.body);\n }\n);\n\nDrawer.displayName = 'Drawer';\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, useCallback, cloneElement, isValidElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface PopoverProps {\n children: ReactNode;\n content: ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n closeOnClickOutside?: boolean;\n closeOnEscape?: boolean;\n trigger?: 'click' | 'hover';\n}\n\nexport function Popover({\n children,\n content,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n side = 'bottom',\n align = 'center',\n sideOffset = 8,\n closeOnClickOutside = true,\n closeOnEscape = true,\n trigger = 'click',\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = controlledOpen !== undefined ? controlledOpen : internalOpen;\n const setOpen = controlledOpen !== undefined ? onOpenChange! : setInternalOpen;\n\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const popoverId = useId();\n\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !popoverRef.current) return;\n\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const popoverRect = popoverRef.current.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case 'top':\n top = triggerRect.top - popoverRect.height - sideOffset;\n break;\n case 'bottom':\n top = triggerRect.bottom + sideOffset;\n break;\n case 'left':\n left = triggerRect.left - popoverRect.width - sideOffset;\n top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n break;\n case 'right':\n left = triggerRect.right + sideOffset;\n top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = triggerRect.left;\n break;\n case 'center':\n left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2;\n break;\n case 'end':\n left = triggerRect.right - popoverRect.width;\n break;\n }\n }\n\n left = Math.max(8, Math.min(left, window.innerWidth - popoverRect.width - 8));\n top = Math.max(8, Math.min(top, window.innerHeight - popoverRect.height - 8));\n\n setPosition({ top: top + window.scrollY, left: left + window.scrollX });\n }, [side, align, sideOffset]);\n\n useEffect(() => {\n if (open) {\n updatePosition();\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n }\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [open, updatePosition]);\n\n useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n closeOnClickOutside &&\n !triggerRef.current?.contains(e.target as Node) &&\n !popoverRef.current?.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (closeOnEscape && e.key === 'Escape') {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [open, closeOnClickOutside, closeOnEscape, setOpen]);\n\n const handleTriggerClick = () => {\n if (trigger === 'click') {\n setOpen(!open);\n }\n };\n\n const handleTriggerKeyDown = (e: React.KeyboardEvent) => {\n if (trigger === 'click' && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n setOpen(!open);\n }\n };\n\n const handleMouseEnter = () => {\n if (trigger === 'hover') {\n setOpen(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (trigger === 'hover') {\n setOpen(false);\n }\n };\n\n const child = isValidElement(children) ? children : <span>{children}</span>;\n\n const triggerElement = cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n 'aria-expanded': open,\n 'aria-haspopup': 'dialog',\n 'aria-controls': open ? popoverId : undefined,\n });\n\n return (\n <>\n {triggerElement}\n {open && typeof document !== 'undefined' && createPortal(\n <div\n ref={popoverRef}\n id={popoverId}\n role=\"dialog\"\n aria-modal=\"false\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 p-4 min-w-[200px]',\n !reducedMotion && 'animate-[lg-scale-in_150ms_var(--lg-ease-spring)]'\n )}\n style={{\n top: position.top,\n left: position.left,\n borderRadius: 12,\n transformOrigin: `${align === 'start' ? 'left' : align === 'end' ? 'right' : 'center'} ${side === 'bottom' ? 'top' : 'bottom'}`,\n }}\n >\n {content}\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, useCallback, cloneElement, isValidElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface ContextMenuItem {\n label: ReactNode;\n icon?: ReactNode;\n onSelect?: () => void;\n destructive?: boolean;\n disabled?: boolean;\n shortcut?: string;\n}\n\nexport type ContextMenuEntry = ContextMenuItem | 'separator';\n\nexport interface ContextMenuProps {\n children: ReactNode;\n items: ContextMenuEntry[];\n disabled?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function ContextMenu({\n children,\n items,\n disabled = false,\n onOpenChange,\n}: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const reducedMotion = useReducedMotion();\n const menuId = useId();\n\n const handleOpenChange = useCallback((isOpen: boolean) => {\n setOpen(isOpen);\n onOpenChange?.(isOpen);\n if (!isOpen) {\n setFocusedIndex(-1);\n }\n }, [onOpenChange]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n \n const menuWidth = 200;\n const menuHeight = items.length * 40;\n \n let x = e.clientX;\n let y = e.clientY;\n \n if (x + menuWidth > window.innerWidth) {\n x = window.innerWidth - menuWidth - 8;\n }\n if (y + menuHeight > window.innerHeight) {\n y = window.innerHeight - menuHeight - 8;\n }\n \n setPosition({ x, y });\n handleOpenChange(true);\n };\n\n const handleItemClick = (item: ContextMenuItem) => {\n if (item.disabled) return;\n item.onSelect?.();\n handleOpenChange(false);\n };\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (!open) return;\n\n const selectableItems = items.filter((item): item is ContextMenuItem => item !== 'separator' && !item.disabled);\n\n switch (e.key) {\n case 'Escape':\n handleOpenChange(false);\n break;\n case 'ArrowDown':\n e.preventDefault();\n setFocusedIndex(prev => {\n const next = prev + 1;\n return next >= selectableItems.length ? 0 : next;\n });\n break;\n case 'ArrowUp':\n e.preventDefault();\n setFocusedIndex(prev => {\n const next = prev - 1;\n return next < 0 ? selectableItems.length - 1 : next;\n });\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (focusedIndex >= 0) {\n const item = selectableItems[focusedIndex];\n handleItemClick(item);\n }\n break;\n }\n }, [open, items, focusedIndex, handleOpenChange]);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('keydown', handleKeyDown);\n \n const handleClickOutside = (e: MouseEvent) => {\n if (!menuRef.current?.contains(e.target as Node)) {\n handleOpenChange(false);\n }\n };\n \n document.addEventListener('mousedown', handleClickOutside);\n menuRef.current?.focus();\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [open, handleKeyDown, handleOpenChange]);\n\n const child = isValidElement(children) ? children : <span>{children}</span>;\n\n const triggerElement = cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n onContextMenu: handleContextMenu,\n });\n\n let selectableIndex = -1;\n\n return (\n <>\n {triggerElement}\n {open && typeof document !== 'undefined' && createPortal(\n <div\n ref={menuRef}\n id={menuId}\n role=\"menu\"\n tabIndex={-1}\n aria-label=\"Context menu\"\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 min-w-[180px] py-1.5 outline-none',\n !reducedMotion && 'animate-[lg-scale-in_100ms_var(--lg-ease-spring)]'\n )}\n style={{\n top: position.y,\n left: position.x,\n borderRadius: 12,\n transformOrigin: 'top left',\n }}\n >\n {items.map((item, index) => {\n if (item === 'separator') {\n return (\n <div\n key={`sep-${index}`}\n role=\"separator\"\n className=\"my-1.5 mx-2 border-t border-[var(--lg-separator)]\"\n />\n );\n }\n\n const isSelectable = !item.disabled;\n if (isSelectable) selectableIndex++;\n const isFocused = isSelectable && selectableIndex === focusedIndex;\n\n return (\n <button\n key={index}\n role=\"menuitem\"\n disabled={item.disabled}\n tabIndex={-1}\n data-selected={isFocused || undefined}\n onClick={() => handleItemClick(item)}\n onMouseEnter={() => isSelectable && setFocusedIndex(selectableIndex)}\n className={cn(\n 'w-full flex items-center gap-2.5 px-3 py-2',\n 'border-0 bg-transparent text-left text-sm cursor-pointer',\n 'transition-colors rounded-lg mx-1.5',\n 'first:mt-0 last:mb-0',\n item.destructive && 'text-[var(--lg-destructive)]',\n item.disabled && 'opacity-40 cursor-default',\n isFocused && 'bg-[var(--lg-highlight)]'\n )}\n style={{ \n color: item.destructive ? undefined : 'var(--lg-foreground)',\n width: 'calc(100% - 12px)',\n }}\n >\n {item.icon && (\n <span className=\"flex-shrink-0 w-4 h-4\">{item.icon}</span>\n )}\n <span className=\"flex-1\">{item.label}</span>\n {item.shortcut && (\n <span className=\"text-xs text-[var(--lg-muted)]\">{item.shortcut}</span>\n )}\n </button>\n );\n })}\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: ReactNode;\n shortcut?: string;\n onSelect: () => void;\n keywords?: string[];\n group?: string;\n disabled?: boolean;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n items: CommandItem[];\n placeholder?: string;\n emptyMessage?: string;\n groups?: Record<string, string>;\n}\n\nexport function CommandPalette({\n open,\n onOpenChange,\n items,\n placeholder = 'Type a command or search...',\n emptyMessage = 'No results found.',\n groups = {},\n}: CommandPaletteProps) {\n const [query, setQuery] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const dialogId = useId();\n const listboxId = useId();\n\n const filteredItems = useMemo(() => {\n if (!query.trim()) return items.filter(item => !item.disabled);\n \n const lowerQuery = query.toLowerCase();\n return items.filter(item => {\n if (item.disabled) return false;\n \n const matchLabel = item.label.toLowerCase().includes(lowerQuery);\n const matchDesc = item.description?.toLowerCase().includes(lowerQuery);\n const matchKeywords = item.keywords?.some(k => k.toLowerCase().includes(lowerQuery));\n \n return matchLabel || matchDesc || matchKeywords;\n });\n }, [items, query]);\n\n const groupedItems = useMemo(() => {\n const grouped: Record<string, CommandItem[]> = {};\n \n filteredItems.forEach(item => {\n const group = item.group || '_default';\n if (!grouped[group]) grouped[group] = [];\n grouped[group].push(item);\n });\n \n return grouped;\n }, [filteredItems]);\n\n const flattenedItems = useMemo(() => {\n return Object.values(groupedItems).flat();\n }, [groupedItems]);\n\n const handleClose = useCallback(() => {\n onOpenChange(false);\n setQuery('');\n setSelectedIndex(0);\n }, [onOpenChange]);\n\n const handleSelect = useCallback((item: CommandItem) => {\n item.onSelect();\n handleClose();\n }, [handleClose]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex(prev => \n prev < flattenedItems.length - 1 ? prev + 1 : 0\n );\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex(prev => \n prev > 0 ? prev - 1 : flattenedItems.length - 1\n );\n break;\n case 'Enter':\n e.preventDefault();\n if (flattenedItems[selectedIndex]) {\n handleSelect(flattenedItems[selectedIndex]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n handleClose();\n break;\n }\n }, [flattenedItems, selectedIndex, handleSelect, handleClose]);\n\n useEffect(() => {\n if (open) {\n inputRef.current?.focus();\n \n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleClose();\n }\n };\n \n document.addEventListener('keydown', handleGlobalKeyDown);\n document.body.style.overflow = 'hidden';\n \n return () => {\n document.removeEventListener('keydown', handleGlobalKeyDown);\n document.body.style.overflow = '';\n };\n }\n }, [open, handleClose]);\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [query]);\n\n useEffect(() => {\n const selectedElement = listRef.current?.querySelector('[data-selected=\"true\"]');\n selectedElement?.scrollIntoView({ block: 'nearest' });\n }, [selectedIndex]);\n\n if (!open) return null;\n\n const content = (\n <div\n className={cn(\n 'fixed inset-0 z-50 flex items-stretch sm:items-start justify-center',\n 'p-0 sm:p-4 sm:pt-[12vh]',\n 'bg-black/40 backdrop-blur-sm',\n !reducedMotion && 'animate-[lg-fade-in_150ms_ease-out]'\n )}\n onClick={(e) => e.target === e.currentTarget && handleClose()}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={dialogId}\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'w-full sm:max-w-[540px] overflow-hidden',\n 'h-full sm:h-auto max-h-full sm:max-h-[min(80vh,640px)]',\n 'flex flex-col rounded-none sm:rounded-2xl',\n !reducedMotion && 'animate-[lg-scale-in_150ms_var(--lg-ease-spring)]'\n )}\n >\n <div className=\"flex items-center gap-3 px-3 sm:px-4 min-h-[56px] border-b border-[var(--lg-separator)] shrink-0\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-muted)\" strokeWidth=\"2\" aria-hidden>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n <input\n ref={inputRef}\n type=\"search\"\n enterKeyHint=\"search\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listboxId}\n aria-activedescendant={flattenedItems[selectedIndex]?.id}\n className={cn(\n 'flex-1 min-w-0 bg-transparent border-0 outline-none',\n 'text-base placeholder:text-[var(--lg-muted)]'\n )}\n style={{ color: 'var(--lg-foreground)', fontSize: 16 }}\n />\n <button\n type=\"button\"\n onClick={handleClose}\n className=\"inline-flex items-center justify-center rounded-lg text-[var(--lg-muted)] border-0 bg-transparent cursor-pointer\"\n style={{ minWidth: 44, minHeight: 44 }}\n aria-label=\"Close search\"\n >\n <kbd\n className=\"px-2 py-1 text-xs rounded bg-[var(--lg-glass)] text-[var(--lg-muted)] pointer-events-none\"\n >\n ESC\n </kbd>\n </button>\n </div>\n\n <div\n ref={listRef}\n role=\"listbox\"\n id={listboxId}\n className=\"flex-1 overflow-auto overscroll-contain p-2 min-h-0\"\n style={{ maxHeight: 'min(70dvh, 480px)' }}\n >\n {flattenedItems.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-[var(--lg-muted)]\">\n {emptyMessage}\n </div>\n ) : (\n Object.entries(groupedItems).map(([group, groupItems]) => (\n <div key={group}>\n {group !== '_default' && groups[group] && (\n <div className=\"px-3 py-2 text-xs font-medium text-[var(--lg-muted)] uppercase tracking-wider\">\n {groups[group]}\n </div>\n )}\n {groupItems.map((item) => {\n const isSelected = flattenedItems[selectedIndex]?.id === item.id;\n\n return (\n <button\n key={item.id}\n id={item.id}\n role=\"option\"\n aria-selected={isSelected}\n data-selected={isSelected}\n onClick={() => handleSelect(item)}\n onMouseEnter={() => setSelectedIndex(flattenedItems.indexOf(item))}\n className={cn(\n 'w-full flex items-center gap-3 px-3 rounded-lg',\n 'border-0 bg-transparent text-left cursor-pointer',\n 'transition-colors',\n isSelected && 'bg-[var(--lg-highlight)]'\n )}\n style={{ minHeight: 44 }}\n >\n {item.icon && (\n <span className=\"flex-shrink-0 w-5 h-5 text-[var(--lg-muted)]\">\n {item.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium\" style={{ color: 'var(--lg-foreground)' }}>\n {item.label}\n </div>\n {item.description && (\n <div className=\"text-xs text-[var(--lg-muted)] truncate\">\n {item.description}\n </div>\n )}\n </div>\n {item.shortcut && (\n <kbd className=\"hidden sm:inline px-2 py-0.5 text-xs rounded bg-[var(--lg-glass)] text-[var(--lg-muted)]\">\n {item.shortcut}\n </kbd>\n )}\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n\n return createPortal(content, document.body);\n}\n","import { forwardRef, HTMLAttributes, ReactNode, useState, useRef, useEffect, useCallback, Children } from 'react';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface CarouselProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n autoPlay?: boolean;\n autoPlayInterval?: number;\n showDots?: boolean;\n showArrows?: boolean;\n loop?: boolean;\n slidesToShow?: number;\n gap?: number;\n}\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(\n (\n {\n className,\n style,\n children,\n autoPlay = false,\n autoPlayInterval = 5000,\n showDots = true,\n showArrows = true,\n loop = true,\n slidesToShow = 1,\n gap = 16,\n ...props\n },\n ref\n ) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isHovered, setIsHovered] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const carouselId = useId();\n\n const slides = Children.toArray(children);\n const totalSlides = slides.length;\n const maxIndex = Math.max(0, totalSlides - slidesToShow);\n\n const goToSlide = useCallback((index: number) => {\n if (loop) {\n if (index < 0) index = maxIndex;\n if (index > maxIndex) index = 0;\n } else {\n index = Math.max(0, Math.min(index, maxIndex));\n }\n setCurrentIndex(index);\n }, [loop, maxIndex]);\n\n const goToPrevious = useCallback(() => {\n goToSlide(currentIndex - 1);\n }, [currentIndex, goToSlide]);\n\n const goToNext = useCallback(() => {\n goToSlide(currentIndex + 1);\n }, [currentIndex, goToSlide]);\n\n useEffect(() => {\n if (autoPlay && !isHovered && !reducedMotion) {\n const timer = setInterval(goToNext, autoPlayInterval);\n return () => clearInterval(timer);\n }\n }, [autoPlay, autoPlayInterval, isHovered, reducedMotion, goToNext]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n goToPrevious();\n break;\n case 'ArrowRight':\n e.preventDefault();\n goToNext();\n break;\n case 'Home':\n e.preventDefault();\n goToSlide(0);\n break;\n case 'End':\n e.preventDefault();\n goToSlide(maxIndex);\n break;\n }\n };\n\n const slideWidth = `calc((100% - ${gap * (slidesToShow - 1)}px) / ${slidesToShow})`;\n\n return (\n <div\n ref={ref}\n className={cn('relative', className)}\n style={style}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n <div\n ref={containerRef}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label=\"Image carousel\"\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className=\"overflow-hidden rounded-xl outline-none focus-visible:ring-2 focus-visible:ring-[var(--lg-ring)]\"\n >\n <div\n aria-live={autoPlay ? 'off' : 'polite'}\n className=\"flex\"\n style={{\n gap,\n transform: `translateX(calc(-${currentIndex} * (${slideWidth} + ${gap}px)))`,\n transition: reducedMotion ? 'none' : 'transform 400ms var(--lg-ease)',\n }}\n >\n {slides.map((slide, index) => (\n <div\n key={index}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`Slide ${index + 1} of ${totalSlides}`}\n aria-hidden={index < currentIndex || index >= currentIndex + slidesToShow}\n className=\"flex-shrink-0\"\n style={{ width: slideWidth }}\n >\n {slide}\n </div>\n ))}\n </div>\n </div>\n\n {/* Arrow controls */}\n {showArrows && totalSlides > slidesToShow && (\n <>\n <button\n onClick={goToPrevious}\n disabled={!loop && currentIndex === 0}\n aria-label=\"Previous slide\"\n className={cn(\n 'lg-glass lg-interactive',\n 'absolute top-1/2 left-2 -translate-y-1/2',\n 'w-10 h-10 rounded-full',\n 'flex items-center justify-center',\n 'border-0 cursor-pointer',\n 'disabled:opacity-30 disabled:cursor-default',\n 'hover:bg-[var(--lg-glass-active)] transition-colors'\n )}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <button\n onClick={goToNext}\n disabled={!loop && currentIndex === maxIndex}\n aria-label=\"Next slide\"\n className={cn(\n 'lg-glass lg-interactive',\n 'absolute top-1/2 right-2 -translate-y-1/2',\n 'w-10 h-10 rounded-full',\n 'flex items-center justify-center',\n 'border-0 cursor-pointer',\n 'disabled:opacity-30 disabled:cursor-default',\n 'hover:bg-[var(--lg-glass-active)] transition-colors'\n )}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </>\n )}\n\n {/* Dot indicators */}\n {showDots && totalSlides > slidesToShow && (\n <div\n role=\"tablist\"\n aria-label=\"Carousel navigation\"\n className=\"flex items-center justify-center gap-2 mt-4\"\n >\n {Array.from({ length: maxIndex + 1 }).map((_, index) => (\n <button\n key={index}\n role=\"tab\"\n aria-selected={index === currentIndex}\n aria-label={`Go to slide ${index + 1}`}\n onClick={() => goToSlide(index)}\n className={cn(\n 'w-2 h-2 rounded-full border-0 cursor-pointer',\n 'transition-all duration-200',\n index === currentIndex\n ? 'bg-[var(--lg-accent)] w-6'\n : 'bg-[var(--lg-muted)] opacity-50 hover:opacity-100'\n )}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nCarousel.displayName = 'Carousel';\n","import { forwardRef, ButtonHTMLAttributes, ReactNode, CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn';\nimport { usePressedState } from '../hooks/use-pressed-state';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport interface FloatingActionButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n size?: 'sm' | 'md' | 'lg';\n variant?: 'primary' | 'secondary' | 'glass';\n position?: 'bottom-right' | 'bottom-left' | 'bottom-center' | 'top-right' | 'top-left';\n extended?: boolean;\n label?: string;\n 'aria-label': string;\n}\n\nconst sizeConfig = {\n sm: { size: 40, iconSize: 20 },\n md: { size: 56, iconSize: 24 },\n lg: { size: 72, iconSize: 32 },\n};\n\nconst positionStyles: Record<string, { bottom?: number; top?: number; left?: number | string; right?: number; transform?: string }> = {\n 'bottom-right': { bottom: 24, right: 24 },\n 'bottom-left': { bottom: 24, left: 24 },\n 'bottom-center': { bottom: 24, left: '50%', transform: 'translateX(-50%)' },\n 'top-right': { top: 24, right: 24 },\n 'top-left': { top: 24, left: 24 },\n};\n\nexport const FloatingActionButton = forwardRef<HTMLButtonElement, FloatingActionButtonProps>(\n (\n {\n className,\n style,\n icon,\n size = 'md',\n variant = 'primary',\n position = 'bottom-right',\n extended = false,\n label,\n disabled,\n ...props\n },\n ref\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const { isPressed, pressHandlers } = usePressedState({ disabled });\n const reducedMotion = useReducedMotion();\n const config = sizeConfig[size];\n\n const fabStyles: CSSProperties = {\n position: 'fixed',\n zIndex: 40,\n height: config.size,\n minWidth: config.size,\n borderRadius: extended && label ? config.size / 2 : '50%',\n padding: extended && label ? `0 ${config.size / 2}px` : 0,\n ...positionStyles[position],\n ...style,\n };\n\n const variantClasses = {\n primary: 'bg-[var(--lg-accent)] text-white hover:bg-[var(--lg-accent-hover)]',\n secondary: 'bg-[var(--lg-foreground)] text-[var(--lg-background)]',\n glass: 'lg-glass lg-glass-elevated',\n };\n\n return (\n <button\n ref={ref}\n className={cn(\n 'lg-interactive lg-focus-ring',\n 'inline-flex items-center justify-center gap-2',\n 'border-0 font-medium cursor-pointer',\n 'transition-all shadow-lg',\n variantClasses[variant],\n isPressed && 'scale-95',\n disabled && 'opacity-50 cursor-default',\n className\n )}\n style={{\n ...fabStyles,\n boxShadow: '0 6px 20px rgba(0, 0, 0, 0.2)',\n transition: reducedMotion ? 'none' : 'all 200ms var(--lg-ease-spring)',\n transform: `${positionStyles[position].transform || ''} ${isPressed ? 'scale(0.95)' : isHovered ? 'scale(1.05)' : 'scale(1)'}`.trim(),\n }}\n disabled={disabled}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...pressHandlers}\n {...props}\n >\n <span\n className=\"flex items-center justify-center\"\n style={{ width: config.iconSize, height: config.iconSize }}\n >\n {icon}\n </span>\n {extended && label && (\n <span className=\"text-sm font-medium\">{label}</span>\n )}\n </button>\n );\n }\n);\n\nFloatingActionButton.displayName = 'FloatingActionButton';\n\nexport { FloatingActionButton as FAB };\n","import { forwardRef, HTMLAttributes, useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils/cn';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useId } from '../hooks/use-id';\n\nexport interface DatePickerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'> {\n value?: Date | null;\n defaultValue?: Date | null;\n onValueChange?: (date: Date | null) => void;\n placeholder?: string;\n disabled?: boolean;\n minDate?: Date;\n maxDate?: Date;\n locale?: string;\n formatDate?: (date: Date) => string;\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction isSameDay(a: Date | null, b: Date | null): boolean {\n if (!a || !b) return false;\n return a.getFullYear() === b.getFullYear() && \n a.getMonth() === b.getMonth() && \n a.getDate() === b.getDate();\n}\n\nfunction isDateDisabled(date: Date, minDate?: Date, maxDate?: Date): boolean {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n className,\n style,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select date',\n disabled = false,\n minDate,\n maxDate,\n locale = 'en-US',\n formatDate = (date) => date.toLocaleDateString(locale, { year: 'numeric', month: 'long', day: 'numeric' }),\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<Date | null>(defaultValue || null);\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n \n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(() => value || new Date());\n const [focusedDate, setFocusedDate] = useState<Date | null>(null);\n \n const triggerRef = useRef<HTMLButtonElement>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n const reducedMotion = useReducedMotion();\n const inputId = useId();\n const calendarId = useId();\n\n const setValue = useCallback((date: Date | null) => {\n if (controlledValue === undefined) {\n setInternalValue(date);\n }\n onValueChange?.(date);\n }, [controlledValue, onValueChange]);\n\n const handleDateSelect = (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate)) return;\n setValue(date);\n setIsOpen(false);\n triggerRef.current?.focus();\n };\n\n const handlePrevMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1));\n };\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n triggerRef.current?.focus();\n return;\n }\n\n if (!focusedDate) return;\n\n const newDate = new Date(focusedDate);\n\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n newDate.setDate(newDate.getDate() - 1);\n setFocusedDate(newDate);\n if (newDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n break;\n case 'ArrowRight':\n e.preventDefault();\n newDate.setDate(newDate.getDate() + 1);\n setFocusedDate(newDate);\n if (newDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n newDate.setDate(newDate.getDate() - 7);\n setFocusedDate(newDate);\n if (newDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n break;\n case 'ArrowDown':\n e.preventDefault();\n newDate.setDate(newDate.getDate() + 7);\n setFocusedDate(newDate);\n if (newDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(newDate.getFullYear(), newDate.getMonth(), 1));\n }\n break;\n }\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n !triggerRef.current?.contains(e.target as Node) &&\n !calendarRef.current?.contains(e.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n setFocusedDate(value || new Date());\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('mousedown', handleClickOutside);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, value]);\n\n useEffect(() => {\n if (isOpen && triggerRef.current && calendarRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n calendarRef.current.style.top = `${rect.bottom + window.scrollY + 8}px`;\n calendarRef.current.style.left = `${rect.left + window.scrollX}px`;\n }\n }, [isOpen]);\n\n const days = useMemo(() => {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n \n const days: (Date | null)[] = [];\n \n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n \n for (let i = 1; i <= daysInMonth; i++) {\n days.push(new Date(year, month, i));\n }\n \n return days;\n }, [viewDate]);\n\n const today = new Date();\n\n return (\n <div ref={ref} className={cn('relative inline-block', className)} style={style} {...props}>\n <button\n ref={triggerRef}\n type=\"button\"\n id={inputId}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-controls={isOpen ? calendarId : undefined}\n disabled={disabled}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className={cn(\n 'lg-glass lg-interactive lg-focus-ring lg-text',\n 'flex items-center gap-2 h-10 px-4 w-full max-w-[280px]',\n 'border-0 text-left cursor-pointer',\n disabled && 'opacity-35 cursor-default'\n )}\n style={{ borderRadius: 20 }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--lg-muted)\" strokeWidth=\"2\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n <span className={value ? '' : 'text-[var(--lg-muted)]'}>\n {value ? formatDate(value) : placeholder}\n </span>\n </button>\n\n {isOpen && typeof document !== 'undefined' && createPortal(\n <div\n ref={calendarRef}\n id={calendarId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Choose date\"\n className={cn(\n 'lg-glass lg-glass-elevated lg-text',\n 'fixed z-50 p-4',\n !reducedMotion && 'animate-[lg-scale-in_150ms_var(--lg-ease-spring)]'\n )}\n style={{\n borderRadius: 16,\n width: 300,\n transformOrigin: 'top left',\n }}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n onClick={handlePrevMonth}\n aria-label=\"Previous month\"\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center',\n 'border-0 bg-transparent cursor-pointer',\n 'hover:bg-[var(--lg-glass)] transition-colors'\n )}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <span className=\"font-medium\">\n {MONTHS[viewDate.getMonth()]} {viewDate.getFullYear()}\n </span>\n <button\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n className={cn(\n 'w-8 h-8 rounded-full flex items-center justify-center',\n 'border-0 bg-transparent cursor-pointer',\n 'hover:bg-[var(--lg-glass)] transition-colors'\n )}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n\n {/* Weekday headers */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map(day => (\n <div\n key={day}\n className=\"text-center text-xs font-medium text-[var(--lg-muted)] py-1\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Days grid */}\n <div className=\"grid grid-cols-7 gap-1\" role=\"grid\">\n {days.map((date, index) => {\n if (!date) {\n return <div key={`empty-${index}`} />;\n }\n\n const isSelected = isSameDay(date, value);\n const isFocused = isSameDay(date, focusedDate);\n const isToday = isSameDay(date, today);\n const isDisabled = isDateDisabled(date, minDate, maxDate);\n\n return (\n <button\n key={date.toISOString()}\n role=\"gridcell\"\n aria-selected={isSelected}\n aria-current={isToday ? 'date' : undefined}\n tabIndex={isFocused ? 0 : -1}\n disabled={isDisabled}\n onClick={() => handleDateSelect(date)}\n onFocus={() => setFocusedDate(date)}\n className={cn(\n 'w-9 h-9 rounded-full flex items-center justify-center',\n 'border-0 text-sm cursor-pointer transition-colors',\n isSelected && 'bg-[var(--lg-accent)] text-white',\n !isSelected && isToday && 'ring-1 ring-[var(--lg-accent)]',\n !isSelected && !isDisabled && 'hover:bg-[var(--lg-glass)]',\n isFocused && !isSelected && 'bg-[var(--lg-highlight)]',\n isDisabled && 'opacity-30 cursor-default'\n )}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Today button */}\n <button\n onClick={() => {\n const now = new Date();\n setViewDate(new Date(now.getFullYear(), now.getMonth(), 1));\n handleDateSelect(now);\n }}\n className={cn(\n 'w-full mt-4 py-2 rounded-lg',\n 'border-0 text-sm font-medium cursor-pointer',\n 'bg-[var(--lg-glass)] hover:bg-[var(--lg-glass-active)]',\n 'transition-colors'\n )}\n >\n Today\n </button>\n </div>,\n document.body\n )}\n </div>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n","import { useState, useEffect } from 'react';\n\nconst QUERY = '(prefers-reduced-transparency: reduce)';\n\nfunction getInitialState(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(QUERY).matches;\n}\n\nexport function useReducedTransparency(): boolean {\n const [reducedTransparency, setReducedTransparency] = useState(getInitialState);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(QUERY);\n \n const handler = (event: MediaQueryListEvent) => {\n setReducedTransparency(event.matches);\n };\n\n mediaQuery.addEventListener('change', handler);\n setReducedTransparency(mediaQuery.matches);\n\n return () => {\n mediaQuery.removeEventListener('change', handler);\n };\n }, []);\n\n return reducedTransparency;\n}\n","import { useState, useEffect } from 'react';\n\nexport function useMounted(): boolean {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return mounted;\n}\n"],"mappings":"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","names":["useRef","useState","useEffect","useState","useEffect","useEffect","useState","useCallback","SVG_NS","filterContainer","getFilterContainer","svg","jsx","useRef","forwardRef","useRef","jsx","forwardRef","useRef","forwardRef","useRef","useState","useCallback","useRef","useEffect","jsx","forwardRef","useRef","sizeConfig","variantStyles","forwardRef","jsx","sizeStyles","forwardRef","sizeConfig","variantStyles","forwardRef","useState","useCallback","jsx","jsxs","forwardRef","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","useState","jsx","forwardRef","useState","forwardRef","jsx","jsxs","forwardRef","forwardRef","useState","useRef","useEffect","useCallback","Fragment","jsx","jsxs","sizeConfig","forwardRef","useState","useRef","useCallback","useEffect","forwardRef","jsx","jsxs","sizeConfig","forwardRef","forwardRef","createContext","useContext","jsx","jsxs","createContext","sizeConfig","forwardRef","useContext","forwardRef","useRef","useState","jsx","jsxs","forwardRef","useState","useRef","forwardRef","useState","useRef","useCallback","clamp","jsx","jsxs","THUMB_SHADOW","forwardRef","useState","useRef","useCallback","forwardRef","useState","useRef","jsx","jsxs","forwardRef","useState","useRef","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","createContext","useContext","jsx","createContext","forwardRef","useContext","forwardRef","jsx","jsxs","forwardRef","forwardRef","createContext","useContext","useState","useCallback","Fragment","jsx","jsxs","createContext","useContext","useState","useCallback","forwardRef","forwardRef","useState","useRef","jsx","jsxs","forwardRef","distance","useState","useRef","forwardRef","useEffect","useCallback","useRef","createPortal","jsx","jsxs","sizeConfig","forwardRef","useRef","useCallback","useEffect","createPortal","forwardRef","useEffect","useCallback","useRef","createPortal","jsx","jsxs","sizeConfig","forwardRef","useRef","useCallback","useEffect","createPortal","forwardRef","useState","useRef","useEffect","createPortal","jsx","jsxs","forwardRef","useState","useRef","useEffect","createPortal","useState","useRef","useEffect","createPortal","Fragment","jsx","jsxs","useState","useRef","useEffect","createPortal","forwardRef","useState","useEffect","createContext","useContext","useCallback","createPortal","jsx","jsxs","forwardRef","useState","useEffect","createContext","useCallback","createPortal","useContext","forwardRef","jsx","jsxs","forwardRef","forwardRef","jsx","jsxs","forwardRef","clamp","config","forwardRef","jsx","jsxs","forwardRef","forwardRef","jsx","jsxs","sizeConfig","forwardRef","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","jsx","jsxs","sizeConfig","forwardRef","forwardRef","createContext","useContext","useState","useCallback","jsx","jsxs","createContext","forwardRef","useState","useCallback","useContext","forwardRef","jsx","forwardRef","forwardRef","jsx","forwardRef","forwardRef","useEffect","useCallback","useRef","createPortal","jsx","jsxs","sizeConfig","forwardRef","useRef","useCallback","useEffect","createPortal","useState","useRef","useEffect","useCallback","cloneElement","isValidElement","createPortal","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","isValidElement","cloneElement","createPortal","useState","useRef","useEffect","useCallback","cloneElement","isValidElement","createPortal","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","isValidElement","cloneElement","createPortal","useState","useRef","useEffect","useCallback","createPortal","jsx","jsxs","useState","useRef","useCallback","useEffect","createPortal","forwardRef","useState","useRef","useEffect","useCallback","Fragment","jsx","jsxs","forwardRef","useState","useRef","useCallback","useEffect","forwardRef","useState","jsx","jsxs","sizeConfig","forwardRef","useState","forwardRef","useState","useRef","useEffect","useCallback","useMemo","createPortal","jsx","jsxs","forwardRef","useState","useRef","useCallback","useEffect","useMemo","days","createPortal","useState","useEffect","QUERY","getInitialState","useState","useEffect"]}
|