@shalomormsby/ui 0.0.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/components/actions/Button.tsx","../src/lib/utils.ts","../src/components/actions/Link.tsx","../src/components/actions/Toggle.tsx","../src/components/actions/ToggleGroup.tsx","../src/components/actions/Magnetic.tsx","../src/hooks/useMotionPreference.ts","../src/lib/store/customizer.ts","../src/lib/colors.ts","../src/components/forms/Checkbox.tsx","../src/components/forms/ColorPicker.tsx","../src/components/forms/Label.tsx","../src/components/forms/Input.tsx","../src/components/forms/Combobox.tsx","../src/components/navigation/Command.tsx","../src/components/overlays/Dialog.tsx","../src/components/overlays/Popover.tsx","../src/components/forms/DragDrop.tsx","../src/components/forms/FilterButton.tsx","../src/components/forms/Form.tsx","../src/components/forms/InputOTP.tsx","../src/components/forms/RadioGroup.tsx","../src/components/forms/SearchBar.tsx","../src/components/forms/TextField.tsx","../src/components/forms/Select.tsx","../src/components/forms/Slider.tsx","../src/components/forms/Switch.tsx","../src/components/forms/Textarea.tsx","../src/components/forms/ThemeSwitcher.tsx","../src/lib/store/theme.ts","../src/hooks/useTheme.ts","../src/components/forms/ThemeToggle.tsx","../src/components/navigation/Breadcrumb.tsx","../src/components/navigation/Breadcrumbs.tsx","../src/components/navigation/Menubar.tsx","../src/components/navigation/NavLink.tsx","../src/components/navigation/NavigationMenu.tsx","../src/components/navigation/Pagination.tsx","../src/components/navigation/SecondaryNav.tsx","../src/components/navigation/Tabs.tsx","../src/components/navigation/TertiaryNav.tsx","../src/components/overlays/AlertDialog.tsx","../src/components/overlays/ContextMenu.tsx","../src/components/overlays/Drawer.tsx","../src/components/overlays/Dropdown.tsx","../src/hooks.ts","../src/hooks/useForm.ts","../src/lib/validation.ts","../src/components/overlays/DropdownMenu.tsx","../src/components/overlays/HoverCard.tsx","../src/components/overlays/Modal.tsx","../src/components/overlays/Sheet.tsx","../src/components/overlays/Tooltip.tsx","../src/components/feedback/Alert.tsx","../src/components/feedback/Progress.tsx","../src/components/feedback/ProgressBar.tsx","../src/components/feedback/Skeleton.tsx","../src/components/feedback/Sonner.tsx","../src/components/feedback/Spinner.tsx","../src/components/feedback/Toast/Toast.tsx","../src/components/data-display/AspectImage.tsx","../src/components/data-display/Avatar.tsx","../src/components/data-display/Badge.tsx","../src/components/data-display/Brand.tsx","../src/components/data-display/Calendar.tsx","../src/components/data-display/Card.tsx","../src/components/data-display/Code.tsx","../src/lib/syntax-parser/patterns.ts","../src/lib/syntax-parser/tokenizer.ts","../src/lib/syntax-parser/index.ts","../src/components/data-display/CollapsibleCodeBlock.tsx","../src/components/data-display/DataTable.tsx","../src/components/data-display/Table.tsx","../src/components/data-display/DescriptionList.tsx","../src/components/data-display/GitHubIcon.tsx","../src/components/data-display/Heading.tsx","../src/components/data-display/Text.tsx","../src/components/data-display/VariableWeightText.tsx","../src/components/data-display/Typewriter.tsx","../src/components/blocks/social/OpenGraphCard.tsx","../src/components/layout/Accordion.tsx","../src/components/layout/AspectRatio.tsx","../src/components/layout/Carousel.tsx","../src/components/layout/Collapsible.tsx","../src/components/layout/Container.tsx","../src/components/layout/CustomizerPanel.tsx","../src/components/layout/DatePicker.tsx","../src/components/layout/Footer/Footer.tsx","../src/components/layout/Grid.tsx","../src/components/layout/Header/Header.tsx","../src/components/layout/PageLayout.tsx","../src/components/layout/PageTemplate.tsx","../src/components/layout/Resizable.tsx","../src/components/layout/ScrollArea.tsx","../src/components/layout/Separator.tsx","../src/components/layout/Sidebar.tsx","../src/components/layout/Stack.tsx","../src/components/backgrounds/WarpBackground.tsx","../src/components/backgrounds/FaultyTerminal.tsx","../src/components/motion/AnimatedBeam.tsx","../src/components/backgrounds/OrbBackground.tsx","../src/components/blocks/Hero.tsx","../src/components/cursor/SplashCursor.tsx","../src/components/cursor/TargetCursor.tsx","../src/providers/ThemeProvider.tsx","../src/lib/animations.ts","../src/lib/breadcrumbs.ts","../src/components/actions/index.ts","../src/components/forms/index.ts","../src/components/navigation/index.ts","../src/components/overlays/index.ts","../src/components/feedback/index.ts","../src/components/data-display/index.ts","../src/components/layout/index.ts","../src/components/backgrounds/index.ts","../src/components/cursor/index.ts","../src/providers.ts"],"sourcesContent":["// ============================================================================\n// MAIN BARREL EXPORTS - Backward Compatible\n// ============================================================================\n// All components remain importable from '@sage/ui' root\n// Example: import { Button, Card, Dialog } from '@sage/ui'\n\n// Actions\nexport * from './components/actions/Button';\nexport * from './components/actions/Link';\nexport * from './components/actions/Toggle';\nexport * from './components/actions/ToggleGroup';\nexport * from './components/actions/Magnetic';\n\n// Forms\nexport * from './components/forms/Checkbox';\nexport * from './components/forms/ColorPicker';\nexport * from './components/forms/Combobox';\nexport * from './components/forms/DragDrop';\nexport * from './components/forms/FilterButton';\nexport * from './components/forms/Form';\nexport * from './components/forms/Input';\nexport * from './components/forms/InputOTP';\nexport * from './components/forms/Label';\nexport * from './components/forms/RadioGroup';\nexport * from './components/forms/SearchBar';\nexport * from './components/forms/Select';\nexport * from './components/forms/Slider';\nexport * from './components/forms/Switch';\nexport * from './components/forms/TextField';\nexport * from './components/forms/Textarea';\nexport * from './components/forms/ThemeSwitcher';\nexport * from './components/forms/ThemeToggle';\n\n// Navigation\nexport * from './components/navigation/Breadcrumb';\nexport * from './components/navigation/Breadcrumbs';\nexport * from './components/navigation/Command';\nexport * from './components/navigation/Menubar';\nexport * from './components/navigation/NavLink';\nexport * from './components/navigation/NavigationMenu';\nexport * from './components/navigation/Pagination';\nexport * from './components/navigation/SecondaryNav';\nexport * from './components/navigation/Tabs';\nexport * from './components/navigation/TertiaryNav';\n\n// Overlays\nexport * from './components/overlays/AlertDialog';\nexport * from './components/overlays/ContextMenu';\nexport * from './components/overlays/Dialog';\nexport * from './components/overlays/Drawer';\nexport * from './components/overlays/Dropdown';\nexport * from './components/overlays/DropdownMenu';\nexport * from './components/overlays/HoverCard';\nexport * from './components/overlays/Modal';\nexport * from './components/overlays/Popover';\nexport * from './components/overlays/Sheet';\nexport * from './components/overlays/Tooltip';\n\n// Feedback\nexport * from './components/feedback/Alert';\nexport * from './components/feedback/Progress';\nexport * from './components/feedback/ProgressBar';\nexport * from './components/feedback/Skeleton';\nexport * from './components/feedback/Sonner';\nexport * from './components/feedback/Spinner';\nexport * from './components/feedback/Toast';\n\n\n// Data Display\nexport * from './components/data-display/AspectImage';\nexport * from './components/data-display/Avatar';\nexport * from './components/data-display/Badge';\nexport * from './components/data-display/Brand';\nexport * from './components/data-display/Calendar';\nexport * from './components/data-display/Card';\nexport * from './components/data-display/Code';\nexport * from './components/data-display/CollapsibleCodeBlock';\nexport * from './components/data-display/DataTable';\nexport * from './components/data-display/DescriptionList';\nexport * from './components/data-display/GitHubIcon';\nexport * from './components/data-display/Heading';\nexport * from './components/data-display/Table';\nexport * from './components/data-display/Text';\nexport * from './components/data-display/VariableWeightText';\nexport * from './components/data-display/Typewriter';\nexport * from './components/blocks/social/OpenGraphCard';\n\n// Layout\nexport * from './components/layout/Accordion';\nexport * from './components/layout/AspectRatio';\nexport * from './components/layout/Carousel';\nexport * from './components/layout/Collapsible';\nexport * from './components/layout/Container';\nexport * from './components/layout/CustomizerPanel';\nexport * from './components/layout/DatePicker';\nexport * from './components/layout/Footer';\nexport * from './components/layout/Grid';\nexport * from './components/layout/Header';\nexport * from './components/layout/PageLayout';\nexport * from './components/layout/PageTemplate';\nexport * from './components/layout/Resizable';\nexport * from './components/layout/ScrollArea';\nexport * from './components/layout/Separator';\nexport * from './components/layout/Sidebar';\nexport * from './components/layout/Stack';\n\n// Backgrounds\nexport * from './components/backgrounds/WarpBackground';\nexport * from './components/backgrounds/FaultyTerminal';\n\n// Motion\nexport * from \"./components/motion/AnimatedBeam\";\nexport * from \"./components/backgrounds/OrbBackground\";\nexport * from \"./components/blocks/Hero\";\nexport * from './components/cursor/SplashCursor';\nexport * from './components/cursor/TargetCursor';\n\n// Providers\nexport * from './providers/ThemeProvider';\n\n// Hooks\nexport * from './hooks/useTheme';\nexport * from './hooks/useMotionPreference';\nexport * from './hooks/useForm';\n\n// Stores\nexport * from './lib/store';\n\n// Utilities\nexport * from './lib/animations';\nexport * from './lib/breadcrumbs';\nexport * from './lib/colors';\nexport * from './lib/utils';\nexport * from './lib/validation';\nexport * from './lib/syntax-parser';\n\n// Tokens (selective re-exports)\nexport { typographySystem } from '@sage/tokens';\n\n// ============================================================================\n// OPTIONAL CATEGORY-BASED EXPORTS (Future Use)\n// ============================================================================\n// These allow category-specific imports for better code organization\n// Example: import { Button } from '@sage/ui/actions'\n// Note: These require package.json exports configuration\n\n// Re-export categories for convenience\nexport * as Actions from './components/actions';\nexport * as Forms from './components/forms';\nexport * as Navigation from './components/navigation';\nexport * as Overlays from './components/overlays';\nexport * as Feedback from './components/feedback';\nexport * as DataDisplay from './components/data-display';\nexport * as Layout from './components/layout';\nexport * as Backgrounds from './components/backgrounds';\nexport * as Motion from './components/cursor';\nexport * as Providers from './providers';\nexport * as Hooks from './hooks';\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { Slot } from '@radix-ui/react-slot';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 sage-interactive [&_svg]:transition-transform [&_svg]:duration-300 hover:[&_svg]:translate-x-1',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm',\n outline: 'border border-input bg-transparent shadow-sm hover:bg-primary hover:text-primary-foreground hover:border-primary',\n secondary: 'bg-black/5 dark:bg-white/10 backdrop-blur-md border border-black/5 dark:border-white/10 text-secondary-foreground shadow-sm hover:bg-primary hover:text-primary-foreground dark:hover:bg-primary dark:hover:text-primary-foreground',\n ghost: 'hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, children, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <span className=\"relative z-20 flex items-center justify-center gap-2\">\n {children}\n </span>\n )}\n </Comp>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants };\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from 'react';\n\nexport interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n children: React.ReactNode;\n /**\n * Visual style variant for the link\n * @default 'default'\n */\n variant?: 'default' | 'inline';\n /**\n * Whether to apply hover effect (only for 'default' variant).\n * @default true\n */\n hoverEffect?: boolean;\n}\n\n/**\n * Link Component\n *\n * A theme-aware link with multiple style variants.\n *\n * Variants:\n * - **default**: Background highlight on hover, good for standalone links\n * - **inline**: Underlined text link, good for inline links within paragraphs\n *\n * Features:\n * - Theme-aware colors using CSS variables\n * - Smooth transition respecting motion preferences\n * - Accessible focus states\n * - Works with Next.js Link or standard anchor tags\n *\n * Usage:\n * ```tsx\n * <Link href=\"/about\">About</Link>\n * <Link variant=\"inline\" href=\"/contact\">Contact</Link>\n * <Link href=\"https://example.com\" target=\"_blank\">External</Link>\n * ```\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n ({ children, className = '', variant = 'default', hoverEffect = true, ...props }, ref) => {\n const variantStyles = {\n default: `\n px-2 py-1 -mx-2 -my-1 rounded\n text-[var(--color-text-primary)]\n ${hoverEffect ? 'hover:bg-[var(--color-link-hover)] hover:text-[var(--color-link-hover-foreground)]' : ''}\n `,\n inline: `\n text-[var(--color-primary)]\n underline decoration-[var(--color-primary)]/40 decoration-1 underline-offset-2\n hover:decoration-[var(--color-primary)] hover:decoration-2\n `,\n };\n\n return (\n <a\n ref={ref}\n className={`\n transition-all duration-200\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2\n ${variantStyles[variant]}\n ${className}\n `}\n {...props}\n >\n {children}\n </a>\n );\n }\n);\n\nLink.displayName = 'Link';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-3\",\n sm: \"h-8 px-2\",\n lg: \"h-10 px-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Toggle: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants> & React.RefAttributes<React.ElementRef<typeof TogglePrimitive.Root>>\n> = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n <TogglePrimitive.Root\n ref={ref}\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n))\n\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { toggleVariants } from \"./Toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants>\n>({\n size: \"default\",\n variant: \"default\",\n})\n\nconst ToggleGroup: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants> & React.RefAttributes<React.ElementRef<typeof ToggleGroupPrimitive.Root>>\n> = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn(\"flex items-center justify-center gap-1\", className)}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n))\n\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName\n\nconst ToggleGroupItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants> & React.RefAttributes<React.ElementRef<typeof ToggleGroupPrimitive.Item>>\n> = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>\n>(({ className, children, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n})\n\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName\n\nexport { ToggleGroup, ToggleGroupItem }\n","'use client';\n\nimport { motion, useMotionValue, useSpring, useTransform } from 'framer-motion';\nimport React, { useRef } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface MagneticProps {\n children: React.ReactNode;\n /**\n * The strength of the magnetic pull. Higher numbers = strong pull.\n * @default 0.2\n */\n strength?: number;\n /**\n * The active area padding around the element in pixels.\n * @default 100\n */\n range?: number;\n className?: string;\n}\n\n/**\n * Wraps an element to give it a magnetic attraction to the cursor.\n */\nimport { useMotionPreference } from '../../hooks/useMotionPreference';\n\nexport function Magnetic({ children, strength = 0.2, range = 100, className }: MagneticProps) {\n const { shouldAnimate, scale } = useMotionPreference();\n const ref = useRef<HTMLDivElement>(null);\n const position = { x: useMotionValue(0), y: useMotionValue(0) };\n\n const springOptions = { damping: 15, stiffness: 150, mass: 0.1 };\n const smoothX = useSpring(position.x, springOptions);\n const smoothY = useSpring(position.y, springOptions);\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!shouldAnimate) return;\n\n const { clientX, clientY } = e;\n const { height, width, left, top } = ref.current?.getBoundingClientRect() || { height: 0, width: 0, left: 0, top: 0 };\n\n const middleX = clientX - (left + width / 2);\n const middleY = clientY - (top + height / 2);\n\n // Scale strength based on motion intensity (baseline 5)\n const effectiveStrength = strength * (scale / 5);\n\n position.x.set(middleX * effectiveStrength);\n position.y.set(middleY * effectiveStrength);\n };\n\n const handleMouseLeave = () => {\n position.x.set(0);\n position.y.set(0);\n };\n\n return (\n <motion.div\n ref={ref}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n style={{ x: smoothX, y: smoothY }}\n className={cn(\"inline-block\", className)}\n >\n {children}\n </motion.div>\n );\n}\n","'use client';\n\nimport { useEffect } from 'react';\nimport { useCustomizer } from '../lib/store/customizer';\n\nexport interface MotionPreference {\n /**\n * Motion intensity level (0-10)\n * 0 = no motion, 10 = full motion\n */\n scale: number;\n\n /**\n * Whether animations should be displayed\n * False when scale is 0 or prefersReducedMotion is true\n */\n shouldAnimate: boolean;\n\n /**\n * System preference for reduced motion\n */\n prefersReducedMotion: boolean;\n}\n\n/**\n * Hook to access motion preferences\n *\n * Automatically syncs with system `prefers-reduced-motion` media query\n * and respects user's manual motion intensity setting.\n *\n * @example\n * ```tsx\n * function AnimatedComponent() {\n * const { scale, shouldAnimate } = useMotionPreference();\n *\n * if (!shouldAnimate) {\n * return <div>Content without animation</div>;\n * }\n *\n * return (\n * <motion.div\n * animate={{ opacity: 1 }}\n * transition={{ duration: 0.3 * (scale / 10) }}\n * >\n * Content with scaled animation\n * </motion.div>\n * );\n * }\n * ```\n */\nexport function useMotionPreference(): MotionPreference {\n const { motion, prefersReducedMotion, setPrefersReducedMotion } = useCustomizer();\n\n // Listen for system prefers-reduced-motion changes\n useEffect(() => {\n // Only run in browser environment\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n // Set initial value\n setPrefersReducedMotion(mediaQuery.matches);\n\n // Listen for changes\n const handleChange = (e: MediaQueryListEvent) => {\n setPrefersReducedMotion(e.matches);\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [setPrefersReducedMotion]);\n\n return {\n scale: motion,\n shouldAnimate: motion > 0 && !prefersReducedMotion,\n prefersReducedMotion,\n };\n}\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\nimport { computeDerivedTokens, type FontTheme } from '@sage/tokens';\nimport {\n generateColorScale,\n getOptimalForeground,\n} from '../colors';\n\nexport type CustomizationMode = 'simple' | 'advanced';\n\nexport interface ColorPalette {\n /* Metadata */\n name?: string; // Name of the source palette\n description?: string; // Description of the source palette\n\n /* Colors */\n primary: string; // Base hex\n primaryForeground: string; // Calculated contrast\n secondary?: string; // Optional secondary color\n secondaryForeground?: string; // Calculated contrast\n accent?: string; // Optional accent color\n accentForeground?: string; // Calculated contrast\n scale: Record<number, string>; // 50-900 tints/shades\n derivedTokens: Record<string, string>; // Computed dependent tokens\n}\n\nexport interface SavedPalette {\n id: string; // Unique ID\n name: string; // User-defined name\n description: string; // Palette description\n primary: string; // Primary color hex\n accent: string; // Accent color hex\n secondary?: string; // Optional secondary color\n category: 'custom'; // Always 'custom' for user palettes\n wcagAA: boolean; // Calculated accessibility\n wcagAAA: boolean; // Calculated accessibility\n createdAt: number; // Timestamp\n mood: string[]; // Mood tags\n bestFor?: string[]; // Best use cases\n harmony?: string;\n rationale?: string;\n}\n\nexport interface SavedFontTheme extends FontTheme {\n id: string; // Unique ID (overrides FontTheme.id)\n createdAt: number; // Timestamp\n category: 'custom'; // Always 'custom' for user font themes\n}\n\nexport interface ColorCustomization {\n mode: CustomizationMode;\n palette: ColorPalette | null;\n}\n\nexport type ThemeName = 'studio' | 'sage' | 'volt';\nexport type ColorMode = 'light' | 'dark';\n\ninterface CustomizerState {\n // Motion settings\n motion: number; // 0-10\n prefersReducedMotion: boolean;\n\n // Color customization\n customizationMode: CustomizationMode;\n customColors: {\n [theme in ThemeName]?: {\n [mode in ColorMode]?: ColorPalette;\n };\n };\n\n // Saved custom palettes\n savedPalettes: SavedPalette[];\n\n // Font theme customization\n customFontThemes: {\n [theme in ThemeName]?: {\n [mode in ColorMode]?: FontTheme;\n };\n };\n\n // Saved custom font themes\n savedFontThemes: SavedFontTheme[];\n\n // Motion actions\n setMotion: (level: number) => void;\n setPrefersReducedMotion: (value: boolean) => void;\n\n // Color customization actions\n setCustomizationMode: (mode: CustomizationMode) => void;\n\n setCustomPrimaryColor: (\n theme: ThemeName,\n mode: ColorMode,\n hexColor: string\n ) => void;\n\n setCustomSecondaryColor: (\n theme: ThemeName,\n mode: ColorMode,\n hexColor: string\n ) => void;\n\n setCustomAccentColor: (\n theme: ThemeName,\n mode: ColorMode,\n hexColor: string\n ) => void;\n\n applyColorPalette: (\n theme: ThemeName,\n mode: ColorMode,\n colors: {\n primary: string;\n secondary?: string;\n accent?: string;\n name?: string;\n description?: string;\n }\n ) => void;\n\n resetCustomColors: (theme: ThemeName, mode?: ColorMode) => void;\n\n getActiveColorPalette: (theme: ThemeName, mode: ColorMode) => ColorPalette | null;\n\n // Saved palette actions\n savePalette: (palette: Omit<SavedPalette, 'id' | 'createdAt' | 'category'>) => void;\n updatePalette: (id: string, updates: Partial<SavedPalette>) => void;\n renamePalette: (id: string, newName: string) => void;\n deletePalette: (id: string) => void;\n reorderPalettes: (palettes: SavedPalette[]) => void;\n getSavedPalettes: () => SavedPalette[];\n\n // Font theme actions\n applyFontTheme: (\n theme: ThemeName,\n mode: ColorMode,\n fontTheme: FontTheme\n ) => void;\n\n resetCustomFonts: (theme: ThemeName, mode?: ColorMode) => void;\n\n getActiveFontTheme: (theme: ThemeName, mode: ColorMode) => FontTheme | null;\n\n // Saved font theme actions\n saveFontTheme: (fontTheme: Omit<SavedFontTheme, 'id' | 'createdAt' | 'category'>) => void;\n updateFontTheme: (id: string, updates: Partial<SavedFontTheme>) => void;\n renameFontTheme: (id: string, newName: string) => void;\n deleteFontTheme: (id: string) => void;\n reorderFontThemes: (fontThemes: SavedFontTheme[]) => void;\n getSavedFontThemes: () => SavedFontTheme[];\n}\n\nexport const useCustomizer = create<CustomizerState>()(\n persist(\n (set, get) => ({\n motion: 5,\n prefersReducedMotion: false,\n customizationMode: 'simple',\n customColors: {},\n savedPalettes: [],\n customFontThemes: {},\n savedFontThemes: [],\n\n setMotion: (level) => set({ motion: level }),\n setPrefersReducedMotion: (value) => set({ prefersReducedMotion: value }),\n setCustomizationMode: (mode) => set({ customizationMode: mode }),\n\n setCustomPrimaryColor: (theme, mode, hexColor) => {\n const state = get();\n const currentPalette = state.customColors[theme]?.[mode];\n\n // Generate complete color palette\n const scale = generateColorScale(hexColor);\n const primaryForeground = getOptimalForeground(hexColor);\n\n // Compute all derived tokens based on dependency graph\n const derivedTokens = computeDerivedTokens('--color-primary', hexColor, mode);\n\n // In simple mode, generate secondary/accent from primary\n const isSimple = state.customizationMode === 'simple';\n\n const palette: ColorPalette = {\n primary: hexColor,\n primaryForeground,\n secondary: isSimple ? undefined : currentPalette?.secondary,\n secondaryForeground: isSimple ? undefined : currentPalette?.secondaryForeground,\n accent: isSimple ? undefined : currentPalette?.accent,\n accentForeground: isSimple ? undefined : currentPalette?.accentForeground,\n scale,\n derivedTokens,\n };\n\n set((state) => ({\n customColors: {\n ...state.customColors,\n [theme]: {\n ...state.customColors[theme],\n [mode]: palette,\n },\n },\n }));\n },\n\n setCustomSecondaryColor: (theme, mode, hexColor) => {\n const state = get();\n const currentPalette = state.customColors[theme]?.[mode];\n\n if (!currentPalette) return;\n\n const secondaryForeground = getOptimalForeground(hexColor);\n const derivedTokens = computeDerivedTokens('--color-secondary', hexColor, mode);\n\n set((state) => ({\n customColors: {\n ...state.customColors,\n [theme]: {\n ...state.customColors[theme],\n [mode]: {\n ...currentPalette,\n secondary: hexColor,\n secondaryForeground,\n derivedTokens: {\n ...currentPalette.derivedTokens,\n ...derivedTokens,\n },\n },\n },\n },\n }));\n },\n\n setCustomAccentColor: (theme, mode, hexColor) => {\n const state = get();\n const currentPalette = state.customColors[theme]?.[mode];\n\n if (!currentPalette) return;\n\n const accentForeground = getOptimalForeground(hexColor);\n const derivedTokens = computeDerivedTokens('--color-accent', hexColor, mode);\n\n set((state) => ({\n customColors: {\n ...state.customColors,\n [theme]: {\n ...state.customColors[theme],\n [mode]: {\n ...currentPalette,\n accent: hexColor,\n accentForeground,\n derivedTokens: {\n ...currentPalette.derivedTokens,\n ...derivedTokens,\n },\n },\n },\n },\n }));\n },\n\n applyColorPalette: (theme, mode, colors: {\n primary: string;\n secondary?: string;\n accent?: string;\n name?: string;\n description?: string;\n }) => {\n // Generate complete color palette with all three colors in a single atomic update\n const scale = generateColorScale(colors.primary);\n const primaryForeground = getOptimalForeground(colors.primary);\n\n // Compute all derived tokens\n let derivedTokens = computeDerivedTokens('--color-primary', colors.primary, mode);\n\n // Add secondary color if provided\n let secondary = colors.secondary;\n let secondaryForeground = secondary ? getOptimalForeground(secondary) : undefined;\n if (secondary) {\n const secondaryDerived = computeDerivedTokens('--color-secondary', secondary, mode);\n derivedTokens = { ...derivedTokens, ...secondaryDerived };\n }\n\n // Add accent color if provided\n let accent = colors.accent;\n let accentForeground = accent ? getOptimalForeground(accent) : undefined;\n if (accent) {\n const accentDerived = computeDerivedTokens('--color-accent', accent, mode);\n derivedTokens = { ...derivedTokens, ...accentDerived };\n }\n\n const palette: ColorPalette = {\n name: colors.name,\n description: colors.description,\n primary: colors.primary,\n primaryForeground,\n secondary,\n secondaryForeground,\n accent,\n accentForeground,\n scale,\n derivedTokens,\n };\n\n set((state) => ({\n customColors: {\n ...state.customColors,\n [theme]: {\n ...state.customColors[theme],\n [mode]: palette,\n },\n },\n }));\n },\n\n resetCustomColors: (theme, mode) => {\n if (mode) {\n // Reset specific mode\n set((state) => ({\n customColors: {\n ...state.customColors,\n [theme]: {\n ...state.customColors[theme],\n [mode]: undefined,\n },\n },\n }));\n } else {\n // Reset entire theme\n set((state) => {\n const { [theme]: _, ...rest } = state.customColors;\n return { customColors: rest };\n });\n }\n },\n\n getActiveColorPalette: (theme, mode) => {\n return get().customColors[theme]?.[mode] || null;\n },\n\n // Saved palette management\n savePalette: (paletteData) => {\n const id = `custom-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const newPalette: SavedPalette = {\n ...paletteData,\n id,\n category: 'custom',\n createdAt: Date.now(),\n };\n\n set((state) => ({\n savedPalettes: [...state.savedPalettes, newPalette],\n }));\n },\n\n updatePalette: (id, updates) => {\n set((state) => ({\n savedPalettes: state.savedPalettes.map((p) =>\n p.id === id ? { ...p, ...updates } : p\n ),\n }));\n },\n\n renamePalette: (id, newName) => {\n set((state) => ({\n savedPalettes: state.savedPalettes.map((p) =>\n p.id === id ? { ...p, name: newName } : p\n ),\n }));\n },\n\n deletePalette: (id) => {\n set((state) => ({\n savedPalettes: state.savedPalettes.filter((p) => p.id !== id),\n }));\n },\n\n reorderPalettes: (palettes) => {\n set({ savedPalettes: palettes });\n },\n\n getSavedPalettes: () => {\n return get().savedPalettes;\n },\n\n // Font theme management\n applyFontTheme: (theme, mode, fontTheme) => {\n set((state) => ({\n customFontThemes: {\n ...state.customFontThemes,\n [theme]: {\n ...state.customFontThemes[theme],\n [mode]: fontTheme,\n },\n },\n }));\n },\n\n resetCustomFonts: (theme, mode) => {\n if (mode) {\n // Reset specific mode\n set((state) => ({\n customFontThemes: {\n ...state.customFontThemes,\n [theme]: {\n ...state.customFontThemes[theme],\n [mode]: undefined,\n },\n },\n }));\n } else {\n // Reset entire theme\n set((state) => {\n const { [theme]: _, ...rest } = state.customFontThemes;\n return { customFontThemes: rest };\n });\n }\n },\n\n getActiveFontTheme: (theme, mode) => {\n return get().customFontThemes[theme]?.[mode] || null;\n },\n\n // Saved font theme management\n saveFontTheme: (fontThemeData) => {\n const id = `font-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const newFontTheme: SavedFontTheme = {\n ...fontThemeData,\n id,\n category: 'custom',\n createdAt: Date.now(),\n isCustom: true,\n };\n\n set((state) => ({\n savedFontThemes: [...state.savedFontThemes, newFontTheme],\n }));\n },\n\n updateFontTheme: (id, updates) => {\n set((state) => ({\n savedFontThemes: state.savedFontThemes.map((ft) =>\n ft.id === id ? { ...ft, ...updates } : ft\n ),\n }));\n },\n\n renameFontTheme: (id, newName) => {\n set((state) => ({\n savedFontThemes: state.savedFontThemes.map((ft) =>\n ft.id === id ? { ...ft, name: newName } : ft\n ),\n }));\n },\n\n deleteFontTheme: (id) => {\n set((state) => ({\n savedFontThemes: state.savedFontThemes.filter((ft) => ft.id !== id),\n }));\n },\n\n reorderFontThemes: (fontThemes) => {\n set({ savedFontThemes: fontThemes });\n },\n\n getSavedFontThemes: () => {\n return get().savedFontThemes;\n },\n }),\n {\n name: 'ecosystem-customizer',\n version: 4,\n partialize: (state) => ({\n motion: state.motion,\n prefersReducedMotion: state.prefersReducedMotion,\n customizationMode: state.customizationMode,\n customColors: state.customColors,\n savedPalettes: state.savedPalettes,\n customFontThemes: state.customFontThemes,\n savedFontThemes: state.savedFontThemes,\n }),\n }\n )\n);\n","/**\n * Semantic Color Utilities\n *\n * Helper functions for working with the design system's color tokens\n * and CSS variables.\n */\n\n/**\n * Color token categories\n */\nexport const colorTokens = {\n // Background colors\n background: 'var(--color-background)',\n backgroundSecondary: 'var(--color-background-secondary)',\n backgroundTertiary: 'var(--color-background-tertiary)',\n surface: 'var(--color-surface)',\n\n // Foreground/Text colors\n foreground: 'var(--color-foreground)',\n foregroundSecondary: 'var(--color-foreground-secondary)',\n foregroundTertiary: 'var(--color-foreground-tertiary)',\n textPrimary: 'var(--color-text-primary)',\n textSecondary: 'var(--color-text-secondary)',\n textMuted: 'var(--color-text-muted)',\n\n // Brand colors\n primary: 'var(--color-primary)',\n primaryForeground: 'var(--color-primary-foreground)',\n secondary: 'var(--color-secondary)',\n secondaryForeground: 'var(--color-secondary-foreground)',\n accent: 'var(--color-accent)',\n accentForeground: 'var(--color-accent-foreground)',\n\n // Semantic colors\n success: 'var(--color-success)',\n successForeground: 'var(--color-success-foreground)',\n warning: 'var(--color-warning)',\n warningForeground: 'var(--color-warning-foreground)',\n error: 'var(--color-error)',\n errorForeground: 'var(--color-error-foreground)',\n info: 'var(--color-info)',\n infoForeground: 'var(--color-info-foreground)',\n\n // Borders\n border: 'var(--color-border)',\n borderSubtle: 'var(--color-border-subtle)',\n\n // Interactive states\n hover: 'var(--color-hover)',\n active: 'var(--color-active)',\n focus: 'var(--color-focus)',\n\n // Links\n link: 'var(--color-link)',\n linkHover: 'var(--color-link-hover)',\n linkHoverForeground: 'var(--color-link-hover-foreground)',\n} as const;\n\n/**\n * Get CSS variable value from computed styles\n *\n * @param variableName - CSS variable name (with or without --)\n * @param element - Element to get computed style from (defaults to document.documentElement)\n * @returns The computed value of the CSS variable\n *\n * @example\n * ```ts\n * const primaryColor = getCSSVariable('--color-primary');\n * // Returns: '#0066ff' (or whatever the current theme's primary color is)\n * ```\n */\nexport function getCSSVariable(\n variableName: string,\n element: HTMLElement = document.documentElement\n): string {\n const name = variableName.startsWith('--') ? variableName : `--${variableName}`;\n return getComputedStyle(element).getPropertyValue(name).trim();\n}\n\n/**\n * Set CSS variable value\n *\n * @param variableName - CSS variable name (with or without --)\n * @param value - Value to set\n * @param element - Element to set the variable on (defaults to document.documentElement)\n *\n * @example\n * ```ts\n * setCSSVariable('--color-primary', '#ff0000');\n * ```\n */\nexport function setCSSVariable(\n variableName: string,\n value: string,\n element: HTMLElement = document.documentElement\n): void {\n const name = variableName.startsWith('--') ? variableName : `--${variableName}`;\n element.style.setProperty(name, value);\n}\n\n/**\n * Get contrasting foreground color for a background color\n *\n * @param backgroundToken - Background color token name (without 'var()')\n * @returns The appropriate foreground color token\n *\n * @example\n * ```ts\n * const foreground = getForegroundColor('--color-primary');\n * // Returns: 'var(--color-primary-foreground)'\n * ```\n */\nexport function getForegroundColor(backgroundToken: string): string {\n // Remove var() wrapper if present\n const token = backgroundToken.replace(/var\\(|\\)/g, '');\n\n // Map background tokens to their foreground pairs\n const foregroundMap: Record<string, string> = {\n '--color-primary': 'var(--color-primary-foreground)',\n '--color-secondary': 'var(--color-secondary-foreground)',\n '--color-accent': 'var(--color-accent-foreground)',\n '--color-success': 'var(--color-success-foreground)',\n '--color-warning': 'var(--color-warning-foreground)',\n '--color-error': 'var(--color-error-foreground)',\n '--color-info': 'var(--color-info-foreground)',\n '--color-background': 'var(--color-foreground)',\n '--color-surface': 'var(--color-text-primary)',\n };\n\n return foregroundMap[token] || 'var(--color-text-primary)';\n}\n\n/**\n * Semantic color groups for different use cases\n */\nexport const semanticColors = {\n /**\n * Status colors for indicating states\n */\n status: {\n success: {\n bg: colorTokens.success,\n fg: colorTokens.successForeground,\n },\n warning: {\n bg: colorTokens.warning,\n fg: colorTokens.warningForeground,\n },\n error: {\n bg: colorTokens.error,\n fg: colorTokens.errorForeground,\n },\n info: {\n bg: colorTokens.info,\n fg: colorTokens.infoForeground,\n },\n },\n\n /**\n * Brand colors for primary UI elements\n */\n brand: {\n primary: {\n bg: colorTokens.primary,\n fg: colorTokens.primaryForeground,\n },\n secondary: {\n bg: colorTokens.secondary,\n fg: colorTokens.secondaryForeground,\n },\n accent: {\n bg: colorTokens.accent,\n fg: colorTokens.accentForeground,\n },\n },\n\n /**\n * Interactive state colors\n */\n interactive: {\n default: {\n bg: colorTokens.background,\n fg: colorTokens.foreground,\n },\n hover: {\n bg: colorTokens.hover,\n fg: colorTokens.foreground,\n },\n active: {\n bg: colorTokens.active,\n fg: colorTokens.foreground,\n },\n focus: {\n border: colorTokens.focus,\n },\n },\n} as const;\n\n/**\n * Helper to create color pairs (background + foreground)\n *\n * @param type - Semantic color type\n * @returns Object with bg and fg (and optionally border)\n *\n * @example\n * ```tsx\n * const errorColors = getSemanticColorPair('error');\n * <div style={{\n * backgroundColor: errorColors.bg,\n * color: errorColors.fg\n * }}>\n * Error message\n * </div>\n * ```\n */\nexport function getSemanticColorPair(\n type: 'success' | 'warning' | 'error' | 'info' | 'primary' | 'secondary' | 'accent'\n): { bg: string; fg: string } {\n if (type === 'primary' || type === 'secondary' || type === 'accent') {\n return semanticColors.brand[type];\n }\n return semanticColors.status[type];\n}\n\n/**\n * Convert hex color to RGB values\n *\n * @param hex - Hex color string (with or without #)\n * @returns Object with r, g, b values (0-255)\n *\n * @example\n * ```ts\n * const rgb = hexToRgb('#0066ff');\n * // Returns: { r: 0, g: 102, b: 255 }\n * ```\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n}\n\n/**\n * Calculate relative luminance of a color (WCAG formula)\n *\n * @param r - Red value (0-255)\n * @param g - Green value (0-255)\n * @param b - Blue value (0-255)\n * @returns Relative luminance (0-1)\n */\nexport function getLuminance(r: number, g: number, b: number): number {\n const [rs, gs, bs] = [r, g, b].map((c) => {\n const srgb = c / 255;\n return srgb <= 0.03928 ? srgb / 12.92 : Math.pow((srgb + 0.055) / 1.055, 2.4);\n });\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n}\n\n/**\n * Calculate contrast ratio between two colors (WCAG formula)\n *\n * @param hex1 - First color (hex)\n * @param hex2 - Second color (hex)\n * @returns Contrast ratio (1-21)\n *\n * @example\n * ```ts\n * const ratio = getContrastRatio('#ffffff', '#000000');\n * // Returns: 21 (maximum contrast)\n * ```\n */\nexport function getContrastRatio(hex1: string, hex2: string): number {\n const rgb1 = hexToRgb(hex1);\n const rgb2 = hexToRgb(hex2);\n\n if (!rgb1 || !rgb2) return 0;\n\n const lum1 = getLuminance(rgb1.r, rgb1.g, rgb1.b);\n const lum2 = getLuminance(rgb2.r, rgb2.g, rgb2.b);\n\n const lighter = Math.max(lum1, lum2);\n const darker = Math.min(lum1, lum2);\n\n return (lighter + 0.05) / (darker + 0.05);\n}\n\n/**\n * Check if color pair meets WCAG AA contrast requirements\n *\n * @param foreground - Foreground color (hex)\n * @param background - Background color (hex)\n * @param level - WCAG level ('AA' or 'AAA')\n * @param size - Text size ('normal' or 'large')\n * @returns true if contrast ratio meets requirements\n *\n * @example\n * ```ts\n * const isAccessible = meetsContrastRequirements('#000000', '#ffffff', 'AA', 'normal');\n * // Returns: true\n * ```\n */\nexport function meetsContrastRequirements(\n foreground: string,\n background: string,\n level: 'AA' | 'AAA' = 'AA',\n size: 'normal' | 'large' = 'normal'\n): boolean {\n const ratio = getContrastRatio(foreground, background);\n\n const requirements = {\n AA: { normal: 4.5, large: 3 },\n AAA: { normal: 7, large: 4.5 },\n };\n\n return ratio >= requirements[level][size];\n}\n\n/**\n * Convert hex to HSL for manipulation\n */\nexport function hexToHSL(hex: string): { h: number; s: number; l: number } {\n const rgb = hexToRgb(hex);\n if (!rgb) return { h: 0, s: 0, l: 0 };\n\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0, s = 0, l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r: h = ((g - b) / d + (g < b ? 6 : 0)) / 6; break;\n case g: h = ((b - r) / d + 2) / 6; break;\n case b: h = ((r - g) / d + 4) / 6; break;\n }\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\n/**\n * Convert HSL to hex\n */\nexport function hslToHex(h: number, s: number, l: number): string {\n h = h / 360;\n s = s / 100;\n l = l / 100;\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1/6) return p + (q - p) * 6 * t;\n if (t < 1/2) return q;\n if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n const toHex = (x: number) => {\n const hex = Math.round(x * 255).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\n/**\n * Adjust lightness of a hex color\n * @param hex - Input color\n * @param percent - Amount to adjust (-100 to 100)\n */\nexport function adjustLightness(hex: string, percent: number): string {\n const hsl = hexToHSL(hex);\n const newL = Math.max(0, Math.min(100, hsl.l + percent));\n return hslToHex(hsl.h, hsl.s, newL);\n}\n\n/**\n * Adjust saturation of a hex color\n * @param hex - Input color\n * @param percent - Amount to adjust (-100 to 100)\n */\nexport function adjustSaturation(hex: string, percent: number): string {\n const hsl = hexToHSL(hex);\n const newS = Math.max(0, Math.min(100, hsl.s + percent));\n return hslToHex(hsl.h, newS, hsl.l);\n}\n\n/**\n * Rotate hue of a hex color\n * @param hex - Input color\n * @param degrees - Degrees to rotate (0-360)\n */\nexport function rotateHue(hex: string, degrees: number): string {\n const hsl = hexToHSL(hex);\n const newH = (hsl.h + degrees) % 360;\n return hslToHex(newH, hsl.s, hsl.l);\n}\n\n/**\n * Add opacity to a hex color (returns rgba CSS value)\n * @param hex - Input color\n * @param opacity - Opacity (0-1)\n */\nexport function adjustOpacity(hex: string, opacity: number): string {\n const rgb = hexToRgb(hex);\n if (!rgb) return hex;\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`;\n}\n\n/**\n * Get optimal foreground color (white or black) for a background\n * Uses WCAG contrast formula\n */\nexport function getOptimalForeground(\n bgHex: string,\n whiteHex: string = '#ffffff',\n blackHex: string = '#000000'\n): string {\n const whiteRatio = getContrastRatio(bgHex, whiteHex);\n const blackRatio = getContrastRatio(bgHex, blackHex);\n\n return whiteRatio > blackRatio ? whiteHex : blackHex;\n}\n\n/**\n * Generate a complete tint/shade scale (like Tailwind)\n * Returns 50, 100, 200, ..., 900 variants\n */\nexport function generateColorScale(baseHex: string): Record<number, string> {\n const hsl = hexToHSL(baseHex);\n\n return {\n 50: hslToHex(hsl.h, Math.max(hsl.s - 10, 20), 95),\n 100: hslToHex(hsl.h, Math.max(hsl.s - 5, 30), 90),\n 200: hslToHex(hsl.h, hsl.s, 80),\n 300: hslToHex(hsl.h, hsl.s, 70),\n 400: hslToHex(hsl.h, hsl.s, 60),\n 500: baseHex, // Base color\n 600: hslToHex(hsl.h, Math.min(hsl.s + 5, 100), 45),\n 700: hslToHex(hsl.h, Math.min(hsl.s + 10, 100), 35),\n 800: hslToHex(hsl.h, Math.min(hsl.s + 15, 100), 25),\n 900: hslToHex(hsl.h, Math.min(hsl.s + 20, 100), 15),\n };\n}\n\n/**\n * Color utilities for common operations\n */\nexport const colorUtils = {\n getCSSVariable,\n setCSSVariable,\n getForegroundColor,\n getSemanticColorPair,\n hexToRgb,\n hexToHSL,\n hslToHex,\n adjustLightness,\n adjustSaturation,\n rotateHue,\n adjustOpacity,\n getOptimalForeground,\n generateColorScale,\n getContrastRatio,\n meetsContrastRequirements,\n} as const;\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","'use client';\n\n/**\n * ColorPicker Component\n * Combined visual color picker and hex input for selecting colors\n */\n\nimport { useState, useEffect } from 'react';\nimport { Label } from './Label';\nimport { Input } from './Input';\n\nexport interface ColorPickerProps {\n label?: string;\n description?: string;\n value: string; // Hex color value\n onChange: (hex: string) => void;\n optional?: boolean;\n disabled?: boolean;\n}\n\nexport function ColorPicker({\n label,\n description,\n value,\n onChange,\n optional = false,\n disabled = false,\n}: ColorPickerProps) {\n const [hexInput, setHexInput] = useState(value);\n const [isValid, setIsValid] = useState(true);\n\n // Sync hex input with value prop\n useEffect(() => {\n setHexInput(value);\n }, [value]);\n\n // Validate hex color format\n const validateHex = (hex: string): boolean => {\n return /^#[0-9A-Fa-f]{6}$/.test(hex);\n };\n\n const handleHexChange = (newHex: string) => {\n setHexInput(newHex);\n\n if (validateHex(newHex)) {\n setIsValid(true);\n onChange(newHex);\n } else {\n setIsValid(false);\n }\n };\n\n const handleColorPickerChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newColor = e.target.value;\n setHexInput(newColor);\n setIsValid(true);\n onChange(newColor);\n };\n\n return (\n <div className=\"space-y-2\">\n {label && (\n <div className=\"flex items-baseline justify-between\">\n <Label className=\"text-sm font-medium\">\n {label}\n {optional && <span className=\"text-xs text-muted-foreground ml-1\">(optional)</span>}\n </Label>\n </div>\n )}\n\n {description && (\n <p className=\"text-xs text-muted-foreground\">\n {description}\n </p>\n )}\n\n <div className=\"flex gap-3 items-center\">\n {/* Visual Color Picker */}\n <div className=\"relative\">\n <input\n type=\"color\"\n value={hexInput}\n onChange={handleColorPickerChange}\n disabled={disabled}\n className=\"\n w-16 h-16\n rounded-lg\n cursor-pointer\n border-2 border-border\n disabled:opacity-50 disabled:cursor-not-allowed\n transition-all\n hover:scale-105\n \"\n title=\"Pick a color\"\n />\n </div>\n\n {/* Hex Input */}\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={hexInput}\n onChange={(e) => handleHexChange(e.target.value)}\n placeholder=\"#000000\"\n disabled={disabled}\n className={`font-mono ${!isValid ? 'border-error' : ''}`}\n aria-invalid={!isValid}\n />\n {!isValid && (\n <p className=\"text-xs text-error mt-1\">\n Invalid hex format (use #RRGGBB)\n </p>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cn } from \"../../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> { }\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, ChevronsUpDown } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../actions/Button\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../navigation/Command\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../overlays/Popover\"\n\nexport interface ComboboxOption {\n value: string\n label: string\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[]\n value?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n searchPlaceholder?: string\n emptyMessage?: string\n className?: string\n disabled?: boolean\n}\n\nexport function Combobox({\n options = [],\n value,\n onValueChange,\n placeholder = \"Select option...\",\n searchPlaceholder = \"Search...\",\n emptyMessage = \"No option found.\",\n className,\n disabled = false,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false)\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n className={cn(\"w-full justify-between\", className)}\n disabled={disabled}\n >\n {value\n ? options.find((option) => option.value === value)?.label\n : placeholder}\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-full p-0\">\n <Command>\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyMessage}</CommandEmpty>\n <CommandGroup>\n {options.map((option) => (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={(currentValue) => {\n onValueChange?.(currentValue === value ? \"\" : currentValue)\n setOpen(false)\n }}\n >\n <Check\n className={cn(\n \"mr-2 h-4 w-4\",\n value === option.value ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { Search } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Dialog, DialogContent } from \"../overlays/Dialog\"\n\nconst Command: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof CommandPrimitive> & React.RefAttributes<React.ElementRef<typeof CommandPrimitive>>\n> = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n))\nCommand.displayName = CommandPrimitive.displayName\n\nconst CommandDialog = ({ children, ...props }: React.ComponentProps<typeof Dialog>) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst CommandInput: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input> & React.RefAttributes<React.ElementRef<typeof CommandPrimitive.Input>>\n> = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List> & React.RefAttributes<React.ElementRef<typeof CommandPrimitive.List>>\n> = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty> & React.RefAttributes<React.ElementRef<typeof CommandPrimitive.Empty>>\n> = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n))\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group> & React.RefAttributes<React.ElementRef<typeof CommandPrimitive.Group>>\n> = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator> & React.RefAttributes<React.ElementRef<typeof CommandPrimitive.Separator>>\n> = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item> & React.RefAttributes<React.ElementRef<typeof CommandPrimitive.Item>>\n> = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50\",\n className\n )}\n {...props}\n />\n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\nCommandShortcut.displayName = \"CommandShortcut\"\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandSeparator,\n CommandShortcut,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <X />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","'use client';\n\nimport React, { createContext, useContext } from 'react';\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n rectSortingStrategy,\n SortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { GripVertical } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Item interface for drag and drop lists\n */\nexport interface DragDropItem {\n id: string;\n [key: string]: any;\n}\n\n/**\n * Context for sharing drag handle listeners\n */\ninterface DragHandleContextValue {\n attributes: any;\n listeners: any;\n setActivatorNodeRef?: (element: HTMLElement | null) => void;\n}\n\nconst DragHandleContext = createContext<DragHandleContextValue | null>(null);\n\n/**\n * Props for DragDropList component\n */\nexport interface DragDropListProps<T extends DragDropItem> {\n /**\n * Array of items to display\n */\n items: T[];\n /**\n * Callback fired when items are reordered\n */\n onReorder: (items: T[]) => void;\n /**\n * Render function for each item\n */\n renderItem: (item: T, isDragging: boolean) => React.ReactNode;\n /**\n * Enable drag handle mode (only drag from handle)\n * @default false\n */\n withHandle?: boolean;\n /**\n * Custom class name for the list container\n */\n className?: string;\n /**\n * Custom class name for list items\n */\n itemClassName?: string;\n /**\n * Sorting strategy for the drag & drop behavior\n * - verticalListSortingStrategy: For vertical lists (default)\n * - rectSortingStrategy: For grid layouts\n * @default verticalListSortingStrategy\n */\n strategy?: SortingStrategy;\n}\n\n/**\n * Props for sortable item\n */\ninterface SortableItemProps {\n id: string;\n children: React.ReactNode;\n withHandle?: boolean;\n className?: string;\n}\n\n/**\n * Internal sortable item component\n */\nfunction SortableItem({ id, children, withHandle, className }: SortableItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n // If using handle, don't attach listeners to the item\n const itemProps = withHandle ? {} : { ...listeners, ...attributes };\n\n const content = withHandle ? (\n <DragHandleContext.Provider value={{ attributes, listeners, setActivatorNodeRef }}>\n {children}\n </DragHandleContext.Provider>\n ) : (\n children\n );\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'relative transition-opacity',\n isDragging && 'z-50',\n className\n )}\n {...itemProps}\n >\n {content}\n </div>\n );\n}\n\n/**\n * Drag handle component for manual drag control\n * Must be used within a DragDropList with withHandle={true}\n */\nexport interface DragDropHandleProps {\n /**\n * Custom class name\n */\n className?: string;\n /**\n * Handle icon\n */\n icon?: React.ReactNode;\n}\n\nexport function DragDropHandle({ className, icon }: DragDropHandleProps) {\n const context = useContext(DragHandleContext);\n\n if (!context) {\n console.warn('DragDropHandle must be used within a DragDropList with withHandle={true}');\n return null;\n }\n\n const { attributes, listeners, setActivatorNodeRef } = context;\n\n return (\n <div\n ref={setActivatorNodeRef}\n {...attributes}\n {...listeners}\n className={cn(\n 'flex items-center justify-center cursor-grab active:cursor-grabbing',\n 'text-[var(--color-text-secondary)] hover:text-[var(--color-foreground)]',\n 'transition-colors',\n className\n )}\n >\n {icon || <GripVertical className=\"w-4 h-4\" />}\n </div>\n );\n}\n\n/**\n * DragDropList - Sortable list component with drag and drop functionality\n *\n * @example\n * ```tsx\n * const [items, setItems] = useState([\n * { id: '1', name: 'Item 1' },\n * { id: '2', name: 'Item 2' },\n * ]);\n *\n * <DragDropList\n * items={items}\n * onReorder={setItems}\n * renderItem={(item) => (\n * <div className=\"p-4 bg-surface rounded\">{item.name}</div>\n * )}\n * />\n * ```\n */\nexport function DragDropList<T extends DragDropItem>({\n items,\n onReorder,\n renderItem,\n withHandle = false,\n className,\n itemClassName,\n strategy = verticalListSortingStrategy,\n}: DragDropListProps<T>) {\n const [activeId, setActiveId] = React.useState<string | null>(null);\n\n // Configure sensors for touch/mouse/keyboard support\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5, // Prevents accidental drags on mobile\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id as string);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (over && active.id !== over.id) {\n const oldIndex = items.findIndex((item) => item.id === active.id);\n const newIndex = items.findIndex((item) => item.id === over.id);\n onReorder(arrayMove(items, oldIndex, newIndex));\n }\n\n setActiveId(null);\n };\n\n const activeItem = items.find((item) => item.id === activeId);\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={items} strategy={strategy}>\n <div className={cn(strategy === verticalListSortingStrategy && 'space-y-2', className)}>\n {items.map((item) => (\n <SortableItem\n key={item.id}\n id={item.id}\n withHandle={withHandle}\n className={itemClassName}\n >\n {renderItem(item, item.id === activeId)}\n </SortableItem>\n ))}\n </div>\n </SortableContext>\n\n <DragOverlay>\n {activeId && activeItem ? (\n <div className=\"opacity-80 shadow-lg\">\n {renderItem(activeItem, true)}\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n}\n\n/**\n * Props for DragDropTable component\n */\nexport interface DragDropTableProps<T extends DragDropItem> {\n /**\n * Array of items to display\n */\n items: T[];\n /**\n * Callback fired when items are reordered\n */\n onReorder: (items: T[]) => void;\n /**\n * Table columns configuration\n */\n columns: {\n key: string;\n header: string;\n render?: (item: T) => React.ReactNode;\n }[];\n /**\n * Custom class name for the table\n */\n className?: string;\n}\n\n/**\n * DragDropTable - Sortable table with draggable rows\n *\n * @example\n * ```tsx\n * <DragDropTable\n * items={data}\n * onReorder={setData}\n * columns={[\n * { key: 'name', header: 'Name' },\n * { key: 'email', header: 'Email' },\n * ]}\n * />\n * ```\n */\nexport function DragDropTable<T extends DragDropItem>({\n items,\n onReorder,\n columns,\n className,\n}: DragDropTableProps<T>) {\n const [activeId, setActiveId] = React.useState<string | null>(null);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id as string);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (over && active.id !== over.id) {\n const oldIndex = items.findIndex((item) => item.id === active.id);\n const newIndex = items.findIndex((item) => item.id === over.id);\n onReorder(arrayMove(items, oldIndex, newIndex));\n }\n\n setActiveId(null);\n };\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <div className={cn('overflow-x-auto', className)}>\n <table className=\"w-full border-collapse\">\n <thead>\n <tr className=\"border-b border-[var(--color-border)]\">\n <th className=\"w-12\"></th>\n {columns.map((column) => (\n <th\n key={column.key}\n className=\"text-left p-3 text-sm font-medium text-[var(--color-text-secondary)]\"\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {items.map((item) => (\n <TableRow\n key={item.id}\n item={item}\n columns={columns}\n isDragging={item.id === activeId}\n />\n ))}\n </SortableContext>\n </tbody>\n </table>\n </div>\n </DndContext>\n );\n}\n\ninterface TableRowProps<T extends DragDropItem> {\n item: T;\n columns: { key: string; header: string; render?: (item: T) => React.ReactNode }[];\n isDragging: boolean;\n}\n\nfunction TableRow<T extends DragDropItem>({ item, columns, isDragging }: TableRowProps<T>) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n } = useSortable({ id: item.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <tr\n ref={setNodeRef}\n style={style}\n className={cn(\n 'border-b border-[var(--color-border)] hover:bg-[var(--color-hover)]',\n 'transition-colors',\n isDragging && 'bg-[var(--color-active)]'\n )}\n >\n <td className=\"p-3\">\n <div\n {...attributes}\n {...listeners}\n className=\"cursor-grab active:cursor-grabbing text-[var(--color-text-secondary)] hover:text-[var(--color-foreground)] transition-colors\"\n >\n <GripVertical className=\"w-4 h-4\" />\n </div>\n </td>\n {columns.map((column) => (\n <td key={column.key} className=\"p-3 text-sm\">\n {column.render ? column.render(item) : (item as any)[column.key]}\n </td>\n ))}\n </tr>\n );\n}\n","import React from 'react';\n\nexport interface FilterButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n active?: boolean;\n count?: number;\n children: React.ReactNode;\n /**\n * Shape of the button\n * @default 'pill'\n */\n shape?: 'pill' | 'rounded';\n}\n\nexport const FilterButton = React.forwardRef<HTMLButtonElement, FilterButtonProps>(\n ({ active = false, count, children, shape = 'pill', className = '', ...props }, ref) => {\n const shapes = {\n pill: \"rounded-full\",\n rounded: \"rounded-lg\"\n };\n\n return (\n <button\n ref={ref}\n className={`\n flex items-center gap-2 px-4 py-2 ${shapes[shape]} text-sm font-medium transition-all duration-200\n border\n ${active\n ? 'bg-[var(--color-primary)] border-[var(--color-primary)] text-[var(--color-primary-foreground)] shadow-[var(--effect-shadow-sm)]'\n : 'bg-[var(--color-surface)] border-[var(--color-border)] text-[var(--color-text-secondary)] hover:border-[var(--color-primary)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-background)]'\n }\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)] focus-visible:ring-offset-2\n disabled:opacity-50 disabled:cursor-not-allowed\n ${className}\n `}\n aria-pressed={active}\n {...props}\n >\n <span>{children}</span>\n {count !== undefined && (\n <span\n className={`\n flex items-center justify-center min-w-[1.25rem] h-5 px-1.5 rounded-full text-xs font-bold\n ${active\n ? 'bg-[var(--color-background)] text-[var(--color-primary)]'\n : 'bg-[var(--color-border)] text-[var(--color-text-secondary)]'\n }\n `}\n >\n {count}\n </span>\n )}\n </button>\n );\n }\n);\n\nFilterButton.displayName = 'FilterButton';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n ControllerProps,\n FieldPath,\n FieldValues,\n FormProvider,\n useFormContext,\n} from \"react-hook-form\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./Label\"\n\nconst Form: typeof FormProvider = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nconst FormItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n </FormItemContext.Provider>\n )\n})\nFormItem.displayName = \"FormItem\"\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n ref={ref}\n className={cn(error && \"text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = \"FormLabel\"\n\nconst FormControl = React.forwardRef<\n React.ElementRef<typeof Slot>,\n React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n})\nFormControl.displayName = \"FormControl\"\n\nconst FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = \"FormDescription\"\n\nconst FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn(\"text-sm font-medium text-destructive\", className)}\n {...props}\n >\n {body}\n </p>\n )\n})\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { Dot } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst InputOTP: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof OTPInput> & React.RefAttributes<React.ElementRef<typeof OTPInput>>\n> = React.forwardRef<\n React.ElementRef<typeof OTPInput>,\n React.ComponentPropsWithoutRef<typeof OTPInput>\n>(({ className, containerClassName, ...props }, ref) => (\n <OTPInput\n ref={ref}\n containerClassName={cn(\n \"flex items-center gap-2 has-[:disabled]:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n))\nInputOTP.displayName = \"InputOTP\"\n\nconst InputOTPGroup: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"div\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<\"div\">>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center\", className)} {...props} />\n )\n)\nInputOTPGroup.displayName = \"InputOTPGroup\"\n\nconst InputOTPSlot: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"div\"> & { index: number } & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & { index: number }\n>(({ index, className, ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index]\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md\",\n isActive && \"z-10 ring-2 ring-ring ring-offset-background\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"h-4 w-px animate-caret-blink bg-foreground duration-1000\" />\n </div>\n )}\n </div>\n )\n})\nInputOTPSlot.displayName = \"InputOTPSlot\"\n\nconst InputOTPSeparator: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"div\"> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<\"div\">>(\n ({ ...props }, ref) => (\n <div ref={ref} role=\"separator\" {...props}>\n <Dot />\n </div>\n )\n)\nInputOTPSeparator.displayName = \"InputOTPSeparator\"\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n","'use client';\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { TextField, type TextFieldProps } from './TextField';\n\nexport interface SearchBarProps extends Omit<TextFieldProps, 'variant'> {\n /**\n * Callback fired when search value changes (after debounce)\n */\n onSearch?: (value: string) => void;\n\n /**\n * Debounce delay in milliseconds\n * @default 300\n */\n debounceMs?: number;\n\n /**\n * Show clear button when input has value\n * @default true\n */\n showClearButton?: boolean;\n\n /**\n * Callback fired when clear button is clicked\n */\n onClear?: () => void;\n\n /**\n * Keyboard shortcut to display when empty (e.g. \"⌘K\")\n * @default \"⌘K\"\n */\n shortcut?: React.ReactNode;\n}\n\n/**\n * SearchBar Component\n *\n * A specialized text field for search functionality with built-in\n * search icon, optional clear button, shortcut badge, and debounced onChange.\n *\n * **Note:** SearchBar always uses the `outlined` variant and does not\n * accept a variant prop. This ensures consistent search field styling.\n *\n * Features:\n * - Search icon on the left\n * - Optional clear button (X) on the right\n * - Shortcut badge (⌘K) when empty\n * - Debounced search callback to reduce API calls\n * - All TextField features (sizes, error states, etc.)\n * - Theme-aware colors\n * - Keyboard accessible (Escape to clear)\n *\n * Example:\n * ```tsx\n * <SearchBar\n * placeholder=\"Search products...\"\n * onSearch={(query) => fetchResults(query)}\n * debounceMs={500}\n * />\n * ```\n */\nexport const SearchBar = React.forwardRef<HTMLInputElement, SearchBarProps>(\n (\n {\n onSearch,\n debounceMs = 300,\n showClearButton = true,\n onClear,\n value: controlledValue,\n onChange,\n placeholder = 'Search',\n className = '',\n shortcut = '⌘K',\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState(controlledValue || '');\n\n // Update internal value when controlled value changes\n useEffect(() => {\n if (controlledValue !== undefined) {\n setInternalValue(controlledValue);\n }\n }, [controlledValue]);\n\n // Debounced search callback\n useEffect(() => {\n if (!onSearch) return;\n\n const timer = setTimeout(() => {\n onSearch(String(internalValue));\n }, debounceMs);\n\n return () => clearTimeout(timer);\n }, [internalValue, debounceMs, onSearch]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n onChange?.(e);\n },\n [onChange]\n );\n\n const handleClear = useCallback(() => {\n setInternalValue('');\n onClear?.();\n // Create synthetic event for controlled components\n if (onChange) {\n const syntheticEvent = {\n target: { value: '' },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n }, [onChange, onClear]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape' && internalValue) {\n handleClear();\n }\n props.onKeyDown?.(e);\n },\n [internalValue, handleClear, props]\n );\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const showClear = showClearButton && value;\n const showShortcut = !value && shortcut;\n\n return (\n <div className={`relative w-full ${className}`}>\n {/* Search Icon */}\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-[var(--color-text-muted)]\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n </div>\n\n <TextField\n ref={ref}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n variant=\"outlined\"\n className=\"pl-10 !bg-[var(--color-surface)] !border !border-[var(--color-border)]\"\n style={{ paddingRight: (showClear || showShortcut) ? '3rem' : undefined }}\n {...props}\n />\n\n {/* Shortcut Badge */}\n {showShortcut && (\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <kbd className=\"px-2 py-0.5 text-xs font-mono text-[var(--color-text-primary)] bg-[var(--color-background)] border border-[var(--color-border)] rounded shadow-sm\">\n {shortcut}\n </kbd>\n </div>\n )}\n\n {/* Clear Button */}\n {showClear && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"\n absolute right-3 top-1/2 -translate-y-1/2\n p-1 rounded-full\n text-[var(--color-text-muted)]\n hover:text-[var(--color-text-primary)]\n hover:bg-[var(--color-hover)]\n transition-colors\n focus:outline-none\n focus:ring-2\n focus:ring-[var(--color-focus)]\n focus:ring-opacity-50\n \"\n aria-label=\"Clear search\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n )}\n </div>\n );\n }\n);\n\nSearchBar.displayName = 'SearchBar';\n","import React, { forwardRef } from 'react';\n\nexport interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /**\n * Visual variant of the text field\n * @default 'outlined'\n */\n variant?: 'outlined' | 'filled';\n\n /**\n * Size of the text field\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Error state\n * @default false\n */\n error?: boolean;\n\n /**\n * Helper text displayed below the input\n */\n helperText?: string;\n\n /**\n * Label for the input\n */\n label?: string;\n\n /**\n * Whether the field is required\n * @default false\n */\n required?: boolean;\n}\n\n/**\n * TextField Component\n *\n * A text input field with support for outlined and filled variants,\n * multiple sizes, error states, and helper text.\n *\n * Features:\n * - Two visual variants (outlined, filled)\n * - Three size options (sm, md, lg)\n * - Error state with red border\n * - Optional label and helper text\n * - Theme-aware colors using CSS variables\n * - Full keyboard accessibility\n * - Ref forwarding support\n */\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n (\n {\n variant = 'outlined',\n size = 'md',\n error = false,\n helperText,\n label,\n required = false,\n className = '',\n id,\n ...props\n },\n ref\n ) => {\n // Generate unique ID if not provided\n const inputId = id || `textfield-${Math.random().toString(36).substr(2, 9)}`;\n const helperTextId = helperText ? `${inputId}-helper` : undefined;\n\n // Size classes\n const sizeClasses = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-5 py-3 text-lg',\n };\n\n // Variant classes\n const variantClasses = {\n outlined: `\n bg-[var(--color-surface)]\n border-2\n ${error ? 'border-[var(--color-error)]' : 'border-[var(--color-border)]'}\n focus:border-[var(--color-primary)]\n `,\n filled: `\n bg-[var(--color-surface)]\n border-2 border-transparent\n ${error ? 'border-[var(--color-error)]' : ''}\n focus:border-[var(--color-primary)]\n `,\n };\n\n const baseClasses = `\n w-full\n rounded-lg\n text-[var(--color-text-primary)]\n placeholder:text-[var(--color-text-muted)]\n transition-colors\n duration-200\n focus:outline-none\n focus:ring-2\n focus:ring-[var(--color-focus)]\n focus:ring-opacity-50\n disabled:opacity-50\n disabled:cursor-not-allowed\n `;\n\n return (\n <div className=\"w-full\">\n {label && (\n <label\n htmlFor={inputId}\n className=\"block mb-2 text-sm font-medium text-[var(--color-text-primary)]\"\n >\n {label}\n {required && <span className=\"text-[var(--color-error)] ml-1\">*</span>}\n </label>\n )}\n\n <input\n ref={ref}\n id={inputId}\n aria-describedby={helperTextId}\n aria-invalid={error}\n aria-required={required}\n className={`\n ${baseClasses}\n ${sizeClasses[size]}\n ${variantClasses[variant]}\n ${className}\n `}\n {...props}\n />\n\n {helperText && (\n <p\n id={helperTextId}\n className={`\n mt-2 text-sm\n ${error ? 'text-[var(--color-error)]' : 'text-[var(--color-text-secondary)]'}\n `}\n >\n {helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nTextField.displayName = 'TextField';\n","\"use client\"\n\nimport * as React from \"react\"\nimport type {\n ComponentPropsWithoutRef,\n ElementRef,\n} from \"react\"\nimport {\n Root,\n Group,\n Value,\n Trigger,\n Content,\n Label,\n Item,\n ItemText,\n ItemIndicator,\n Separator as SelectSeparator,\n ScrollUpButton,\n ScrollDownButton,\n Viewport,\n Portal,\n Icon as SelectIcon,\n} from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Select = Root\n\nconst SelectGroup = Group\n\nconst SelectValue = Value\n\nconst SelectTrigger = React.forwardRef<\n ElementRef<typeof Trigger>,\n ComponentPropsWithoutRef<typeof Trigger>\n>(({ className, children, ...props }, ref) => (\n <Trigger\n ref={ref}\n className={cn(\n \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectIcon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectIcon>\n </Trigger>\n))\nSelectTrigger.displayName = Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n ElementRef<typeof ScrollUpButton>,\n ComponentPropsWithoutRef<typeof ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </ScrollUpButton>\n))\nSelectScrollUpButton.displayName = ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n ElementRef<typeof ScrollDownButton>,\n ComponentPropsWithoutRef<typeof ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </ScrollDownButton>\n))\nSelectScrollDownButton.displayName = ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n ElementRef<typeof Content>,\n ComponentPropsWithoutRef<typeof Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <Portal>\n <Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </Viewport>\n <SelectScrollDownButton />\n </Content>\n </Portal>\n))\nSelectContent.displayName = Content.displayName\n\nconst SelectLabel = React.forwardRef<\n ElementRef<typeof Label>,\n ComponentPropsWithoutRef<typeof Label>\n>(({ className, ...props }, ref) => (\n <Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = Label.displayName\n\nconst SelectItem = React.forwardRef<\n ElementRef<typeof Item>,\n ComponentPropsWithoutRef<typeof Item>\n>(({ className, children, ...props }, ref) => (\n <Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </ItemIndicator>\n </span>\n <ItemText>{children}</ItemText>\n </Item>\n))\nSelectItem.displayName = Item.displayName\n\nconst SelectSeparatorComp = React.forwardRef<\n ElementRef<typeof SelectSeparator>,\n ComponentPropsWithoutRef<typeof SelectSeparator>\n>(({ className, ...props }, ref) => (\n <SelectSeparator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparatorComp.displayName = SelectSeparator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparatorComp as SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Slider: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> & React.RefAttributes<React.ElementRef<typeof SliderPrimitive.Root>>\n> = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20\">\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-4 w-4 rounded-full border border-primary/50 bg-background shadow transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n))\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> { }\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\nimport { Switch } from '../forms/Switch';\n\nexport interface ThemeSwitcherProps {\n /**\n * Size of the switcher\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Initial expanded state\n * @default false\n */\n defaultExpanded?: boolean;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * ThemeSwitcher Molecule\n *\n * An enhanced theme control panel with expandable options for comprehensive theme management.\n *\n * Features:\n * - Quick toggle between light and dark modes\n * - Expandable panel with additional controls\n * - System/Auto mode preference\n * - Visual preview of current mode\n * - Smooth animations and transitions\n * - Full keyboard accessibility\n * - Theme-aware colors\n *\n * Example:\n * ```tsx\n * // Basic usage\n * <ThemeSwitcher />\n *\n * // Expanded by default\n * <ThemeSwitcher defaultExpanded />\n *\n * // Large size\n * <ThemeSwitcher size=\"lg\" />\n * ```\n */\nexport const ThemeSwitcher: React.FC<ThemeSwitcherProps> = ({\n size = 'md',\n defaultExpanded = false,\n className = '',\n}) => {\n const { mode, setMode } = useTheme();\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n const [useSystemTheme, setUseSystemTheme] = useState(false);\n\n const toggleMode = () => {\n setMode(mode === 'light' ? 'dark' : 'light');\n };\n\n const sizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n const iconSizes = {\n sm: 16,\n md: 20,\n lg: 24,\n };\n\n const iconSize = iconSizes[size];\n\n return (\n <div className={`relative ${className}`}>\n {/* Main Toggle Button */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={toggleMode}\n className={`\n p-2.5\n rounded-lg\n bg-[var(--color-surface)]\n border border-[var(--color-border)]\n text-[var(--color-text-primary)]\n hover:bg-[var(--color-hover)]\n active:bg-[var(--color-active)]\n transition-all duration-200\n focus-visible:outline-none\n focus-visible:ring-2\n focus-visible:ring-[var(--color-focus)]\n focus-visible:ring-offset-2\n `}\n aria-label={`Switch to ${mode === 'light' ? 'dark' : 'light'} mode`}\n title={`Switch to ${mode === 'light' ? 'dark' : 'light'} mode`}\n >\n {/* Sun Icon (Light Mode) */}\n {mode === 'light' && (\n <svg\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"transition-transform duration-200\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </svg>\n )}\n\n {/* Moon Icon (Dark Mode) */}\n {mode === 'dark' && (\n <svg\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"transition-transform duration-200\"\n aria-hidden=\"true\"\n >\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />\n </svg>\n )}\n </button>\n\n {/* Expand Toggle Button */}\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className={`\n p-2.5\n rounded-lg\n bg-[var(--color-surface)]\n border border-[var(--color-border)]\n text-[var(--color-text-primary)]\n hover:bg-[var(--color-hover)]\n active:bg-[var(--color-active)]\n transition-all duration-200\n focus-visible:outline-none\n focus-visible:ring-2\n focus-visible:ring-[var(--color-focus)]\n focus-visible:ring-offset-2\n `}\n aria-label={isExpanded ? 'Hide theme options' : 'Show theme options'}\n aria-expanded={isExpanded}\n >\n <svg\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`}\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n\n {/* Expandable Options Panel */}\n {isExpanded && (\n <div\n className={`\n absolute bottom-full right-0 mb-2\n min-w-[280px]\n max-h-[80vh]\n overflow-y-auto\n p-4\n rounded-lg\n bg-[var(--color-surface)]\n border border-[var(--color-border)]\n shadow-lg\n animate-in fade-in slide-in-from-bottom-2\n duration-200\n z-50\n ${sizeClasses[size]}\n `}\n >\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"pb-3 border-b border-[var(--color-border)]\">\n <h3 className=\"font-semibold text-[var(--color-text-primary)]\">\n Theme Settings\n </h3>\n <p className=\"text-[var(--color-text-muted)] mt-1\">\n Customize your viewing experience\n </p>\n </div>\n\n {/* Current Mode Display */}\n <div className=\"space-y-2\">\n <label className=\"text-[var(--color-text-secondary)] font-medium\">\n Current Mode\n </label>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setMode('light')}\n className={`\n flex-1 py-2 px-3 rounded-md\n transition-all duration-200\n ${mode === 'light'\n ? 'bg-[var(--color-primary)] text-[var(--color-primary-foreground)] shadow-sm'\n : 'bg-[var(--color-background)] border border-[var(--color-border)] text-[var(--color-text-secondary)] hover:bg-[var(--color-hover)]'\n }\n `}\n >\n Light\n </button>\n <button\n onClick={() => setMode('dark')}\n className={`\n flex-1 py-2 px-3 rounded-md\n transition-all duration-200\n ${mode === 'dark'\n ? 'bg-[var(--color-primary)] text-[var(--color-primary-foreground)] shadow-sm'\n : 'bg-[var(--color-background)] border border-[var(--color-border)] text-[var(--color-text-secondary)] hover:bg-[var(--color-hover)]'\n }\n `}\n >\n Dark\n </button>\n </div>\n </div>\n\n {/* System Theme Option */}\n <div className=\"space-y-2\">\n <label className=\"flex items-center justify-between\">\n <span className=\"text-[var(--color-text-secondary)] font-medium\">\n Use System Theme\n </span>\n <Switch\n checked={useSystemTheme}\n onCheckedChange={setUseSystemTheme}\n />\n </label>\n <p className=\"text-[var(--color-text-muted)]\">\n Automatically match your system's theme preference\n </p>\n </div>\n\n {/* Preview */}\n <div className=\"space-y-2\">\n <label className=\"text-[var(--color-text-secondary)] font-medium\">\n Preview\n </label>\n <div className={`\n p-3 rounded-md border border-[var(--color-border)]\n bg-[var(--color-background)]\n `}>\n <div className=\"flex items-center gap-2\">\n <div className=\"w-8 h-8 rounded bg-[var(--color-primary)]\" />\n <div className=\"flex-1 space-y-1\">\n <div className=\"h-2 bg-[var(--color-text-primary)] rounded w-3/4 opacity-70\" />\n <div className=\"h-2 bg-[var(--color-text-secondary)] rounded w-1/2 opacity-50\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nThemeSwitcher.displayName = 'ThemeSwitcher';\n","/**\n * Theme Store\n * Manages theme and color mode state with localStorage persistence\n */\n\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\nimport type { ThemeName, ColorMode } from '@sage/tokens';\n\n// Re-export types for convenience\nexport type { ThemeName, ColorMode };\n\ninterface ThemeState {\n // Current theme and mode\n theme: ThemeName;\n mode: ColorMode;\n\n // Actions\n setTheme: (theme: ThemeName) => void;\n setMode: (mode: ColorMode) => void;\n toggleMode: () => void;\n\n // Computed\n themeConfig: { name: ThemeName; mode: ColorMode };\n}\n\nexport const useThemeStore = create<ThemeState>()(\n persist(\n (set, get) => ({\n // Defaults\n theme: 'volt',\n mode: 'dark',\n\n // Actions\n setTheme: (theme) => set({ theme }),\n setMode: (mode) => set({ mode }),\n toggleMode: () =>\n set((state) => ({ mode: state.mode === 'light' ? 'dark' : 'light' })),\n\n // Computed\n get themeConfig() {\n const state = get();\n return { name: state.theme, mode: state.mode };\n },\n }),\n {\n name: 'ecosystem-theme',\n // Only persist theme and mode\n partialize: (state) => ({\n theme: state.theme,\n mode: state.mode,\n }),\n }\n )\n);\n","'use client';\n\nimport { useThemeStore } from '../lib/store/theme';\nimport type { ThemeName, ColorMode } from '@sage/tokens';\n\nexport interface ThemeHook {\n /**\n * Current theme name\n */\n theme: ThemeName;\n\n /**\n * Current color mode (light/dark)\n */\n mode: ColorMode;\n\n /**\n * Set the theme\n */\n setTheme: (theme: ThemeName) => void;\n\n /**\n * Set the color mode\n */\n setMode: (mode: ColorMode) => void;\n\n /**\n * Toggle between light and dark mode\n */\n toggleMode: () => void;\n\n /**\n * Combined theme configuration\n */\n themeConfig: { name: ThemeName; mode: ColorMode };\n}\n\n/**\n * Hook to access and control theme settings\n *\n * @example\n * ```tsx\n * function ThemeSelector() {\n * const { theme, mode, setTheme, toggleMode } = useTheme();\n *\n * return (\n * <div>\n * <p>Current: {theme} - {mode}</p>\n * <button onClick={() => setTheme('sage')}>Sage Theme</button>\n * <button onClick={toggleMode}>Toggle Mode</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useTheme(): ThemeHook {\n return useThemeStore();\n}\n","'use client';\n\nimport React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\n\nexport interface ThemeToggleProps {\n /**\n * Size of the toggle button\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Whether to show the mode label next to the icon\n * @default false\n */\n showLabel?: boolean;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * ThemeToggle Molecule\n *\n * A button that toggles between light and dark modes with smooth icon transitions.\n *\n * Features:\n * - Automatic mode detection from theme context\n * - Smooth icon transition between sun (light) and moon (dark)\n * - Three size variants\n * - Optional text label\n * - Full keyboard accessibility\n * - ARIA labels for screen readers\n * - Theme-aware colors\n *\n * Example:\n * ```tsx\n * // Simple icon-only toggle\n * <ThemeToggle />\n *\n * // With label\n * <ThemeToggle showLabel />\n *\n * // Large size with label\n * <ThemeToggle size=\"lg\" showLabel />\n * ```\n */\nexport const ThemeToggle: React.FC<ThemeToggleProps> = ({\n size = 'md',\n showLabel = false,\n className = '',\n}) => {\n const { mode, setMode } = useTheme();\n\n const toggleMode = () => {\n setMode(mode === 'light' ? 'dark' : 'light');\n };\n\n const sizeClasses = {\n sm: 'p-2',\n md: 'p-2.5',\n lg: 'p-3',\n };\n\n const iconSizes = {\n sm: 16,\n md: 20,\n lg: 24,\n };\n\n const iconSize = iconSizes[size];\n\n return (\n <button\n onClick={toggleMode}\n className={`\n ${sizeClasses[size]}\n rounded-lg\n bg-[var(--color-surface)]\n border border-[var(--color-border)]\n text-[var(--color-text-primary)]\n hover:bg-[var(--color-hover)]\n active:bg-[var(--color-active)]\n transition-all duration-200\n focus-visible:outline-none\n focus-visible:ring-2\n focus-visible:ring-[var(--color-focus)]\n focus-visible:ring-offset-2\n ${showLabel ? 'flex items-center gap-2' : ''}\n ${className}\n `}\n aria-label={`Switch to ${mode === 'light' ? 'dark' : 'light'} mode`}\n title={`Switch to ${mode === 'light' ? 'dark' : 'light'} mode`}\n >\n {/* Sun Icon (Light Mode) */}\n {mode === 'light' && (\n <svg\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"transition-transform duration-200\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </svg>\n )}\n\n {/* Moon Icon (Dark Mode) */}\n {mode === 'dark' && (\n <svg\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"transition-transform duration-200\"\n aria-hidden=\"true\"\n >\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />\n </svg>\n )}\n\n {showLabel && (\n <span className=\"text-sm font-medium\">\n {mode === 'light' ? 'Light' : 'Dark'}\n </span>\n )}\n </button>\n );\n};\n\nThemeToggle.displayName = 'ThemeToggle';\n","import * as React from \"react\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Breadcrumb: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"nav\"> & { separator?: React.ReactNode } & React.RefAttributes<HTMLElement>\n> = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\"> & {\n separator?: React.ReactNode\n }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\nBreadcrumb.displayName = \"Breadcrumb\"\n\nconst BreadcrumbList: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"ol\"> & React.RefAttributes<HTMLOListElement>\n> = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<\"ol\">>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n \"flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5\",\n className\n )}\n {...props}\n />\n )\n)\nBreadcrumbList.displayName = \"BreadcrumbList\"\n\nconst BreadcrumbItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"li\"> & React.RefAttributes<HTMLLIElement>\n> = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<\"li\">>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n )\n)\nBreadcrumbItem.displayName = \"BreadcrumbItem\"\n\nconst BreadcrumbLink: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"a\"> & { asChild?: boolean } & React.RefAttributes<HTMLAnchorElement>\n> = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & {\n asChild?: boolean\n }\n>(({ className, ...props }, ref) => (\n <a\n ref={ref}\n className={cn(\"transition-colors hover:text-foreground\", className)}\n {...props}\n />\n))\nBreadcrumbLink.displayName = \"BreadcrumbLink\"\n\nconst BreadcrumbPage: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"span\"> & React.RefAttributes<HTMLSpanElement>\n> = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<\"span\">>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"font-normal text-foreground\", className)}\n {...props}\n />\n )\n)\nBreadcrumbPage.displayName = \"BreadcrumbPage\"\n\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n)\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\"\n\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = \"BreadcrumbElipssis\"\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","'use client';\n\nimport React from 'react';\n\n// Legacy BreadcrumbItemLegacy interface (kept separate from shadcn Breadcrumb)\nexport interface BreadcrumbItemLegacy {\n /**\n * Display text for the breadcrumb\n */\n label: string;\n\n /**\n * Navigation URL (href for anchor tags)\n * Omit for current/last item (will render as plain text)\n */\n href?: string;\n\n /**\n * Optional icon to display before the label\n */\n icon?: React.ReactNode;\n}\n\nexport interface BreadcrumbsProps {\n /**\n * Array of breadcrumb items (hierarchy from root to current)\n */\n items: BreadcrumbItemLegacy[];\n\n /**\n * Visual style variant\n * @default 'subtle'\n */\n variant?: 'subtle' | 'bold' | 'underline';\n\n /**\n * Custom separator between items\n * @default '/'\n */\n separator?: React.ReactNode;\n\n /**\n * ARIA label for the navigation\n * @default 'Breadcrumb'\n */\n ariaLabel?: string;\n\n /**\n * Additional CSS classes for customization\n */\n className?: string;\n\n /**\n * Callback fired when a breadcrumb link is clicked\n */\n onNavigate?: (item: BreadcrumbItemLegacy, index: number) => void;\n}\n\n/**\n * Breadcrumbs Component\n *\n * A navigation component showing page hierarchy with clickable links.\n *\n * Features:\n * - Three visual variants (subtle, bold, underline)\n * - Customizable separators\n * - Full ARIA accessibility\n * - Theme-aware styling\n * - Keyboard navigable\n * - Current page indication\n *\n * Example:\n * ```tsx\n * <Breadcrumbs\n * variant=\"subtle\"\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Products', href: '/products' },\n * { label: 'Laptop' }, // Current page (no href)\n * ]}\n * />\n * ```\n */\nexport const Breadcrumbs: React.FC<BreadcrumbsProps> = ({\n items,\n variant = 'subtle',\n separator = '/',\n ariaLabel = 'Breadcrumb',\n className = '',\n onNavigate,\n}) => {\n // Return null if no items\n if (!items || items.length === 0) {\n return null;\n }\n\n // Truncate items for long paths: show first item + ... + last 2 items\n const getDisplayItems = () => {\n if (items.length <= 3) {\n return items;\n }\n\n // For long paths: [first, ..., second-to-last, last]\n return [\n items[0],\n { label: '...', href: undefined } as BreadcrumbItemLegacy, // Ellipsis\n items[items.length - 2],\n items[items.length - 1],\n ];\n };\n\n const displayItems = getDisplayItems();\n\n // Get variant-specific styles\n const getVariantStyles = (isLink: boolean, isCurrent: boolean) => {\n const baseStyles = 'text-sm transition-all duration-200';\n\n if (variant === 'subtle') {\n if (isCurrent) {\n return `${baseStyles} text-[var(--color-text-muted)] font-medium`;\n }\n if (isLink) {\n return `${baseStyles} text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-hover)] px-1.5 py-1.5 -mx-1.5 -my-1.5 rounded`;\n }\n }\n\n if (variant === 'bold') {\n if (isCurrent) {\n return `${baseStyles} text-[var(--color-text-primary)] font-semibold`;\n }\n if (isLink) {\n return `${baseStyles} text-[var(--color-primary)] hover:bg-[var(--color-text-primary)] hover:text-[var(--color-background)] font-medium px-1.5 py-1.5 -mx-1.5 -my-1.5 rounded`;\n }\n }\n\n if (variant === 'underline') {\n if (isCurrent) {\n return `${baseStyles} text-[var(--color-text-primary)] font-medium`;\n }\n if (isLink) {\n return `${baseStyles} text-[var(--color-text-secondary)] hover:text-[var(--color-primary)] underline-offset-2 hover:underline decoration-[var(--color-primary)]/40 hover:decoration-[var(--color-primary)] decoration-1 hover:decoration-2 px-1.5 py-1.5 -mx-1.5 -my-1.5`;\n }\n }\n\n return baseStyles;\n };\n\n const getLinkStyles = () => {\n return `\n focus-visible:outline-none\n focus-visible:ring-2\n focus-visible:ring-[var(--color-focus)]\n focus-visible:ring-offset-2\n active:scale-95\n cursor-pointer\n `;\n };\n\n const getSeparatorStyles = () => {\n const baseStyles = 'mx-2 select-none';\n\n if (variant === 'subtle') {\n return `${baseStyles} text-[var(--color-text-muted)]`;\n }\n if (variant === 'bold') {\n return `${baseStyles} text-[var(--color-border)] font-bold`;\n }\n if (variant === 'underline') {\n return `${baseStyles} text-[var(--color-text-muted)]`;\n }\n\n return baseStyles;\n };\n\n return (\n <nav aria-label={ariaLabel} className={className}>\n <ol className=\"flex items-center flex-nowrap list-none m-0 p-0 overflow-x-auto scrollbar-hide\">\n {displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const isEllipsis = item.label === '...';\n const isInteractive = item.href && !isLast && !isEllipsis;\n\n return (\n <li key={index} className=\"flex items-center flex-shrink-0\">\n {isInteractive ? (\n <a\n href={item.href}\n onClick={(e) => {\n if (onNavigate) {\n onNavigate(item, index);\n }\n }}\n className={`${getVariantStyles(true, false)} ${getLinkStyles()}`}\n >\n {item.icon && <span className=\"inline-flex mr-1.5\">{item.icon}</span>}\n {item.label}\n </a>\n ) : (\n <span\n className={isEllipsis ? 'text-sm text-[var(--color-text-muted)] px-1' : getVariantStyles(false, isLast)}\n aria-current={isLast ? 'page' : undefined}\n >\n {item.icon && <span className=\"inline-flex mr-1.5\">{item.icon}</span>}\n {item.label}\n </span>\n )}\n\n {!isLast && (\n <span aria-hidden=\"true\" className={getSeparatorStyles()}>\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\"\n\nconst MenubarMenu: typeof MenubarPrimitive.Menu = MenubarPrimitive.Menu\nconst MenubarGroup: typeof MenubarPrimitive.Group = MenubarPrimitive.Group\nconst MenubarPortal: typeof MenubarPrimitive.Portal = MenubarPrimitive.Portal\nconst MenubarSub: typeof MenubarPrimitive.Sub = MenubarPrimitive.Sub\nconst MenubarRadioGroup: typeof MenubarPrimitive.RadioGroup = MenubarPrimitive.RadioGroup\n\nconst Menubar: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root> & React.RefAttributes<React.ElementRef<typeof MenubarPrimitive.Root>>\n> = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Root\n ref={ref}\n className={cn(\"flex h-9 items-center space-x-1 rounded-md border bg-background p-1\", className)}\n {...props}\n />\n))\nMenubar.displayName = MenubarPrimitive.Root.displayName\n\nconst MenubarTrigger: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger> & React.RefAttributes<React.ElementRef<typeof MenubarPrimitive.Trigger>>\n> = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Trigger\n ref={ref}\n className={cn(\"flex cursor-default select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-accent data-[state=open]:bg-accent\", className)}\n {...props}\n />\n))\nMenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName\n\nconst MenubarContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content> & React.RefAttributes<React.ElementRef<typeof MenubarPrimitive.Content>>\n> = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>\n>(({ className, align = \"start\", alignOffset = -4, sideOffset = 8, ...props }, ref) => (\n <MenubarPrimitive.Portal>\n <MenubarPrimitive.Content\n ref={ref}\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\"z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\", className)}\n {...props}\n />\n </MenubarPrimitive.Portal>\n))\nMenubarContent.displayName = MenubarPrimitive.Content.displayName\n\nconst MenubarItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & React.RefAttributes<React.ElementRef<typeof MenubarPrimitive.Item>>\n> = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Item\n ref={ref}\n className={cn(\"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50\", className)}\n {...props}\n />\n))\nMenubarItem.displayName = MenubarPrimitive.Item.displayName\n\nconst MenubarSeparator: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator> & React.RefAttributes<React.ElementRef<typeof MenubarPrimitive.Separator>>\n> = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Separator ref={ref} className={cn(\"-mx-1 my-1 h-px bg-muted\", className)} {...props} />\n))\nMenubarSeparator.displayName = MenubarPrimitive.Separator.displayName\n\nconst MenubarShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className)} {...props} />\n}\nMenubarShortcut.displayName = \"MenubarShortcut\"\n\nexport {\n Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarGroup,\n MenubarPortal,\n MenubarSub,\n MenubarRadioGroup,\n}\n","import React from 'react';\n\nexport interface NavLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n active?: boolean;\n children?: React.ReactNode;\n icon?: React.ReactNode;\n variant?: 'pill' | 'minimal';\n}\n\nexport const NavLink = React.forwardRef<HTMLAnchorElement, NavLinkProps>(\n ({ active = false, children, icon, variant = 'pill', className = '', ...props }, ref) => {\n const variants = {\n pill: `px-3 py-2 rounded-lg\n ${active\n ? 'bg-[var(--color-primary)]/10 text-[var(--color-primary)]'\n : 'text-[var(--color-text-secondary)] hover:bg-[var(--color-hover)] hover:text-[var(--color-text-primary)]'}`,\n minimal: `relative pb-1 rounded-sm\n ${active\n ? 'text-[var(--color-text-primary)] font-medium after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-[var(--color-primary)] after:rounded-full'\n : 'text-[var(--color-text-secondary)] hover:text-[var(--color-primary)]'}`\n };\n\n return (\n <a\n ref={ref}\n className={`\n group flex items-center gap-2 text-sm font-medium transition-all duration-200\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus)]\n cursor-pointer\n ${variants[variant]}\n ${className}\n `}\n aria-current={active ? 'page' : undefined}\n {...props}\n >\n {icon && (\n <span className={`w-4 h-4 transition-colors ${active ? 'text-[var(--color-primary)]' : 'text-[var(--color-text-muted)] group-hover:text-[var(--color-text-primary)]'}`}>\n {icon}\n </span>\n )}\n {children}\n </a>\n );\n }\n);\n\nNavLink.displayName = 'NavLink';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDown } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\"\n\nconst NavigationMenu: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root> & React.RefAttributes<React.ElementRef<typeof NavigationMenuPrimitive.Root>>\n> = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Root\n ref={ref}\n className={cn(\"relative z-10 flex max-w-max flex-1 items-center justify-center\", className)}\n {...props}\n >\n {children}\n <NavigationMenuViewport />\n </NavigationMenuPrimitive.Root>\n))\nNavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName\n\nconst NavigationMenuList: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List> & React.RefAttributes<React.ElementRef<typeof NavigationMenuPrimitive.List>>\n> = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.List\n ref={ref}\n className={cn(\"group flex flex-1 list-none items-center justify-center space-x-1\", className)}\n {...props}\n />\n))\nNavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName\n\nconst NavigationMenuItem = NavigationMenuPrimitive.Item\n\nconst navigationMenuTriggerStyle = cva(\n \"group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50\"\n)\n\nconst NavigationMenuTrigger: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger> & React.RefAttributes<React.ElementRef<typeof NavigationMenuPrimitive.Trigger>>\n> = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Trigger\n ref={ref}\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDown\n className=\"relative top-[1px] ml-1 h-3 w-3 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n))\nNavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName\n\nconst NavigationMenuContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content> & React.RefAttributes<React.ElementRef<typeof NavigationMenuPrimitive.Content>>\n> = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Content\n ref={ref}\n className={cn(\"left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto\", className)}\n {...props}\n />\n))\nNavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName\n\nconst NavigationMenuLink = NavigationMenuPrimitive.Link\n\nconst NavigationMenuViewport: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport> & React.RefAttributes<React.ElementRef<typeof NavigationMenuPrimitive.Viewport>>\n> = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <div className={cn(\"absolute left-0 top-full flex justify-center\")}>\n <NavigationMenuPrimitive.Viewport\n className={cn(\"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\", className)}\n ref={ref}\n {...props}\n />\n </div>\n))\nNavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName\n\nconst NavigationMenuIndicator: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator> & React.RefAttributes<React.ElementRef<typeof NavigationMenuPrimitive.Indicator>>\n> = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Indicator\n ref={ref}\n className={cn(\"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in\", className)}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n))\nNavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName\n\nexport {\n navigationMenuTriggerStyle,\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n}\n","import * as React from \"react\"\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ButtonProps, buttonVariants } from \"../actions/Button\"\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n)\nPagination.displayName = \"Pagination\"\n\nconst PaginationContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"ul\"> & React.RefAttributes<HTMLUListElement>\n> = React.forwardRef<HTMLUListElement, React.ComponentProps<\"ul\">>(\n ({ className, ...props }, ref) => (\n <ul\n ref={ref}\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n )\n)\nPaginationContent.displayName = \"PaginationContent\"\n\nconst PaginationItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<\"li\"> & React.RefAttributes<HTMLLIElement>\n> = React.forwardRef<HTMLLIElement, React.ComponentProps<\"li\">>(\n ({ className, ...props }, ref) => (\n <li ref={ref} className={cn(\"\", className)} {...props} />\n )\n)\nPaginationItem.displayName = \"PaginationItem\"\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<ButtonProps, \"size\"> &\n React.ComponentProps<\"a\">\n\nconst PaginationLink = ({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) => (\n <a\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className\n )}\n {...props}\n />\n)\nPaginationLink.displayName = \"PaginationLink\"\n\nconst PaginationPrevious = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 pl-2.5\", className)}\n {...props}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span>Previous</span>\n </PaginationLink>\n)\nPaginationPrevious.displayName = \"PaginationPrevious\"\n\nconst PaginationNext = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 pr-2.5\", className)}\n {...props}\n >\n <span>Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </PaginationLink>\n)\nPaginationNext.displayName = \"PaginationNext\"\n\nconst PaginationEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n aria-hidden\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n)\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","'use client';\n\nimport React from 'react';\nimport { Button } from '../actions/Button';\n\nexport interface SecondaryNavItem {\n id: string;\n label: string;\n icon?: React.ReactNode;\n}\n\nexport interface SecondaryNavProps {\n /**\n * Array of navigation items\n */\n items: SecondaryNavItem[];\n /**\n * Currently active item ID\n */\n activeId: string;\n /**\n * Callback when an item is selected\n */\n onItemChange: (id: string) => void;\n /**\n * Maximum width for content container (should match page variant)\n * @default 'max-w-7xl'\n */\n maxWidth?: 'max-w-7xl' | 'max-w-[1440px]' | 'max-w-4xl';\n /**\n * Additional className for customization\n */\n className?: string;\n /**\n * Sticky behavior mode\n * - 'stacked': Positions automatically below Header (default)\n * - 'standalone': Sticks to top of viewport (0px)\n * @default 'stacked'\n */\n mode?: 'stacked' | 'standalone';\n /**\n * Top offset for sticky positioning.\n * Overrides 'mode' if provided.\n */\n top?: string;\n}\n\n/**\n * Secondary Navigation Component\n * ... (keep existing comment block) ...\n */\nexport const SecondaryNav = React.forwardRef<HTMLElement, SecondaryNavProps>(\n ({ items, activeId, onItemChange, maxWidth = 'max-w-7xl', mode = 'stacked', top, className = '' }, ref) => {\n // Determine sticky position based on mode, unless manually overridden\n const stickyClass = top || (mode === 'stacked' ? 'top-16 lg:top-20' : 'top-0');\n\n return (\n <nav\n ref={ref}\n className={`\n sticky ${stickyClass} z-40\n bg-[var(--color-surface)]/60 backdrop-blur-md\n border-b border-[var(--color-border)]\n -mx-4 sm:-mx-6 lg:-mx-8 px-4 sm:px-6 lg:px-8\n ${className}\n `}\n aria-label=\"Secondary navigation\"\n >\n <div className={`${maxWidth} mx-auto px-4 sm:px-6 lg:px-8`}>\n <div className=\"flex items-center gap-1 overflow-x-auto py-3 scrollbar-hide\">\n {items.map((item) => (\n <Button\n key={item.id}\n onClick={() => onItemChange(item.id)}\n variant={activeId === item.id ? 'default' : 'ghost'}\n size=\"sm\"\n className={`whitespace-nowrap ${activeId !== item.id ? 'text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)]' : ''\n }`}\n aria-current={activeId === item.id ? 'page' : undefined}\n >\n {item.icon && <span className=\"mr-2 flex items-center\">{item.icon}</span>}\n {item.label}\n </Button>\n ))}\n </div>\n </div>\n </nav>\n );\n }\n);\n\nSecondaryNav.displayName = 'SecondaryNav';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","'use client';\n\nimport React from 'react';\nimport { FilterButton } from '../forms/FilterButton';\n\nexport interface TertiaryNavItem {\n id: string;\n label: string;\n}\n\nexport interface TertiaryNavProps {\n /**\n * Array of navigation items\n */\n items: TertiaryNavItem[];\n /**\n * Currently active item ID\n */\n activeId: string;\n /**\n * Callback when an item is selected\n */\n onItemChange: (id: string) => void;\n /**\n * Additional className for customization\n */\n className?: string;\n /**\n * Sticky behavior mode\n * - 'stacked': Positions automatically below SecondaryNav (default)\n * - 'standalone': Sticks to top of viewport (0px)\n * @default 'stacked'\n */\n mode?: 'stacked' | 'standalone';\n /**\n * Top offset for sticky positioning.\n * Overrides 'mode' if provided.\n */\n top?: string;\n}\n\n/**\n * Tertiary Navigation Component\n * ... (keep existing comment block) ...\n */\nexport const TertiaryNav = React.forwardRef<HTMLElement, TertiaryNavProps>(\n ({ items, activeId, onItemChange, mode = 'stacked', top, className = '' }, ref) => {\n // Determine sticky position based on mode, unless manually overridden\n const stickyClass = top || (mode === 'stacked' ? 'top-32 lg:top-36' : 'top-0');\n\n return (\n <nav\n ref={ref}\n className={`\n sticky ${stickyClass} z-30\n bg-[var(--color-surface)]/60 backdrop-blur-md\n border-b border-[var(--color-border)]\n ${className}\n `}\n aria-label=\"Tertiary navigation\"\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex items-center gap-2 overflow-x-auto py-3 scrollbar-hide\">\n {items.map((item) => (\n <FilterButton\n key={item.id}\n onClick={() => onItemChange(item.id)}\n active={activeId === item.id}\n shape=\"rounded\"\n aria-current={activeId === item.id ? 'page' : undefined}\n className=\"whitespace-nowrap\"\n >\n {item.label}\n </FilterButton>\n ))}\n </div>\n </div>\n </nav>\n );\n }\n);\n\nTertiaryNav.displayName = 'TertiaryNav';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"../actions/Button\"\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay> & React.RefAttributes<React.ElementRef<typeof AlertDialogPrimitive.Overlay>>\n> = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content> & React.RefAttributes<React.ElementRef<typeof AlertDialogPrimitive.Content>>\n> = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nAlertDialogFooter.displayName = \"AlertDialogFooter\"\n\nconst AlertDialogTitle: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title> & React.RefAttributes<React.ElementRef<typeof AlertDialogPrimitive.Title>>\n> = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description> & React.RefAttributes<React.ElementRef<typeof AlertDialogPrimitive.Description>>\n> = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action> & React.RefAttributes<React.ElementRef<typeof AlertDialogPrimitive.Action>>\n> = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel> & React.RefAttributes<React.ElementRef<typeof AlertDialogPrimitive.Cancel>>\n> = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className\n )}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst ContextMenu = ContextMenuPrimitive.Root\n\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger\n\nconst ContextMenuGroup = ContextMenuPrimitive.Group\n\nconst ContextMenuPortal = ContextMenuPrimitive.Portal\n\nconst ContextMenuSub = ContextMenuPrimitive.Sub\n\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup\n\nconst ContextMenuSubTrigger: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & { inset?: boolean } & React.RefAttributes<React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>>\n> = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </ContextMenuPrimitive.SubTrigger>\n))\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName\n\nconst ContextMenuSubContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent> & React.RefAttributes<React.ElementRef<typeof ContextMenuPrimitive.SubContent>>\n> = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName\n\nconst ContextMenuContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content> & React.RefAttributes<React.ElementRef<typeof ContextMenuPrimitive.Content>>\n> = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n))\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName\n\nconst ContextMenuItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & { inset?: boolean } & React.RefAttributes<React.ElementRef<typeof ContextMenuPrimitive.Item>>\n> = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName\n\nconst ContextMenuCheckboxItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem> & React.RefAttributes<React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>>\n> = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n))\nContextMenuCheckboxItem.displayName =\n ContextMenuPrimitive.CheckboxItem.displayName\n\nconst ContextMenuRadioItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem> & React.RefAttributes<React.ElementRef<typeof ContextMenuPrimitive.RadioItem>>\n> = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n))\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName\n\nconst ContextMenuLabel: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & { inset?: boolean } & React.RefAttributes<React.ElementRef<typeof ContextMenuPrimitive.Label>>\n> = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold text-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName\n\nconst ContextMenuSeparator: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator> & React.RefAttributes<React.ElementRef<typeof ContextMenuPrimitive.Separator>>\n> = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n))\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName\n\nconst ContextMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\nContextMenuShortcut.displayName = \"ContextMenuShortcut\"\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Drawer: typeof DrawerPrimitive.Root = DrawerPrimitive.Root\n\nconst DrawerTrigger: typeof DrawerPrimitive.Trigger = DrawerPrimitive.Trigger\n\nconst DrawerPortal: typeof DrawerPrimitive.Portal = DrawerPrimitive.Portal\n\nconst DrawerClose: typeof DrawerPrimitive.Close = DrawerPrimitive.Close\n\nconst DrawerOverlay: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay> & React.RefAttributes<React.ElementRef<typeof DrawerPrimitive.Overlay>>\n> = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-black/80\", className)}\n {...props}\n />\n))\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName\n\nconst DrawerContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> & React.RefAttributes<React.ElementRef<typeof DrawerPrimitive.Content>>\n> = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background\",\n className\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n))\nDrawerContent.displayName = \"DrawerContent\"\n\nconst DrawerHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"grid gap-1.5 p-4 text-center sm:text-left\", className)}\n {...props}\n />\n)\nDrawerHeader.displayName = \"DrawerHeader\"\n\nconst DrawerFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)} {...props} />\n)\nDrawerFooter.displayName = \"DrawerFooter\"\n\nconst DrawerTitle: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title> & React.RefAttributes<React.ElementRef<typeof DrawerPrimitive.Title>>\n> = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName\n\nconst DrawerDescription: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description> & React.RefAttributes<React.ElementRef<typeof DrawerPrimitive.Description>>\n> = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useMotionPreference } from '../../hooks';\n\nexport interface DropdownItem {\n label: string;\n value: string;\n disabled?: boolean;\n icon?: React.ReactNode;\n divider?: boolean;\n}\n\nexport interface DropdownProps {\n /**\n * Trigger element (button, link, etc.)\n */\n trigger: React.ReactNode;\n\n /**\n * Dropdown menu items\n */\n items: DropdownItem[];\n\n /**\n * Callback when an item is selected\n */\n onSelect?: (value: string) => void;\n\n /**\n * Dropdown alignment relative to trigger\n * @default 'left'\n */\n align?: 'left' | 'right' | 'center';\n\n /**\n * Additional CSS classes for the dropdown menu\n */\n className?: string;\n}\n\n/**\n * Dropdown Component\n *\n * A menu that appears when clicking a trigger element.\n *\n * Features:\n * - Click outside to close\n * - Keyboard navigation (Arrow keys, Enter, Escape)\n * - Flexible trigger element\n * - Optional icons\n * - Dividers between items\n * - Theme-aware styling\n * - Smooth animations\n *\n * Example:\n * ```tsx\n * <Dropdown\n * trigger={<Button>Actions</Button>}\n * items={[\n * { label: 'Edit', value: 'edit', icon: <EditIcon /> },\n * { label: 'Delete', value: 'delete', icon: <DeleteIcon /> },\n * { label: 'Divider', value: 'div', divider: true },\n * { label: 'Archive', value: 'archive' },\n * ]}\n * onSelect={(value) => handleAction(value)}\n * />\n * ```\n */\nexport const Dropdown: React.FC<DropdownProps> = ({\n trigger,\n items,\n onSelect,\n align = 'left',\n className = '',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const { shouldAnimate, scale } = useMotionPreference();\n\n const animationDuration = shouldAnimate && scale > 0 ? `${0.15 * (5 / scale)}s` : '0s';\n\n // Close on click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n setFocusedIndex(-1);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n // Handle keyboard navigation\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n const selectableItems = items.filter((item) => !item.disabled && !item.divider);\n\n switch (e.key) {\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 e.preventDefault();\n if (focusedIndex >= 0 && focusedIndex < selectableItems.length) {\n const item = selectableItems[focusedIndex];\n onSelect?.(item.value);\n setIsOpen(false);\n setFocusedIndex(-1);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsOpen(false);\n setFocusedIndex(-1);\n break;\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, focusedIndex, items, onSelect]);\n\n const handleItemClick = (item: DropdownItem) => {\n if (item.disabled || item.divider) return;\n onSelect?.(item.value);\n setIsOpen(false);\n setFocusedIndex(-1);\n };\n\n const alignClasses = {\n left: 'left-0',\n right: 'right-0',\n center: 'left-1/2 -translate-x-1/2',\n };\n\n return (\n <div ref={dropdownRef} className=\"relative inline-block\">\n <div onClick={() => setIsOpen(!isOpen)} role=\"button\" tabIndex={0}>\n {trigger}\n </div>\n\n {isOpen && (\n <div\n className={`\n absolute top-full mt-2 ${alignClasses[align]}\n min-w-[200px]\n bg-[var(--color-background)]/80\n backdrop-blur-md\n border border-[var(--color-border)]\n rounded-lg\n shadow-lg\n py-2\n z-50\n ${shouldAnimate ? 'animate-dropdown-in' : ''}\n ${className}\n `}\n style={{ animationDuration }}\n role=\"menu\"\n aria-orientation=\"vertical\"\n >\n {items.map((item, index) => {\n if (item.divider) {\n return (\n <div\n key={`divider-${index}`}\n className=\"my-2 border-t border-[var(--color-border)]\"\n role=\"separator\"\n />\n );\n }\n\n const selectableItems = items.filter((i) => !i.disabled && !i.divider);\n const selectableIndex = selectableItems.indexOf(item);\n const isFocused = selectableIndex === focusedIndex;\n\n return (\n <button\n key={item.value}\n onClick={() => handleItemClick(item)}\n disabled={item.disabled}\n className={`\n w-full flex items-center gap-3 px-4 py-2 text-sm\n text-left transition-colors\n ${item.disabled\n ? 'opacity-50 cursor-not-allowed'\n : `\n text-[var(--color-text-primary)]\n hover:bg-[var(--color-hover)]\n ${isFocused ? 'bg-[var(--color-hover)]' : ''}\n `\n }\n `}\n role=\"menuitem\"\n tabIndex={-1}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nDropdown.displayName = 'Dropdown';\n\n// Add animation keyframes\nif (typeof document !== 'undefined') {\n const style = document.createElement('style');\n style.textContent = `\n @keyframes dropdown-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n .animate-dropdown-in {\n animation: dropdown-in 0.15s ease-out;\n }\n `;\n if (!document.querySelector('style[data-dropdown-animations]')) {\n style.setAttribute('data-dropdown-animations', 'true');\n document.head.appendChild(style);\n }\n}\n","/**\n * Hooks subpath export\n * Allows: import { ... } from '@sage/ui/hooks'\n */\n\n// Re-export all hooks\nexport * from './hooks/useTheme';\nexport * from './hooks/useMotionPreference';\nexport * from './hooks/useForm';\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type { FieldValidation, FormErrors } from '../lib/validation';\nimport { validateField, validateForm } from '../lib/validation';\n\nexport interface UseFormOptions<T> {\n /**\n * Initial form values\n */\n initialValues: T;\n\n /**\n * Validation rules for each field\n */\n validations?: Partial<Record<keyof T, FieldValidation>>;\n\n /**\n * Callback fired when form is submitted and valid\n */\n onSubmit?: (values: T) => void | Promise<void>;\n\n /**\n * When to validate fields\n * @default 'onBlur'\n */\n validateOn?: 'onChange' | 'onBlur' | 'onSubmit';\n}\n\nexport interface UseFormReturn<T> {\n /**\n * Current form values\n */\n values: T;\n\n /**\n * Current form errors\n */\n errors: FormErrors;\n\n /**\n * Whether the form is currently submitting\n */\n isSubmitting: boolean;\n\n /**\n * Whether the form has been touched/modified\n */\n isDirty: boolean;\n\n /**\n * Set value for a specific field\n */\n setValue: (name: keyof T, value: any) => void;\n\n /**\n * Set error for a specific field\n */\n setError: (name: keyof T, error: string | undefined) => void;\n\n /**\n * Handle input change event\n */\n handleChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;\n\n /**\n * Handle input blur event\n */\n handleBlur: (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;\n\n /**\n * Handle form submit\n */\n handleSubmit: (e?: React.FormEvent<HTMLFormElement>) => Promise<void>;\n\n /**\n * Reset form to initial values\n */\n reset: () => void;\n\n /**\n * Manually validate all fields\n */\n validate: () => boolean;\n\n /**\n * Get props for a field (value, onChange, onBlur, error)\n */\n getFieldProps: (name: keyof T) => {\n name: string;\n value: any;\n onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;\n onBlur: (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;\n error: boolean;\n };\n}\n\n/**\n * useForm Hook\n *\n * A lightweight form state management hook with built-in validation.\n *\n * Features:\n * - Field-level validation\n * - Configurable validation timing (onChange, onBlur, onSubmit)\n * - Dirty state tracking\n * - Submit handling with loading state\n * - Helper functions for common patterns\n *\n * Example:\n * ```tsx\n * const form = useForm({\n * initialValues: { email: '', password: '' },\n * validations: {\n * email: { required: true, pattern: patterns.email },\n * password: { required: true, minLength: { value: 8, message: 'Min 8 chars' } }\n * },\n * onSubmit: async (values) => {\n * await login(values);\n * }\n * });\n *\n * return (\n * <form onSubmit={form.handleSubmit}>\n * <FormField label=\"Email\" error={form.errors.email}>\n * <TextField {...form.getFieldProps('email')} />\n * </FormField>\n * <Button type=\"submit\" loading={form.isSubmitting}>Submit</Button>\n * </form>\n * );\n * ```\n */\nexport function useForm<T extends Record<string, any>>({\n initialValues,\n validations = {},\n onSubmit,\n validateOn = 'onBlur',\n}: UseFormOptions<T>): UseFormReturn<T> {\n const [values, setValues] = useState<T>(initialValues);\n const [errors, setErrors] = useState<FormErrors>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isDirty, setIsDirty] = useState(false);\n\n const setValue = useCallback((name: keyof T, value: any) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n setIsDirty(true);\n }, []);\n\n const setError = useCallback((name: keyof T, error: string | undefined) => {\n setErrors((prev) => ({ ...prev, [name as string]: error }));\n }, []);\n\n const validateFieldByName = useCallback(\n (name: keyof T) => {\n const fieldRules = validations[name];\n if (!fieldRules) return;\n\n const error = validateField(values[name], fieldRules);\n setError(name, error);\n return !error;\n },\n [values, validations, setError]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n const { name, value, type } = e.target;\n const fieldValue = type === 'checkbox' ? (e.target as HTMLInputElement).checked : value;\n\n setValue(name as keyof T, fieldValue);\n\n if (validateOn === 'onChange') {\n validateFieldByName(name as keyof T);\n }\n },\n [setValue, validateOn, validateFieldByName]\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n const { name } = e.target;\n\n if (validateOn === 'onBlur') {\n validateFieldByName(name as keyof T);\n }\n },\n [validateOn, validateFieldByName]\n );\n\n const validate = useCallback(() => {\n const formErrors = validateForm(values, validations as any);\n setErrors(formErrors);\n return Object.keys(formErrors).length === 0;\n }, [values, validations]);\n\n const handleSubmit = useCallback(\n async (e?: React.FormEvent<HTMLFormElement>) => {\n e?.preventDefault();\n\n const isValid = validate();\n if (!isValid) return;\n\n if (onSubmit) {\n setIsSubmitting(true);\n try {\n await onSubmit(values);\n } finally {\n setIsSubmitting(false);\n }\n }\n },\n [validate, onSubmit, values]\n );\n\n const reset = useCallback(() => {\n setValues(initialValues);\n setErrors({});\n setIsDirty(false);\n setIsSubmitting(false);\n }, [initialValues]);\n\n const getFieldProps = useCallback(\n (name: keyof T) => ({\n name: name as string,\n value: values[name] ?? '',\n onChange: handleChange,\n onBlur: handleBlur,\n error: !!errors[name as string],\n }),\n [values, errors, handleChange, handleBlur]\n );\n\n return {\n values,\n errors,\n isSubmitting,\n isDirty,\n setValue,\n setError,\n handleChange,\n handleBlur,\n handleSubmit,\n reset,\n validate,\n getFieldProps,\n };\n}\n","/**\n * Form Validation Utilities\n *\n * Simple validation helpers for form fields.\n * Works seamlessly with FormField and other form components.\n */\n\nexport type ValidationRule = {\n validate: (value: any) => boolean;\n message: string;\n};\n\nexport type FieldValidation = {\n required?: boolean | string;\n minLength?: { value: number; message: string };\n maxLength?: { value: number; message: string };\n pattern?: { value: RegExp; message: string };\n custom?: ValidationRule[];\n};\n\nexport type FormErrors = Record<string, string | undefined>;\n\n/**\n * Common validation patterns\n */\nexport const patterns = {\n email: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\n message: 'Invalid email address',\n },\n url: {\n value: /^https?:\\/\\/.+\\..+/,\n message: 'Invalid URL',\n },\n phone: {\n value: /^[\\d\\s\\-\\+\\(\\)]+$/,\n message: 'Invalid phone number',\n },\n alphanumeric: {\n value: /^[a-zA-Z0-9]+$/,\n message: 'Only letters and numbers allowed',\n },\n noSpaces: {\n value: /^\\S+$/,\n message: 'Spaces are not allowed',\n },\n};\n\n/**\n * Validate a single field value against validation rules\n *\n * @param value - The field value to validate\n * @param rules - Validation rules to apply\n * @returns Error message if validation fails, undefined if valid\n *\n * @example\n * ```tsx\n * const error = validateField(email, {\n * required: true,\n * pattern: patterns.email\n * });\n * ```\n */\nexport function validateField(\n value: any,\n rules: FieldValidation\n): string | undefined {\n // Required check\n if (rules.required) {\n const isEmpty =\n value === undefined ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n return typeof rules.required === 'string'\n ? rules.required\n : 'This field is required';\n }\n }\n\n // Skip other validations if value is empty and not required\n if (!value && !rules.required) {\n return undefined;\n }\n\n // Min length check\n if (rules.minLength && value.length < rules.minLength.value) {\n return rules.minLength.message;\n }\n\n // Max length check\n if (rules.maxLength && value.length > rules.maxLength.value) {\n return rules.maxLength.message;\n }\n\n // Pattern check\n if (rules.pattern && !rules.pattern.value.test(value)) {\n return rules.pattern.message;\n }\n\n // Custom validations\n if (rules.custom) {\n for (const rule of rules.custom) {\n if (!rule.validate(value)) {\n return rule.message;\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Validate all fields in a form\n *\n * @param values - Object containing all form field values\n * @param validations - Object containing validation rules for each field\n * @returns Object containing errors for each field\n *\n * @example\n * ```tsx\n * const errors = validateForm(\n * { email: 'test', password: '123' },\n * {\n * email: { required: true, pattern: patterns.email },\n * password: { required: true, minLength: { value: 8, message: 'Min 8 chars' } }\n * }\n * );\n * // errors = { email: 'Invalid email address', password: 'Min 8 chars' }\n * ```\n */\nexport function validateForm(\n values: Record<string, any>,\n validations: Record<string, FieldValidation>\n): FormErrors {\n const errors: FormErrors = {};\n\n for (const [field, rules] of Object.entries(validations)) {\n const error = validateField(values[field], rules);\n if (error) {\n errors[field] = error;\n }\n }\n\n return errors;\n}\n\n/**\n * Check if form has any errors\n *\n * @param errors - Form errors object\n * @returns true if there are any errors\n *\n * @example\n * ```tsx\n * if (hasErrors(errors)) {\n * console.log('Form has errors');\n * }\n * ```\n */\nexport function hasErrors(errors: FormErrors): boolean {\n return Object.values(errors).some((error) => error !== undefined);\n}\n\n/**\n * Common validation rule builders\n */\nexport const rules = {\n required: (message = 'This field is required'): FieldValidation => ({\n required: message,\n }),\n\n email: (message = 'Invalid email address'): FieldValidation => ({\n pattern: { value: patterns.email.value, message },\n }),\n\n minLength: (length: number, message?: string): FieldValidation => ({\n minLength: {\n value: length,\n message: message || `Minimum ${length} characters required`,\n },\n }),\n\n maxLength: (length: number, message?: string): FieldValidation => ({\n maxLength: {\n value: length,\n message: message || `Maximum ${length} characters allowed`,\n },\n }),\n\n match: (\n otherValue: any,\n message = 'Values do not match'\n ): FieldValidation => ({\n custom: [\n {\n validate: (value) => value === otherValue,\n message,\n },\n ],\n }),\n};\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content> & React.RefAttributes<React.ElementRef<typeof HoverCardPrimitive.Content>>\n> = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","'use client';\n\nimport React, { useEffect } from 'react';\nimport { useMotionPreference } from '../../hooks';\n\nexport interface ModalProps {\n /**\n * Whether the modal is open\n */\n isOpen: boolean;\n\n /**\n * Callback fired when the modal should close\n */\n onClose: () => void;\n\n /**\n * Modal title (optional)\n */\n title?: string;\n\n /**\n * Modal content\n */\n children: React.ReactNode;\n\n /**\n * Footer content (typically buttons)\n */\n footer?: React.ReactNode;\n\n /**\n * Size of the modal\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n /**\n * Whether clicking the overlay closes the modal\n * @default true\n */\n closeOnOverlayClick?: boolean;\n\n /**\n * Whether pressing Escape closes the modal\n * @default true\n */\n closeOnEscape?: boolean;\n\n /**\n * Additional CSS classes for the modal content\n */\n className?: string;\n}\n\n/**\n * Modal Component\n *\n * A dialog overlay for focused user interactions.\n *\n * Features:\n * - Keyboard accessible (Escape to close, focus trap)\n * - Click outside to close (optional)\n * - Multiple size variants\n * - Smooth animations\n * - Blocks body scroll when open\n * - Theme-aware styling\n *\n * Example:\n * ```tsx\n * const [isOpen, setIsOpen] = useState(false);\n *\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Confirm Action\"\n * footer={\n * <>\n * <Button variant=\"ghost\" onClick={() => setIsOpen(false)}>Cancel</Button>\n * <Button onClick={handleConfirm}>Confirm</Button>\n * </>\n * }\n * >\n * <p>Are you sure you want to continue?</p>\n * </Modal>\n * ```\n */\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n closeOnOverlayClick = true,\n closeOnEscape = true,\n className = '',\n}) => {\n const { shouldAnimate, scale } = useMotionPreference();\n\n const animationDuration = shouldAnimate && scale > 0 ? `${0.2 * (5 / scale)}s` : '0s';\n\n // Lock body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n // Handle escape key\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen, closeOnEscape, onClose]);\n\n if (!isOpen) return null;\n\n const sizeClasses = {\n sm: 'max-w-md',\n md: 'max-w-lg',\n lg: 'max-w-2xl',\n xl: 'max-w-4xl',\n full: 'max-w-[95vw] max-h-[95vh]',\n };\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n return (\n <div\n className={`\n fixed inset-0 z-[9999] flex items-center justify-center p-4\n bg-black/50 backdrop-blur-sm\n ${shouldAnimate ? 'animate-fade-in' : ''}\n `}\n style={{ animationDuration }}\n onClick={handleOverlayClick}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n >\n <div\n className={`\n ${sizeClasses[size]}\n w-full\n bg-[var(--color-surface)]\n rounded-2xl\n shadow-2xl\n border border-[var(--color-border)]\n flex flex-col\n max-h-[90vh]\n ${shouldAnimate ? 'animate-scale-in' : ''}\n ${className}\n `}\n style={{ animationDuration }}\n >\n {/* Header */}\n {title && (\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-[var(--color-border)]\">\n <h2\n id=\"modal-title\"\n className=\"text-xl font-semibold text-[var(--color-text-primary)]\"\n >\n {title}\n </h2>\n <button\n onClick={onClose}\n className=\"\n p-2 rounded-lg\n text-[var(--color-text-primary)]\n hover:bg-[var(--color-hover)]\n transition-colors\n focus-visible:outline-none\n focus-visible:ring-2\n focus-visible:ring-[var(--color-focus)]\n \"\n aria-label=\"Close modal\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto px-6 py-4\">\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div className=\"flex items-center justify-end gap-3 px-6 py-4 border-t border-[var(--color-border)]\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nModal.displayName = 'Modal';\n\n// Add animation keyframes\nif (typeof document !== 'undefined') {\n const style = document.createElement('style');\n style.textContent = `\n @keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes scale-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n .animate-fade-in {\n animation: fade-in 0.2s ease-out;\n }\n .animate-scale-in {\n animation: scale-in 0.2s ease-out;\n }\n `;\n if (!document.querySelector('style[data-modal-animations]')) {\n style.setAttribute('data-modal-animations', 'true');\n document.head.appendChild(style);\n }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Sheet = SheetPrimitive.Root\n\nconst SheetTrigger = SheetPrimitive.Trigger\n\nconst SheetClose = SheetPrimitive.Close\n\nconst SheetPortal = SheetPrimitive.Portal\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\nconst sheetVariants = cva(\n \"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom:\n \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n right:\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n))\nSheetContent.displayName = SheetPrimitive.Content.displayName\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nSheetHeader.displayName = \"SheetHeader\"\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...props}\n />\n))\nSheetTitle.displayName = SheetPrimitive.Title.displayName\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nSheetDescription.displayName = SheetPrimitive.Description.displayName\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & React.RefAttributes<React.ElementRef<typeof TooltipPrimitive.Content>>\n> = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Progress: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> & React.RefAttributes<React.ElementRef<typeof ProgressPrimitive.Root>>\n> = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }\n","import React from 'react';\n\nexport interface ProgressBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Progress value (0-100)\n */\n value: number;\n\n /**\n * Maximum value\n * @default 100\n */\n max?: number;\n\n /**\n * Size of the progress bar\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Color variant\n * @default 'primary'\n */\n variant?: 'primary' | 'success' | 'warning' | 'error' | 'info';\n\n /**\n * Whether to show the percentage label\n * @default false\n */\n showLabel?: boolean;\n\n /**\n * Whether to animate the progress bar\n * @default true\n */\n animated?: boolean;\n\n /**\n * Indeterminate state (ignores value)\n * @default false\n */\n indeterminate?: boolean;\n}\n\n/**\n * ProgressBar Component\n *\n * A visual indicator of progress or completion.\n *\n * Features:\n * - Determinate and indeterminate modes\n * - Five color variants\n * - Three size options\n * - Optional percentage label\n * - Smooth animations\n * - Theme-aware colors\n * - Accessible ARIA attributes\n *\n * Example:\n * ```tsx\n * <ProgressBar value={65} showLabel />\n * <ProgressBar value={100} variant=\"success\" />\n * <ProgressBar indeterminate variant=\"primary\" />\n * ```\n */\nexport const ProgressBar = React.forwardRef<HTMLDivElement, ProgressBarProps>(\n (\n {\n value,\n max = 100,\n size = 'md',\n variant = 'primary',\n showLabel = false,\n animated = true,\n indeterminate = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n const sizes = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n };\n\n const variants = {\n primary: 'bg-[var(--color-primary)]',\n success: 'bg-[var(--color-success)]',\n warning: 'bg-[var(--color-warning)]',\n error: 'bg-[var(--color-error)]',\n info: 'bg-[var(--color-info)]',\n };\n\n return (\n <div ref={ref} className={`w-full ${className}`} {...props}>\n {showLabel && !indeterminate && (\n <div className=\"flex justify-between items-center mb-2\">\n <span className=\"text-sm font-medium text-[var(--color-text-primary)]\">\n {Math.round(percentage)}%\n </span>\n </div>\n )}\n <div\n className={`\n w-full ${sizes[size]}\n bg-[var(--color-surface)]\n rounded-full\n overflow-hidden\n border border-[var(--color-border)]\n `}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : Math.round(percentage)}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={indeterminate ? 'Loading' : `${Math.round(percentage)}% complete`}\n >\n <div\n className={`\n h-full\n ${variants[variant]}\n ${animated ? 'transition-all duration-300 ease-out' : ''}\n ${indeterminate ? 'animate-progress-indeterminate w-1/3' : ''}\n `}\n style={{\n width: indeterminate ? undefined : `${percentage}%`,\n }}\n />\n </div>\n </div>\n );\n }\n);\n\nProgressBar.displayName = 'ProgressBar';\n\n// Add indeterminate animation\nif (typeof document !== 'undefined') {\n const style = document.createElement('style');\n style.textContent = `\n @keyframes progress-indeterminate {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(400%);\n }\n }\n .animate-progress-indeterminate {\n animation: progress-indeterminate 1.5s ease-in-out infinite;\n }\n `;\n if (!document.querySelector('style[data-progress-animations]')) {\n style.setAttribute('data-progress-animations', 'true');\n document.head.appendChild(style);\n }\n}\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Variant of the skeleton\n * @default \"default\"\n */\n variant?: \"default\" | \"circular\" | \"rectangular\" | \"text\"\n /**\n * Width of the skeleton (CSS value)\n */\n width?: string | number\n /**\n * Height of the skeleton (CSS value)\n */\n height?: string | number\n}\n\nfunction Skeleton({ className, variant = \"default\", width, height, style, ...props }: SkeletonProps) {\n const variantStyles = {\n default: \"rounded-md\",\n circular: \"rounded-full\",\n rectangular: \"rounded-none\",\n text: \"rounded-sm h-4\",\n }\n\n return (\n <div\n className={cn(\n \"animate-pulse bg-muted\",\n variantStyles[variant],\n className\n )}\n style={{\n width,\n height: variant === \"text\" ? undefined : height,\n ...style,\n }}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","\"use client\"\n\nimport { Toaster as Sonner } from \"sonner\"\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n return (\n <Sonner\n theme=\"system\"\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import React from 'react';\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Size of the spinner\n * @default 'md'\n */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n /**\n * Color variant\n * @default 'primary'\n */\n variant?: 'primary' | 'secondary' | 'inherit';\n\n /**\n * Optional label for screen readers\n */\n label?: string;\n}\n\n/**\n * Spinner Component\n *\n * A loading indicator with smooth animation.\n *\n * Features:\n * - Five size variants\n * - Theme-aware colors\n * - Uses current text color option\n * - Accessible label for screen readers\n * - Respects reduced motion preferences\n *\n * Example:\n * ```tsx\n * <Spinner />\n * <Spinner size=\"lg\" variant=\"primary\" label=\"Loading content...\" />\n * <Spinner size=\"sm\" variant=\"inherit\" />\n * ```\n */\nexport const Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({ size = 'md', variant = 'primary', label = 'Loading...', className = '', ...props }, ref) => {\n const sizes = {\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-12 h-12',\n };\n\n const variants = {\n primary: 'text-[var(--color-primary)]',\n secondary: 'text-[var(--color-text-secondary)]',\n inherit: 'text-current',\n };\n\n return (\n <div\n ref={ref}\n className={`inline-block ${className}`}\n role=\"status\"\n aria-label={label}\n {...props}\n >\n <svg\n className={`${sizes[size]} ${variants[variant]} animate-spin`}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n }\n);\n\nSpinner.displayName = 'Spinner';\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { useMotionPreference } from '../../../hooks/useMotionPreference';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\n\nexport interface Toast {\n id: string;\n message: string;\n type: ToastType;\n duration?: number;\n}\n\ninterface ToastContextValue {\n toasts: Toast[];\n addToast: (message: string, type?: ToastType, duration?: number) => void;\n removeToast: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n /**\n * Maximum number of toasts to show at once\n * @default 3\n */\n maxToasts?: number;\n /**\n * Default duration in milliseconds\n * @default 5000\n */\n defaultDuration?: number;\n /**\n * Position of toast container\n * @default 'bottom-right'\n */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center';\n}\n\n/**\n * ToastProvider Component\n *\n * Provides toast notification functionality to the app.\n * Wrap your app with this provider to enable toast notifications.\n *\n * Example:\n * ```tsx\n * <ToastProvider position=\"bottom-right\" maxToasts={3}>\n * <App />\n * </ToastProvider>\n * ```\n */\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n maxToasts = 3,\n defaultDuration = 5000,\n position = 'bottom-right',\n}) => {\n const [toasts, setToasts] = useState<Toast[]>([]);\n const { shouldAnimate } = useMotionPreference();\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n // Inject animation styles\n useEffect(() => {\n if (typeof document !== 'undefined' && !document.getElementById('sds-toast-animations')) {\n const style = document.createElement('style');\n style.id = 'sds-toast-animations';\n style.textContent = `\n @keyframes slide-in-right {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n }\n .animate-slide-in-right {\n animation: slide-in-right 0.3s ease-out;\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const addToast = useCallback(\n (message: string, type: ToastType = 'info', duration = defaultDuration) => {\n const id = Math.random().toString(36).substring(2, 9);\n const newToast: Toast = { id, message, type, duration };\n\n setToasts((prev) => {\n const updated = [...prev, newToast];\n return updated.slice(-maxToasts);\n });\n\n if (duration > 0) {\n setTimeout(() => removeToast(id), duration);\n }\n },\n [defaultDuration, maxToasts, removeToast]\n );\n\n const positionClasses = {\n 'top-left': 'top-4 left-4',\n 'top-right': 'top-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n };\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast }}>\n {children}\n <div\n className={`fixed ${positionClasses[position]} z-[9999] flex flex-col gap-2 pointer-events-none`}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {toasts.map((toast) => (\n <ToastItem\n key={toast.id}\n toast={toast}\n onClose={() => removeToast(toast.id)}\n shouldAnimate={shouldAnimate}\n />\n ))}\n </div>\n </ToastContext.Provider>\n );\n};\n\ninterface ToastItemProps {\n toast: Toast;\n onClose: () => void;\n shouldAnimate: boolean;\n}\n\nconst ToastItem: React.FC<ToastItemProps> = ({ toast, onClose, shouldAnimate }) => {\n const typeStyles = {\n success: 'bg-[var(--color-success)] text-[var(--color-success-foreground)] border-[var(--color-success)]',\n error: 'bg-[var(--color-error)] text-[var(--color-error-foreground)] border-[var(--color-error)]',\n warning: 'bg-[var(--color-warning)] text-[var(--color-warning-foreground)] border-[var(--color-warning)]',\n info: 'bg-[var(--color-info)] text-[var(--color-info-foreground)] border-[var(--color-info)]',\n };\n\n const icons = {\n success: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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 error: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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 warning: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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 info: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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\n return (\n <div\n className={`\n ${typeStyles[toast.type]}\n flex items-center gap-3 px-4 py-3 rounded-lg shadow-lg border-2\n min-w-[300px] max-w-[400px] pointer-events-auto\n ${shouldAnimate ? 'animate-slide-in-right' : ''}\n `}\n role=\"alert\"\n >\n <div className=\"flex-shrink-0\" aria-hidden=\"true\">\n {icons[toast.type]}\n </div>\n <p className=\"flex-1 text-sm font-medium\">{toast.message}</p>\n <button\n onClick={onClose}\n className=\"flex-shrink-0 text-current hover:opacity-70 transition-opacity\"\n aria-label=\"Close notification\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n );\n};\n\n/**\n * useToast Hook\n *\n * Hook to trigger toast notifications from anywhere in your app.\n *\n * Example:\n * ```tsx\n * function MyComponent() {\n * const { toast } = useToast();\n *\n * const handleClick = () => {\n * toast('Settings saved!', 'success');\n * };\n *\n * return <button onClick={handleClick}>Save</button>;\n * }\n * ```\n */\nexport const useToast = () => {\n const context = useContext(ToastContext);\n\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n\n return {\n toast: context.addToast,\n removeToast: context.removeToast,\n toasts: context.toasts,\n };\n};\n\n\n","import React from 'react';\n\nexport interface AspectImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /**\n * Aspect ratio (width / height)\n * @example 16/9, 4/3, 1\n * @default 16/9\n */\n ratio?: number;\n /**\n * Image source\n */\n src: string;\n /**\n * Image alt text\n */\n alt: string;\n /**\n * Apply border radius\n * @default true\n */\n rounded?: boolean;\n /**\n * Apply shadow\n * @default false\n */\n shadow?: boolean;\n /**\n * Optional caption\n */\n caption?: React.ReactNode;\n}\n\nexport const AspectImage = React.forwardRef<HTMLImageElement, AspectImageProps>(\n ({\n ratio = 16 / 9,\n src,\n alt,\n rounded = true,\n shadow = false,\n caption,\n className = '',\n style,\n ...props\n }, ref) => {\n return (\n <figure className={`w-full ${className}`}>\n <div\n className={`relative overflow-hidden w-full bg-[var(--color-surface)] border border-[var(--color-border)]\n ${rounded ? 'rounded-xl' : ''}\n ${shadow ? 'shadow-md' : ''}`}\n style={{ aspectRatio: ratio }}\n >\n <img\n ref={ref}\n src={src}\n alt={alt}\n className=\"w-full h-full object-cover transition-transform duration-500 hover:scale-105\"\n {...props}\n />\n </div>\n {caption && (\n <figcaption className=\"mt-2 text-sm text-[var(--color-text-muted)] text-center\">\n {caption}\n </figcaption>\n )}\n </figure>\n );\n }\n);\n\nAspectImage.displayName = 'AspectImage';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground font-medium\",\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n // Semantic variants from original design system\n success: \"border-transparent bg-success text-success-foreground hover:bg-success/80\",\n warning: \"border-transparent bg-warning text-warning-foreground hover:bg-warning/80\",\n error: \"border-transparent bg-error text-error-foreground hover:bg-error/80\",\n info: \"border-transparent bg-info text-info-foreground hover:bg-info/80\",\n },\n size: {\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n lg: \"px-3 py-1.5 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n dot?: boolean;\n}\n\nfunction Badge({ className, variant, size, dot, children, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant, size }), className)} {...props}>\n {dot && (\n <span className={cn(\n \"mr-1.5 rounded-full bg-current animate-pulse\",\n size === 'sm' ? \"w-1.5 h-1.5\" :\n size === 'lg' ? \"w-2.5 h-2.5\" : \"w-2 h-2\"\n )} aria-hidden=\"true\" />\n )}\n {children}\n </div>\n )\n}\n\nexport { Badge, badgeVariants }\n","import React from 'react';\n\nexport interface BrandProps {\n /**\n * Brand name or logo element\n */\n children: React.ReactNode;\n\n /**\n * Size variant\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Optional href for link behavior\n * When provided, renders as an anchor tag\n */\n href?: string;\n\n /**\n * Additional className for customization\n */\n className?: string;\n\n /**\n * Click handler (used when href is provided)\n */\n onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\n/**\n * Brand Component\n *\n * A theme-aware brand/logo component that automatically handles:\n * - Dark mode support via design system tokens\n * - Consistent typography and sizing\n * - Optional link behavior\n * - Focus states and accessibility\n *\n * This component encapsulates the proper styling so you never need to\n * manually apply `text-[var(--color-text-primary)]` to logos.\n *\n * Features:\n * - Automatic theme-aware text color\n * - Three size variants (sm, md, lg)\n * - Works standalone or as a link\n * - Compatible with Next.js Link wrapper\n * - Proper focus states\n *\n * Usage:\n * ```tsx\n * // Standalone brand text\n * <Brand>Company Name</Brand>\n *\n * // As a link (use with Next.js Link)\n * <Brand href=\"/\">Company Name</Brand>\n *\n * // With Next.js Link wrapper\n * <Brand>\n * <NextLink href=\"/\">Company Name</NextLink>\n * </Brand>\n *\n * // Different sizes\n * <Brand size=\"sm\">Brand</Brand>\n * <Brand size=\"lg\">Brand</Brand>\n * ```\n */\nexport const Brand = React.forwardRef<HTMLElement, BrandProps>(\n ({ children, size = 'md', href, className = '', onClick }, ref) => {\n // Size mappings following Swiss Grid typography scale\n const sizeStyles = {\n sm: 'text-base', // 16px\n md: 'text-lg', // 18px\n lg: 'text-2xl', // 24px\n };\n\n // Base styles with design system tokens\n const baseStyles = `\n font-bold\n text-[var(--color-text-primary)]\n transition-colors duration-200\n focus-visible:outline-none\n focus-visible:ring-2\n focus-visible:ring-[var(--color-focus)]\n focus-visible:ring-offset-2\n ${sizeStyles[size]}\n `;\n\n // If href is provided, render as link\n if (href) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n onClick={onClick}\n className={`${baseStyles} hover:opacity-80 ${className}`}\n >\n {children}\n </a>\n );\n }\n\n // Otherwise render as span\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={`${baseStyles} ${className}`}\n >\n {children}\n </span>\n );\n }\n);\n\nBrand.displayName = 'Brand';\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"../actions/Button\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ ...props }) => {\n if (props.orientation === \"left\") {\n return <ChevronLeft className=\"h-4 w-4\" />\n }\n return <ChevronRight className=\"h-4 w-4\" />\n },\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../../lib/utils\"\n\nconst cardVariants = cva(\n \"rounded-2xl border bg-surface text-foreground shadow-sm\",\n {\n variants: {\n hoverEffect: {\n true: \"transition-all duration-300 hover:shadow-lg hover:-translate-y-1 hover:border-primary\",\n false: \"\",\n },\n variant: {\n default: \"bg-surface border-border\",\n glass: \"bg-glass border-glass-border backdrop-blur-md\",\n outline: \"bg-transparent border-border\",\n }\n },\n defaultVariants: {\n variant: \"default\",\n hoverEffect: false,\n },\n }\n)\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> { }\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, hoverEffect, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ variant, hoverEffect, className }))}\n {...props}\n />\n )\n)\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight font-heading\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-foreground-secondary\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","'use client';\n\nimport { ReactNode, useState, useMemo } from 'react';\nimport type { SyntaxType } from '../../lib/syntax-parser';\nimport { parseCode } from '../../lib/syntax-parser';\n\nexport interface CodeProps {\n /** The code content to display */\n children: ReactNode;\n /** Optional syntax highlighting type */\n syntax?: SyntaxType;\n /** Whether to render as inline code (default) or block */\n inline?: boolean;\n /** Show copy button for block code (default: true) */\n showCopy?: boolean;\n /** Additional className for custom styling */\n className?: string;\n}\n\n/**\n * Code Atom\n *\n * A semantic code wrapper with automatic syntax highlighting and enhanced visual styling.\n * Features distinct treatments for inline vs block code, with copy-on-hover for blocks.\n *\n * **Visual Design:**\n * - Inline: Pale amber background (#FEF3E7 light / #252525 dark) with subtle border\n * - Block: Cool gray background (#F8F9FA light / #1E1E1E dark) with generous padding\n * - Copy button appears on hover for block code with tooltip feedback\n * - Accessible contrast ratios (WCAG AA 4.5:1)\n *\n * @example\n * ```tsx\n * // Inline code - perfect for text snippets\n * <Code>example</Code>\n * <Code syntax=\"keyword\">const</Code>\n * <Code syntax=\"function\">useState()</Code>\n *\n * // Block code - for larger code examples\n * <Code inline={false}>const example = \"value\";</Code>\n * <Code inline={false} syntax=\"keyword\" showCopy={false}>\n * const greeting = \"Hello World\";\n * </Code>\n * ```\n */\nexport function Code({\n children,\n syntax = 'plain',\n inline = true,\n showCopy = true,\n className = '',\n}: CodeProps) {\n const [copied, setCopied] = useState(false);\n const [showTooltip, setShowTooltip] = useState(false);\n\n // Auto-parse code for block syntax highlighting\n const tokens = useMemo(() => {\n if (!inline && typeof children === 'string') {\n return parseCode(children);\n }\n return null;\n }, [children, inline]);\n\n // Handle copy to clipboard for block code\n const handleCopy = async () => {\n const text = typeof children === 'string' ? children : String(children);\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy code:', err);\n }\n };\n\n // Inline code - subtle, integrated into text\n if (inline) {\n return (\n <code\n className={`font-mono text-[0.875em] px-[0.375rem] py-[0.125rem] rounded border ${className}`}\n style={{\n backgroundColor: 'var(--code-inline-bg)',\n borderColor: 'var(--code-border)',\n color: `var(--syntax-${syntax})`,\n }}\n >\n {children}\n </code>\n );\n }\n\n // Block code - prominent with copy button on hover\n return (\n <div className={`relative group ${className}`}>\n <pre\n className=\"font-mono text-sm p-6 rounded-lg border overflow-x-auto\"\n style={{\n backgroundColor: 'var(--code-block-bg)',\n borderColor: 'var(--code-border)',\n }}\n >\n <code>\n {tokens ? (\n // Automatic syntax highlighting with parsed tokens\n tokens.map((token, index) => (\n <span\n key={index}\n style={{\n color: `var(--syntax-${token.type})`,\n }}\n >\n {token.text}\n </span>\n ))\n ) : (\n // Fallback to single color for non-string children\n <span\n style={{\n color: `var(--syntax-${syntax})`,\n }}\n >\n {children}\n </span>\n )}\n </code>\n </pre>\n\n {/* Copy Button - appears on hover for block code */}\n {showCopy && (\n <div className=\"absolute top-3 right-3 opacity-0 group-hover:opacity-100 transition-opacity duration-200\">\n <div className=\"relative\">\n <button\n onClick={handleCopy}\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n className=\"flex items-center gap-2 px-3 py-2 text-xs rounded-md transition-all duration-200 border\"\n style={{\n backgroundColor: 'var(--color-surface)',\n borderColor: 'var(--color-border)',\n color: 'var(--color-text-primary)',\n }}\n aria-label={copied ? 'Copied!' : 'Copy code'}\n >\n {copied ? (\n <>\n <svg\n className=\"w-3.5 h-3.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n <span>Copied!</span>\n </>\n ) : (\n <>\n <svg\n className=\"w-3.5 h-3.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"\n />\n </svg>\n <span>Copy</span>\n </>\n )}\n </button>\n\n {/* Tooltip */}\n {showTooltip && !copied && (\n <div\n className=\"absolute bottom-full right-0 mb-2 px-2 py-1 text-xs rounded whitespace-nowrap pointer-events-none\"\n style={{\n backgroundColor: 'var(--color-text-primary)',\n color: 'var(--color-background)',\n }}\n >\n Copy code\n {/* Arrow */}\n <div\n className=\"absolute top-full right-4 w-0 h-0\"\n style={{\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: '4px solid var(--color-text-primary)',\n }}\n />\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Syntax Parser Patterns\n * Regex patterns for tokenizing TypeScript/JavaScript/JSX code\n */\n\n/**\n * Token pattern configuration\n * Order matters - patterns are tested in sequence\n */\nexport const TOKEN_PATTERNS = [\n // Single-line comments\n { type: 'comment' as const, pattern: /\\/\\/.*$/gm },\n\n // Multi-line comments\n { type: 'comment' as const, pattern: /\\/\\*[\\s\\S]*?\\*\\//g },\n\n // Template literals and strings\n { type: 'string' as const, pattern: /`(?:\\\\.|[^`\\\\])*`/g },\n { type: 'string' as const, pattern: /\"(?:\\\\.|[^\"\\\\])*\"/g },\n { type: 'string' as const, pattern: /'(?:\\\\.|[^'\\\\])*'/g },\n\n // JSX/TSX tags\n { type: 'tag' as const, pattern: /<\\/?[A-Z][a-zA-Z0-9]*(?=[\\s>])/g },\n { type: 'tag' as const, pattern: /<\\/?[a-z][a-zA-Z0-9-]*(?=[\\s>])/g },\n\n // Keywords\n {\n type: 'keyword' as const,\n pattern: /\\b(const|let|var|function|return|if|else|for|while|do|switch|case|break|continue|throw|try|catch|finally|new|typeof|instanceof|void|delete|async|await|yield|export|import|from|default|class|extends|implements|interface|type|enum|namespace|declare|public|private|protected|static|readonly|abstract|as|is|in|of|null|undefined)\\b/g\n },\n\n // Booleans\n { type: 'boolean' as const, pattern: /\\b(true|false)\\b/g },\n\n // Numbers\n { type: 'number' as const, pattern: /\\b\\d+\\.?\\d*(?:e[+-]?\\d+)?(?:n)?\\b/gi },\n { type: 'number' as const, pattern: /\\b0x[0-9a-f]+\\b/gi },\n\n // Function calls\n { type: 'function' as const, pattern: /\\b[a-zA-Z_$][a-zA-Z0-9_$]*(?=\\s*\\()/g },\n\n // Class names (PascalCase identifiers)\n { type: 'className' as const, pattern: /\\b[A-Z][a-zA-Z0-9]*\\b/g },\n\n // JSX attributes\n { type: 'attribute' as const, pattern: /\\b[a-z][a-zA-Z0-9]*(?=\\s*=)/g },\n\n // Object properties (after dot)\n { type: 'property' as const, pattern: /(?<=\\.)[a-zA-Z_$][a-zA-Z0-9_$]*/g },\n\n // Operators\n {\n type: 'operator' as const,\n pattern: /[+\\-*/%=!<>&|^~?:]+|&&|\\|\\||\\.\\.\\.|\\?\\?|===|!==|==|!=|<=|>=|<<|>>|>>>/g\n },\n\n // Punctuation\n { type: 'punctuation' as const, pattern: /[{}[\\](),.;]/g },\n] as const;\n\n/**\n * Characters that should be treated as whitespace\n */\nexport const WHITESPACE = /\\s+/g;\n","/**\n * Syntax Tokenizer\n * Core tokenization logic for parsing code into syntax tokens\n */\n\nimport { SyntaxToken, Language } from './types';\nimport { TOKEN_PATTERNS } from './patterns';\n\ninterface Match {\n text: string;\n type: SyntaxToken['type'];\n index: number;\n}\n\n/**\n * Tokenizes source code into an array of syntax tokens\n *\n * @param code - The source code to tokenize\n * @param language - The programming language (currently only affects metadata, all use same patterns)\n * @returns Array of syntax tokens with text and type information\n *\n * @example\n * ```ts\n * const tokens = tokenize('const greeting = \"Hello\";');\n * // Returns:\n * // [\n * // { text: 'const', type: 'keyword' },\n * // { text: ' ', type: 'plain' },\n * // { text: 'greeting', type: 'plain' },\n * // { text: ' ', type: 'plain' },\n * // { text: '=', type: 'operator' },\n * // { text: ' ', type: 'plain' },\n * // { text: '\"Hello\"', type: 'string' },\n * // { text: ';', type: 'punctuation' },\n * // ]\n * ```\n */\nexport function tokenize(code: string, language: Language = 'typescript'): SyntaxToken[] {\n // If empty, return plain token\n if (!code || code.trim() === '') {\n return [{ text: code, type: 'plain' }];\n }\n\n // Collect all matches from all patterns\n const matches: Match[] = [];\n\n for (const { type, pattern } of TOKEN_PATTERNS) {\n // Reset regex lastIndex\n pattern.lastIndex = 0;\n\n let match;\n while ((match = pattern.exec(code)) !== null) {\n matches.push({\n text: match[0],\n type,\n index: match.index,\n });\n }\n }\n\n // Sort matches by position\n matches.sort((a, b) => a.index - b.index);\n\n // Remove overlapping matches (keep first match at each position)\n const nonOverlapping: Match[] = [];\n let lastEnd = 0;\n\n for (const match of matches) {\n if (match.index >= lastEnd) {\n nonOverlapping.push(match);\n lastEnd = match.index + match.text.length;\n }\n }\n\n // Build tokens array, filling gaps with plain text\n const tokens: SyntaxToken[] = [];\n let position = 0;\n\n for (const match of nonOverlapping) {\n // Add plain text before this match\n if (match.index > position) {\n const plainText = code.slice(position, match.index);\n tokens.push({ text: plainText, type: 'plain' });\n }\n\n // Add the matched token\n tokens.push({ text: match.text, type: match.type });\n position = match.index + match.text.length;\n }\n\n // Add any remaining plain text\n if (position < code.length) {\n tokens.push({ text: code.slice(position), type: 'plain' });\n }\n\n return tokens;\n}\n\n/**\n * Detects the language from code content or file extension\n * Currently returns 'typescript' for all cases as patterns support TS/JS/JSX/TSX\n *\n * @param code - The source code\n * @param filename - Optional filename for extension detection\n * @returns Detected language\n */\nexport function detectLanguage(code: string, filename?: string): Language {\n // For now, treat everything as TypeScript since our patterns support all variants\n // Future: Could detect based on JSX syntax or file extension\n if (filename) {\n if (filename.endsWith('.tsx')) return 'tsx';\n if (filename.endsWith('.jsx')) return 'jsx';\n if (filename.endsWith('.js')) return 'javascript';\n }\n\n return 'typescript';\n}\n","/**\n * Syntax Parser\n *\n * Lightweight syntax parser for automatic code tokenization.\n * Converts plain code strings into syntax-highlighted token arrays.\n *\n * @example\n * ```ts\n * import { parseCode } from '@sage/ui';\n *\n * const tokens = parseCode('const greeting = \"Hello World\";');\n * // Use with CollapsibleCodeBlock:\n * <CollapsibleCodeBlock\n * id=\"example\"\n * code={tokens}\n * />\n * ```\n */\n\nexport { tokenize, detectLanguage } from './tokenizer';\nexport type { SyntaxToken, SyntaxType, Language } from './types';\n\nimport { tokenize, detectLanguage } from './tokenizer';\nimport type { SyntaxToken, Language } from './types';\n\n/**\n * Parses source code into syntax tokens for highlighting\n *\n * @param code - The source code to parse\n * @param language - Optional language hint (auto-detected if not provided)\n * @returns Array of syntax tokens ready for CollapsibleCodeBlock\n *\n * @example\n * ```ts\n * const code = `\n * import { useState } from 'react';\n *\n * export function Counter() {\n * const [count, setCount] = useState(0);\n * return <button onClick={() => setCount(count + 1)}>{count}</button>;\n * }\n * `;\n *\n * const tokens = parseCode(code);\n * ```\n */\nexport function parseCode(code: string, language?: Language): SyntaxToken[] {\n const lang = language || detectLanguage(code);\n return tokenize(code, lang);\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { useTheme } from '../../hooks/useTheme';\nimport { syntaxColors } from '@sage/tokens';\nimport { parseCode, type SyntaxToken } from '../../lib/syntax-parser';\n\nexport interface CollapsibleCodeBlockProps {\n /** Unique identifier for the code block (required for animation) */\n id: string;\n /** Title/label for the code block */\n title?: string;\n /** Code to display - can be string or array of syntax tokens */\n code: string | SyntaxToken[];\n /** Language identifier (e.g., 'typescript', 'css', 'html') */\n language?: string;\n /** Initial collapsed state */\n defaultCollapsed?: boolean;\n /** Show copy button */\n showCopy?: boolean;\n /** Custom className for container */\n className?: string;\n}\n\n/**\n * CollapsibleCodeBlock Organism\n *\n * A reusable code block component with:\n * - Smooth spring animation for expand/collapse\n * - Syntax highlighting with light/dark theme support\n * - Copy to clipboard functionality\n * - Preview mode showing first 3 lines\n * - Gradient overlay in collapsed state\n *\n * @example\n * ```tsx\n * <CollapsibleCodeBlock\n * id=\"example-code\"\n * title=\"TypeScript Example\"\n * code={[\n * { text: 'const', type: 'keyword' },\n * { text: ' example ', type: 'plain' },\n * { text: '=', type: 'operator' },\n * { text: ' \"Hello\"', type: 'string' },\n * ]}\n * language=\"typescript\"\n * />\n * ```\n */\nexport function CollapsibleCodeBlock({\n id,\n title,\n code,\n language,\n defaultCollapsed = true,\n showCopy = true,\n className = '',\n}: CollapsibleCodeBlockProps) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n const [copySuccess, setCopySuccess] = useState(false);\n const { mode } = useTheme();\n\n // Get the appropriate color scheme based on current theme mode\n const colors = mode === 'dark' ? syntaxColors.dark : syntaxColors.light;\n\n // Auto-tokenize string code for syntax highlighting\n const tokens = useMemo(() => {\n return typeof code === 'string' ? parseCode(code) : code;\n }, [code]);\n\n // Convert tokens to string for copying\n const codeString = tokens.map(token => token.text).join('');\n\n // Handle copy to clipboard\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(codeString);\n setCopySuccess(true);\n setTimeout(() => setCopySuccess(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n // Handle toggle animation\n const handleToggle = () => {\n const preview = document.getElementById(`${id}-preview`);\n const codeBlock = document.getElementById(`${id}-code`);\n const icon = document.getElementById(`${id}-icon`);\n\n if (preview && codeBlock && icon) {\n const isHidden = codeBlock.classList.contains('hidden');\n\n if (isHidden) {\n // Opening: start at preview height, expand to full\n preview.classList.add('hidden');\n codeBlock.classList.remove('hidden');\n codeBlock.style.maxHeight = '6.6rem'; // Match preview height (3 lines)\n codeBlock.offsetHeight; // Force reflow\n codeBlock.style.maxHeight = codeBlock.scrollHeight + 'px';\n } else {\n // Closing: collapse to preview height, then swap\n codeBlock.style.maxHeight = '6.6rem';\n setTimeout(() => {\n codeBlock.classList.add('hidden');\n preview.classList.remove('hidden');\n }, 500);\n }\n\n icon.classList.toggle('rotate-90');\n setIsCollapsed(!isCollapsed);\n }\n };\n\n // Render syntax-highlighted code with inline colors from tokens\n const renderCode = (tokensToRender: SyntaxToken[]) => {\n return tokensToRender.map((token, index) => {\n // Get color from syntax tokens based on token type\n const color = token.type ? colors[token.type] : colors.plain;\n\n return (\n <span\n key={index}\n style={{ color }}\n >\n {token.text}\n </span>\n );\n });\n };\n\n // Get preview tokens (first ~3 lines worth)\n const previewTokens = useMemo(() => {\n // Count characters to approximate 3 lines (~120 chars)\n let charCount = 0;\n const maxChars = 120;\n const preview: SyntaxToken[] = [];\n\n for (const token of tokens) {\n if (charCount >= maxChars) break;\n preview.push(token);\n charCount += token.text.length;\n }\n\n return preview;\n }, [tokens]);\n\n return (\n <div className={`w-full min-w-0 ${className}`}>\n {/* Title */}\n {title && (\n <h3 className=\"text-lg font-semibold mb-3 text-[var(--color-text-primary)]\">\n {title}\n </h3>\n )}\n\n {/* Action Buttons */}\n <div className=\"flex gap-2 mb-4\">\n <button\n onClick={handleToggle}\n className=\"flex items-center gap-2 px-3 py-2 text-xs text-[var(--color-text-primary)] bg-[var(--color-surface)] hover:bg-[var(--color-primary)] hover:text-[var(--color-primary-foreground)] hover:scale-105 hover:shadow-lg active:scale-95 border border-[var(--color-border)] rounded-md transition-all duration-200\"\n aria-expanded={!isCollapsed}\n aria-controls={`${id}-code`}\n >\n <svg\n id={`${id}-icon`}\n className=\"w-3 h-3 transition-transform duration-200\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n {isCollapsed ? 'Show Code' : 'Hide Code'}\n </button>\n\n {showCopy && (\n <button\n onClick={handleCopy}\n className=\"flex items-center gap-2 px-3 py-2 text-xs text-[var(--color-text-primary)] bg-[var(--color-surface)] hover:bg-[var(--color-primary)] hover:text-[var(--color-primary-foreground)] hover:scale-105 hover:shadow-lg active:scale-95 border border-[var(--color-border)] rounded-md transition-all duration-200\"\n >\n {copySuccess ? (\n <>\n <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n Copied!\n </>\n ) : (\n <>\n <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n Copy\n </>\n )}\n </button>\n )}\n </div>\n\n {/* Code Preview (visible when collapsed) */}\n <div\n id={`${id}-preview`}\n className={`bg-[var(--color-background)] p-4 rounded border border-[var(--color-border)] overflow-hidden mb-4 w-full max-w-full ${isCollapsed ? '' : 'hidden'}`}\n style={{ height: '6.6rem' }}\n >\n <div className=\"relative w-full max-w-full min-w-0\">\n <pre className=\"text-sm font-mono overflow-x-auto w-full max-w-full whitespace-pre\">\n <code>{renderCode(previewTokens)}</code>\n </pre>\n <div className=\"absolute inset-x-0 bottom-0 h-6 bg-gradient-to-t from-[var(--color-background)] to-transparent pointer-events-none\" />\n </div>\n </div>\n\n {/* Full Code (hidden by default) */}\n <div\n id={`${id}-code`}\n className={`transition-all duration-500 ease-out overflow-hidden bg-[var(--color-background)] p-4 rounded border border-[var(--color-border)] w-full max-w-full ${isCollapsed ? 'hidden' : ''}`}\n style={{\n maxHeight: isCollapsed ? '0px' : 'none',\n transition: 'max-height 0.5s cubic-bezier(0.34, 1.56, 0.64, 1)',\n }}\n >\n <pre className=\"text-sm font-mono overflow-x-auto w-full max-w-full whitespace-pre\">\n <code>{renderCode(tokens)}</code>\n </pre>\n </div>\n </div>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n ColumnDef,\n flexRender,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n SortingState,\n useReactTable,\n} from \"@tanstack/react-table\"\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"./Table\"\nimport { Button } from \"../actions/Button\"\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = React.useState<SortingState>([])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n onSortingChange: setSorting,\n getSortedRowModel: getSortedRowModel(),\n state: {\n sorting,\n },\n })\n\n return (\n <div className=\"space-y-4\">\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n )\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n <div className=\"flex items-center justify-end space-x-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n Previous\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n Next\n </Button>\n </div>\n </div>\n )\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import React from 'react';\n\nexport interface DescriptionListItem {\n label: string | React.ReactNode;\n value: string | React.ReactNode;\n}\n\nexport interface DescriptionListProps {\n items: DescriptionListItem[];\n /**\n * Layout direction\n * @default 'row' (side-by-side labels/values in a grid)\n */\n direction?: 'row' | 'column';\n className?: string;\n}\n\nexport const DescriptionList: React.FC<DescriptionListProps> = ({\n items,\n direction = 'row',\n className = ''\n}) => {\n return (\n <dl className={`\n grid gap-x-4 gap-y-4\n ${direction === 'row' ? 'grid-cols-2 sm:grid-cols-[auto_1fr]' : 'grid-cols-1'}\n ${className}\n `}>\n {items.map((item, index) => (\n <div key={index} className=\"contents\">\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {item.label}\n </dt>\n <dd className=\"text-sm text-[var(--color-text-primary)] font-medium\">\n {item.value}\n </dd>\n </div>\n ))}\n </dl>\n );\n};\n","import React from 'react';\n\nexport interface GitHubIconProps {\n /**\n * Size of the icon in pixels\n * @default 20\n */\n size?: number;\n /**\n * Additional className for customization\n */\n className?: string;\n}\n\n/**\n * GitHub Icon Component\n *\n * Uses currentColor so it inherits the text color from its parent.\n * Works automatically with light/dark modes through color inheritance.\n */\nexport const GitHubIcon = React.forwardRef<SVGSVGElement, GitHubIconProps>(\n ({ size = 20, className = '' }, ref) => {\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n fill=\"currentColor\"\n viewBox=\"0 0 16 16\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8\"/>\n </svg>\n );\n }\n);\n\nGitHubIcon.displayName = 'GitHubIcon';\n","import React from 'react';\n\nexport interface HeadingProps {\n /**\n * Heading content\n */\n children: React.ReactNode;\n\n /**\n * Heading level (affects both semantics and styling)\n */\n level: 1 | 2 | 3 | 4 | 5 | 6;\n\n /**\n * Additional className for customization\n */\n className?: string;\n}\n\n/**\n * Heading Component\n *\n * Semantic heading with automatic token-based styling.\n * No need to manually apply text colors, sizes, or weights.\n *\n * **What it handles automatically:**\n * - Theme-aware text color (`--color-text-primary`)\n * - Appropriate font size for each level\n * - Font weight (bold for all levels)\n * - Line height for readability\n * - Dark mode support\n *\n * **Swiss Grid Typography:**\n * - H1: 48px (3xl) on mobile, 60px (5xl) on desktop\n * - H2: 36px (3xl) on mobile, 48px (4xl) on desktop\n * - H3: 30px (3xl)\n * - H4: 24px (2xl)\n * - H5: 20px (xl)\n * - H6: 18px (lg)\n *\n * Usage:\n * ```tsx\n * <Heading level={1}>Page Title</Heading>\n * <Heading level={2}>Section Heading</Heading>\n * <Heading level={3}>Subsection</Heading>\n * ```\n */\nexport const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(\n ({ children, level, className = '' }, ref) => {\n const levelStyles = {\n 1: 'text-4xl lg:text-5xl', // 36px → 48px\n 2: 'text-3xl lg:text-4xl', // 30px → 36px\n 3: 'text-2xl lg:text-3xl', // 24px → 30px\n 4: 'text-xl lg:text-2xl', // 20px → 24px\n 5: 'text-lg lg:text-xl', // 18px → 20px\n 6: 'text-base lg:text-lg', // 16px → 18px\n };\n\n const baseStyles = `\n font-bold\n text-[var(--color-text-primary)]\n ${levelStyles[level]}\n `;\n\n const Component = `h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n return React.createElement(\n Component,\n {\n ref,\n className: `${baseStyles} ${className}`,\n },\n children\n );\n }\n);\n\nHeading.displayName = 'Heading';\n","import React from 'react';\n\nexport interface TextProps {\n /**\n * Text content\n */\n children: React.ReactNode;\n\n /**\n * Semantic variant determines both color and meaning\n * @default 'primary'\n */\n variant?: 'primary' | 'secondary' | 'muted';\n\n /**\n * Text size\n * @default 'base'\n */\n size?: 'xs' | 'sm' | 'base' | 'lg' | 'xl';\n\n /**\n * Font weight\n * @default 'normal'\n */\n weight?: 'normal' | 'medium' | 'semibold' | 'bold';\n\n /**\n * HTML element to render as\n * @default 'p'\n */\n as?: 'p' | 'span' | 'div' | 'label' | 'time';\n\n /**\n * Additional className for customization\n */\n className?: string;\n}\n\n/**\n * Text Component\n *\n * Semantic text with automatic token-based styling.\n * No need to manually apply CSS variable text color classes.\n *\n * **What it handles automatically:**\n * - Theme-aware text colors\n * - Semantic color variants (primary, secondary, muted)\n * - Consistent sizing\n * - Dark mode support\n *\n * **Variants:**\n * - `primary`: Main content text (`--color-text-primary`)\n * - `secondary`: Supporting text (`--color-text-secondary`)\n * - `muted`: De-emphasized text (`--color-text-muted`)\n *\n * Usage:\n * ```tsx\n * // Primary content text\n * <Text>Main paragraph content</Text>\n *\n * // Secondary supporting text\n * <Text variant=\"secondary\">Helper text or description</Text>\n *\n * // Muted text (least emphasis)\n * <Text variant=\"muted\">Footnote or metadata</Text>\n *\n * // Different sizes\n * <Text size=\"lg\">Large text</Text>\n * <Text size=\"sm\">Small text</Text>\n *\n * // As different element\n * <Text as=\"span\">Inline text</Text>\n * <Text as=\"label\">Form label</Text>\n * ```\n */\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\n (\n {\n children,\n variant = 'primary',\n size = 'base',\n weight = 'normal',\n as: Component = 'p',\n className = '',\n },\n ref\n ) => {\n const variantStyles = {\n primary: 'text-[var(--color-text-primary)]',\n secondary: 'text-[var(--color-text-secondary)]',\n muted: 'text-[var(--color-text-muted)]',\n };\n\n const sizeStyles = {\n xs: 'text-xs', // 12px\n sm: 'text-sm', // 14px\n base: 'text-base', // 16px\n lg: 'text-lg', // 18px\n xl: 'text-xl', // 20px\n };\n\n const weightStyles = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n };\n\n return React.createElement(\n Component,\n {\n ref,\n className: `${variantStyles[variant]} ${sizeStyles[size]} ${weightStyles[weight]} ${className}`,\n },\n children\n );\n }\n);\n\nText.displayName = 'Text';\n","'use client';\n\nimport { motion, HTMLMotionProps } from 'framer-motion';\nimport React from 'react';\nimport { useCustomizer } from '../../lib/store';\n\ninterface VariableWeightTextProps extends Omit<HTMLMotionProps<'div'>, 'children'> {\n /**\n * Minimum font weight for the animation\n * @default 200\n */\n minWeight?: number;\n /**\n * Maximum font weight for the animation\n * @default 700\n */\n maxWeight?: number;\n /**\n * Duration of one complete animation cycle (in seconds)\n * @default 2\n */\n duration?: number;\n /**\n * Motion intensity override (0-10). If not provided, uses global customizer setting.\n */\n intensity?: number;\n /**\n * Font family to use. Recommended: 'Clash Display' or another variable font.\n * @default 'Clash Display'\n */\n fontFamily?: string;\n /**\n * Text content to animate\n */\n children?: React.ReactNode;\n}\n\n/**\n * VariableWeightText\n *\n * A motion component that creates a \"breathing\" effect by animating font weight.\n * Works best with variable fonts like Clash Display that support smooth weight transitions.\n *\n * **Key Features:**\n * - Animates font-weight in a continuous loop\n * - Respects global motion intensity settings\n * - Automatically centers text to prevent layout shifts during weight changes\n * - Disables animation when motion intensity is 0 (accessibility)\n *\n * **Usage:**\n * ```tsx\n * <VariableWeightText minWeight={200} maxWeight={700}>\n * Variable Font Text\n * </VariableWeightText>\n * ```\n */\nexport const VariableWeightText = ({\n children,\n minWeight = 200,\n maxWeight = 700,\n duration = 2,\n intensity,\n fontFamily = 'Clash Display',\n className,\n style,\n ...props\n}: VariableWeightTextProps) => {\n const { motion: motionIntensity } = useCustomizer();\n\n // Use provided intensity or global intensity\n const effectiveIntensity = intensity ?? motionIntensity;\n\n // Scale duration based on intensity (higher intensity = faster animation)\n const scaledDuration = effectiveIntensity > 0\n ? duration * (5 / effectiveIntensity)\n : duration;\n\n // If motion is disabled (intensity 0), render static text at maxWeight\n if (effectiveIntensity === 0) {\n return (\n <div\n className={className}\n style={{\n fontFamily,\n fontWeight: maxWeight,\n fontVariationSettings: `'wght' ${maxWeight}`,\n textAlign: 'center',\n width: '100%',\n WebkitFontSmoothing: 'antialiased',\n MozOsxFontSmoothing: 'grayscale',\n ...style,\n }}\n {...props as any}\n >\n {children}\n </div>\n );\n }\n\n return (\n <motion.div\n initial={{\n fontVariationSettings: `'wght' ${minWeight}`\n }}\n animate={{\n fontVariationSettings: `'wght' ${maxWeight}`\n }}\n transition={{\n duration: scaledDuration,\n repeat: Infinity,\n repeatType: \"reverse\",\n ease: \"easeInOut\",\n }}\n style={{\n fontFamily,\n fontWeight: minWeight, // Fallback\n textAlign: 'center',\n width: '100%',\n willChange: 'font-variation-settings', // GPU acceleration hint\n WebkitFontSmoothing: 'antialiased',\n MozOsxFontSmoothing: 'grayscale',\n ...style,\n }}\n className={className}\n {...props}\n >\n {children}\n </motion.div>\n );\n};\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { useEffect, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { useMotionPreference } from '../../hooks/useMotionPreference';\n\nexport interface TypewriterProps {\n text: string | string[];\n speed?: number;\n delay?: number;\n loop?: boolean;\n loopDelay?: number;\n cursor?: string;\n showCursor?: boolean;\n className?: string;\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div';\n}\n\nexport function Typewriter({\n text,\n speed = 0.05,\n delay = 0,\n loop = false,\n loopDelay = 2,\n cursor = '|',\n showCursor = true,\n className,\n as: Component = 'span',\n}: TypewriterProps) {\n const { shouldAnimate, scale } = useMotionPreference();\n const [displayedText, setDisplayedText] = useState('');\n\n // Flatten text to array for easier handling\n const textArray = Array.isArray(text) ? text : [text];\n\n useEffect(() => {\n // If reduced motion, show full text immediately\n if (!shouldAnimate) {\n setDisplayedText(textArray[0]);\n return;\n }\n\n let timeoutId: ReturnType<typeof setTimeout>;\n let isCancelled = false;\n\n // State pointers\n let stringIndex = 0;\n let charIndex = 0;\n let isDeleting = false;\n\n const type = () => {\n if (isCancelled) return;\n\n const currentString = textArray[stringIndex];\n const currentSpeed = (isDeleting ? speed / 2 : speed) * (scale > 0 ? (5 / scale) : 1) * 1000;\n\n if (isDeleting) {\n // DELETING\n if (charIndex > 0) {\n setDisplayedText(currentString.substring(0, charIndex - 1));\n charIndex--;\n timeoutId = setTimeout(type, currentSpeed);\n } else {\n // Start typing next string\n isDeleting = false;\n stringIndex = (stringIndex + 1) % textArray.length;\n timeoutId = setTimeout(type, currentSpeed);\n }\n } else {\n // TYPING\n if (charIndex < currentString.length) {\n setDisplayedText(currentString.substring(0, charIndex + 1));\n charIndex++;\n timeoutId = setTimeout(type, currentSpeed);\n } else {\n // FINISHED TYPING STRING\n if (loop) {\n isDeleting = true;\n timeoutId = setTimeout(type, loopDelay * 1000);\n } else if (stringIndex < textArray.length - 1) {\n // If we have more strings to type in sequence (and not just looping one)\n // Note: The original logic treated array as \"loop through these options\". \n // To match previous behavior: array = specific sequence to loop? \n // Usually typewriters with arrays toggle between them.\n isDeleting = true;\n timeoutId = setTimeout(type, loopDelay * 1000);\n }\n }\n }\n };\n\n // Initial Start Delay\n timeoutId = setTimeout(() => {\n type();\n }, delay * 1000);\n\n return () => {\n isCancelled = true;\n clearTimeout(timeoutId);\n };\n }, [text, speed, delay, loop, loopDelay, shouldAnimate, scale]); // Re-run effect if props change\n\n return (\n <Component className={cn(\"inline\", className)}>\n <span>{displayedText}</span>\n {showCursor && (\n <motion.span\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.5, repeat: Infinity, repeatType: \"reverse\" }}\n className=\"ml-0.5 text-[var(--color-primary)] font-light\"\n >\n {cursor}\n </motion.span>\n )}\n </Component>\n );\n}\n","import React from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport interface GradientConfig {\n type: 'linear' | 'radial';\n angle?: number; // For linear gradients (default: 135deg)\n position?: string; // For radial gradients (default: 'circle at 50% 50%')\n colors: string[]; // Array of hex colors (2-5 colors recommended)\n stops?: number[]; // Optional color stop positions in % (0-100)\n}\n\nexport interface OpenGraphCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n description?: string;\n variant?: 'primary' | 'secondary' | 'accent' | 'sage' | 'gradient';\n icon?: React.ReactNode | null; // Custom logo, icon, or image element (pass null to hide)\n gradient?: GradientConfig; // Custom gradient configuration\n primaryColor?: string; // Override primary color (hex)\n secondaryColor?: string; // Override secondary color (hex)\n accentColor?: string; // Override accent color (hex)\n titleFontSize?: number; // Title font size in px (default: 96)\n descriptionFontSize?: number; // Description font size in px (default: 42)\n fontFamily?: string; // Font family name (default: 'sans-serif')\n}\n\n/**\n * Helper: Build CSS gradient string from GradientConfig\n */\nfunction buildGradientCSS(config: GradientConfig): string {\n const { type, angle = 135, position = 'circle at 50% 50%', colors, stops } = config;\n\n // Build color stops string\n const colorStops = colors.map((color, index) => {\n if (stops && stops[index] !== undefined) {\n return `${color} ${stops[index]}%`;\n }\n // Auto-distribute stops evenly if not specified\n const autoStop = (index / (colors.length - 1)) * 100;\n return `${color} ${autoStop}%`;\n }).join(', ');\n\n if (type === 'radial') {\n return `radial-gradient(${position}, ${colorStops})`;\n }\n return `linear-gradient(${angle}deg, ${colorStops})`;\n}\n\n/**\n * Helper: Determine if background is light (for text color)\n */\nfunction isLightColor(hex: string): boolean {\n const rgb = parseInt(hex.slice(1), 16);\n const r = (rgb >> 16) & 0xff;\n const g = (rgb >> 8) & 0xff;\n const b = (rgb >> 0) & 0xff;\n const luma = 0.299 * r + 0.587 * g + 0.114 * b;\n return luma > 186;\n}\n\n/**\n * OpenGraphCard\n *\n * A specialized component designed for generating Open Graph images (1200x630px).\n * Supports custom icons, gradients, and theme color overrides.\n *\n * NOTE: This component uses inline styles to ensure compatibility with Next.js Open Graph generation (Satori).\n * CSS variables cannot be used in OG images - all colors must be explicit hex values.\n */\nexport function OpenGraphCard({\n title = 'Sage UI',\n description = \"The Solopreneur's Development Stack\",\n variant = 'sage',\n icon,\n gradient,\n primaryColor,\n secondaryColor,\n accentColor,\n titleFontSize = 96,\n descriptionFontSize = 42,\n fontFamily = 'sans-serif',\n className,\n ...props\n}: OpenGraphCardProps) {\n // Map variants to background styles\n // If color overrides are provided, use them; otherwise use defaults\n const backgroundStyles: Record<string, { background: string; accentColor: string; textColor?: string }> = {\n primary: {\n background: primaryColor\n ? `linear-gradient(135deg, ${primaryColor} 0%, ${primaryColor}dd 100%)`\n : 'linear-gradient(135deg, #0a0a0a 0%, #171717 100%)',\n accentColor: accentColor || '#ffffff'\n },\n sage: {\n background: primaryColor && secondaryColor\n ? `radial-gradient(circle at 50% 0%, ${primaryColor} 0%, ${secondaryColor} 80%)`\n : 'radial-gradient(circle at 50% 0%, #171717 0%, #0a0a0a 80%)',\n accentColor: accentColor || '#ffffff'\n },\n secondary: {\n background: secondaryColor\n ? `linear-gradient(135deg, ${secondaryColor} 0%, ${secondaryColor}dd 100%)`\n : 'linear-gradient(135deg, #f5f5f5 0%, #e5e5e5 100%)',\n accentColor: primaryColor || '#0a0a0a',\n textColor: primaryColor || '#0a0a0a'\n },\n accent: {\n background: accentColor\n ? `linear-gradient(135deg, ${accentColor} 0%, ${accentColor}dd 100%)`\n : 'linear-gradient(135deg, #0070f3 0%, #0066cc 100%)',\n accentColor: '#ffffff'\n },\n emerald: {\n background: 'radial-gradient(circle at 50% 100%, #022c22 20%, #0f172a 100%)',\n accentColor: '#10b981'\n },\n gradient: {\n background: gradient\n ? buildGradientCSS(gradient)\n : props.style?.background?.toString() || 'linear-gradient(135deg, #2563eb 0%, #7c3aed 100%)',\n accentColor: accentColor || '#ffffff'\n }\n };\n\n const activeStyle = backgroundStyles[variant] || backgroundStyles.sage;\n\n // Determine if background is light for text color\n const firstColor = gradient?.colors[0] || primaryColor || '#0a0a0a';\n const isLight = variant === 'secondary' || isLightColor(firstColor);\n\n return (\n <div\n className={cn(className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '1200px',\n height: '630px',\n background: activeStyle.background,\n padding: '80px',\n position: 'relative',\n overflow: 'hidden',\n fontFamily,\n color: activeStyle.textColor || 'white',\n ...props.style,\n }}\n {...props}\n >\n {/* Ambient Lighting Mesh (optional, only for dark themes) */}\n {!isLight && (\n <div\n style={{\n position: 'absolute',\n top: '-50%',\n left: '-50%',\n width: '200%',\n height: '200%',\n background: `radial-gradient(circle at 50% 50%, ${activeStyle.accentColor} 0%, transparent 60%)`,\n opacity: 0.15,\n transform: 'scale(1.5)',\n pointerEvents: 'none',\n }}\n />\n )}\n\n {/* Content Container */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '24px',\n zIndex: 10,\n maxWidth: '1000px',\n textAlign: 'center',\n }}\n >\n {/* Brand Logo/Icon */}\n {icon !== null && (\n icon !== undefined ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: '16px',\n }}\n >\n {icon}\n </div>\n ) : (\n <div\n style={{\n width: '64px',\n height: '64px',\n borderRadius: '20px',\n background: isLight ? '#0a0a0a' : 'white',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n marginBottom: '16px',\n }}\n >\n <div style={{ width: '24px', height: '24px', borderRadius: '50%', background: isLight ? 'white' : activeStyle.accentColor }} />\n </div>\n )\n )}\n\n <h1\n style={{\n fontSize: `${titleFontSize}px`,\n fontWeight: 900,\n margin: 0,\n letterSpacing: '-0.04em',\n lineHeight: 1.1,\n textShadow: isLight ? 'none' : '0 4px 30px rgba(0,0,0,0.3)',\n }}\n >\n {title}\n </h1>\n\n {description && (\n <p\n style={{\n fontSize: `${descriptionFontSize}px`,\n fontWeight: 500,\n opacity: 0.9,\n margin: 0,\n letterSpacing: '-0.01em',\n lineHeight: 1.4,\n maxWidth: '900px',\n }}\n >\n {description}\n </p>\n )}\n </div>\n </div>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item> & React.RefAttributes<React.ElementRef<typeof AccordionPrimitive.Item>>\n> = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b last:border-b-0\", className)}\n {...props}\n />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & React.RefAttributes<React.ElementRef<typeof AccordionPrimitive.Trigger>>\n> = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium hover:underline outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"pointer-events-none h-4 w-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent: React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content> & React.RefAttributes<React.ElementRef<typeof AccordionPrimitive.Content>>\n> = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","\"use client\"\n\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\n\nconst AspectRatio = AspectRatioPrimitive.Root\n\nexport { AspectRatio }\n","\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../actions/Button\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nconst Carousel: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLDivElement> & CarouselProps & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselProps\n>(\n (\n {\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return\n }\n\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return\n }\n\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) {\n return\n }\n\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n }\n)\nCarousel.displayName = \"Carousel\"\n\nconst CarouselContent: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n )\n }\n)\nCarouselContent.displayName = \"CarouselContent\"\n\nconst CarouselItem: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>\n> = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const { orientation } = useCarousel()\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n )\n }\n)\nCarouselItem.displayName = \"CarouselItem\"\n\nconst CarouselPrevious: React.ForwardRefExoticComponent<\n React.ComponentProps<typeof Button> & React.RefAttributes<HTMLButtonElement>\n> = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button>>(\n ({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-left-12 top-1/2 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n }\n)\nCarouselPrevious.displayName = \"CarouselPrevious\"\n\nconst CarouselNext: React.ForwardRefExoticComponent<\n React.ComponentProps<typeof Button> & React.RefAttributes<HTMLButtonElement>\n> = React.forwardRef<HTMLButtonElement, React.ComponentProps<typeof Button>>(\n ({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-right-12 top-1/2 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n }\n)\nCarouselNext.displayName = \"CarouselNext\"\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger\n\nconst CollapsibleContent = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.CollapsibleContent>,\n React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.CollapsibleContent>\n>(({ className, children, ...props }, ref) => (\n <CollapsiblePrimitive.CollapsibleContent\n ref={ref}\n className={cn(\n \"overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\",\n className\n )}\n {...props}\n >\n {children}\n </CollapsiblePrimitive.CollapsibleContent>\n))\nCollapsibleContent.displayName = CollapsiblePrimitive.CollapsibleContent.displayName\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","import React from 'react';\n\nexport interface ContainerProps {\n /**\n * Content to wrap\n */\n children: React.ReactNode;\n\n /**\n * Maximum width variant\n * @default 'standard'\n */\n variant?: 'standard' | 'wide' | 'narrow';\n\n /**\n * Add horizontal padding\n * @default true\n */\n padding?: boolean;\n\n /**\n * Additional className for customization\n */\n className?: string;\n\n /**\n * HTML element to render as\n * @default 'div'\n */\n as?: 'div' | 'section' | 'article' | 'main' | 'aside' | 'header' | 'footer';\n}\n\n/**\n * Container Component\n *\n * Manages consistent max-widths and horizontal padding across the design system.\n * This component ensures perfect alignment between header, content, and footer\n * without manually coordinating max-width classes.\n *\n * **Swiss Grid Integration:**\n * - Uses standard max-widths that align with the 8px base unit\n * - Coordinates with PageTemplate variant system\n * - Provides consistent horizontal padding\n *\n * **Why This Component Exists:**\n * Before Container, every component had hardcoded max-widths:\n * - Header: max-w-[1440px]\n * - SecondaryNav: max-w-7xl\n * - Content: max-w-4xl\n *\n * This caused misalignment. Container solves this by centralizing width management.\n *\n * Usage:\n * ```tsx\n * // Standard width (1280px)\n * <Container>Content</Container>\n *\n * // Wide width (1440px) - for dashboards, data-heavy pages\n * <Container variant=\"wide\">Dashboard</Container>\n *\n * // Narrow width (896px) - for reading-focused content\n * <Container variant=\"narrow\">Article</Container>\n *\n * // Without padding (when you need edge-to-edge content)\n * <Container padding={false}>Full bleed content</Container>\n *\n * // As different HTML element\n * <Container as=\"main\">Main content</Container>\n * ```\n */\nexport const Container = React.forwardRef<HTMLElement, ContainerProps>(\n (\n {\n children,\n variant = 'standard',\n padding = true,\n className = '',\n as: Component = 'div',\n },\n ref\n ) => {\n const maxWidthClasses = {\n standard: 'max-w-7xl', // 1280px - default for most content\n wide: 'max-w-[1440px]', // 1440px - for data-heavy layouts\n narrow: 'max-w-4xl', // 896px - for reading comfort\n };\n\n const paddingClasses = padding ? 'px-4 sm:px-6 lg:px-8' : '';\n\n return React.createElement(\n Component,\n {\n ref,\n className: `${maxWidthClasses[variant]} mx-auto ${paddingClasses} ${className}`,\n },\n children\n );\n }\n);\n\nContainer.displayName = 'Container';\n","'use client';\nimport React from 'react';\nimport { SlidersHorizontal, Sun, Moon, SunMoon, Building2, Leaf, Zap, X, Palette } from 'lucide-react';\nimport { useCustomizer } from '../../lib/store/customizer';\nimport { useThemeStore } from '../../lib/store/theme';\nimport { ColorPicker } from '../forms/ColorPicker';\nimport { Button } from '../actions/Button';\n\nexport interface CustomizerPanelProps {\n /**\n * Mode of the customizer:\n * - \"full\": Shows all controls (theme, mode, motion)\n * - \"lightweight\": Shows only light/dark mode toggle\n * @default \"full\"\n */\n mode?: 'full' | 'lightweight';\n /**\n * Whether to show the Motion Intensity slider\n * @default false\n */\n showMotionIntensity?: boolean;\n}\n\nexport const CustomizerPanel = ({ mode = 'full', showMotionIntensity = false }: CustomizerPanelProps) => {\n const [mounted, setMounted] = React.useState(false);\n const [isOpen, setIsOpen] = React.useState(false);\n const panelRef = React.useRef<HTMLDivElement>(null);\n const {\n motion,\n setMotion,\n customizationMode,\n setCustomizationMode,\n applyColorPalette,\n getActiveColorPalette,\n resetCustomColors\n } = useCustomizer();\n const { theme, mode: colorMode, setTheme, setMode } = useThemeStore();\n\n // Get current custom colors\n const currentPalette = getActiveColorPalette(theme, colorMode);\n const [tempPrimaryColor, setTempPrimaryColor] = React.useState(currentPalette?.primary || '#0a0a0a');\n const [tempSecondaryColor, setTempSecondaryColor] = React.useState(currentPalette?.secondary || '#5a67d8');\n const [tempAccentColor, setTempAccentColor] = React.useState(currentPalette?.accent || '#ff6b35');\n\n // Update temp color when palette changes\n React.useEffect(() => {\n if (currentPalette) {\n setTempPrimaryColor(currentPalette.primary);\n setTempSecondaryColor(currentPalette.secondary || currentPalette.primary);\n setTempAccentColor(currentPalette.accent || '#ff6b35');\n }\n }, [currentPalette]);\n\n const handleApplyColor = () => {\n // Apply all colors atomically, clearing secondary/accent in simple mode\n applyColorPalette(theme, colorMode, {\n primary: tempPrimaryColor,\n secondary: customizationMode === 'advanced' ? tempSecondaryColor : undefined,\n accent: customizationMode === 'advanced' ? tempAccentColor : undefined,\n });\n };\n\n const handleResetColors = () => {\n resetCustomColors(theme, colorMode);\n setTempPrimaryColor('#0a0a0a');\n setTempSecondaryColor('#5a67d8');\n setTempAccentColor('#ff6b35');\n };\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n // Handle click outside to close panel\n React.useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n // Add small delay to prevent immediate closing when opening\n const timeoutId = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n }, 100);\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n if (!mounted) return null;\n\n if (!isOpen) {\n return (\n <button\n onClick={() => setIsOpen(true)}\n className=\"fixed bottom-4 right-4 bg-background text-foreground px-4 py-2 rounded-full shadow-lg border border-[var(--color-glass-border)] font-medium hover:opacity-80 transition-all z-50 flex items-center gap-2\"\n style={{ backdropFilter: 'var(--effect-blur-sm)' }}\n >\n {mode === 'lightweight' ? <SunMoon className=\"w-5 h-5\" /> : <SlidersHorizontal className=\"w-5 h-5\" />}\n {mode === 'lightweight' ? 'Theme' : 'Customizer'}\n </button>\n );\n }\n\n return (\n <div\n ref={panelRef}\n className={`\n fixed bottom-4 right-4 z-50\n bg-background p-6 rounded-2xl shadow-2xl border border-[var(--color-glass-border)]\n text-foreground\n left-4 sm:left-auto\n w-auto sm:w-80\n max-h-[calc(100vh-2rem)]\n overflow-y-auto\n `}\n style={{\n boxShadow: 'var(--effect-shadow-xl)',\n backdropFilter: 'var(--effect-blur-md)',\n backgroundColor: 'var(--color-glass)'\n }}\n >\n <div className=\"flex justify-between items-center mb-6\">\n <h3 className=\"font-bold text-lg\">{mode === 'lightweight' ? 'Theme Settings' : 'Experience Customizer'}</h3>\n <button\n onClick={() => setIsOpen(false)}\n className=\"text-foreground opacity-60 hover:opacity-100 transition-opacity p-1\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n\n <div className=\"space-y-6\">\n {/* Motion Intensity Slider - Full mode only + showMotionIntensity enabled */}\n {mode === 'full' && showMotionIntensity && (\n <div>\n <div className=\"flex justify-between mb-2\">\n <label className=\"text-sm font-medium opacity-80\">Motion Intensity</label>\n <span className=\"text-sm opacity-60\">{motion}</span>\n </div>\n <input\n type=\"range\"\n min=\"0\"\n max=\"10\"\n value={motion}\n onChange={(e) => setMotion(Number(e.target.value))}\n className=\"w-full h-2 bg-[var(--color-surface)] rounded-lg appearance-none cursor-pointer accent-primary\"\n />\n </div>\n )}\n\n {/* Theme Selector - Full mode only */}\n {mode === 'full' && (\n <div>\n <label className=\"block text-sm font-medium opacity-80 mb-3\">Theme</label>\n <div className=\"grid grid-cols-3 gap-2 mb-3\">\n {[\n { id: 'studio', label: 'Studio', icon: <Building2 className=\"w-4 h-4\" /> },\n { id: 'sage', label: 'Sage', icon: <Leaf className=\"w-4 h-4\" /> },\n { id: 'volt', label: 'Volt', icon: <Zap className=\"w-4 h-4\" /> },\n ].map((t) => (\n <button\n key={t.id}\n onClick={() => setTheme(t.id as any)}\n className={`\n px-3 py-2.5 rounded-lg text-sm font-medium transition-all flex flex-col items-center gap-1 border\n ${theme === t.id\n ? 'shadow-md'\n : 'bg-background-secondary text-foreground opacity-60 hover:opacity-100 border-[var(--color-glass-border)]'\n }\n `}\n style={theme === t.id ? {\n backgroundColor: 'var(--color-primary)',\n color: 'var(--color-primary-foreground)',\n borderColor: 'var(--color-primary)'\n } : {}}\n >\n <span className=\"text-base\">{t.icon}</span>\n <span>{t.label}</span>\n </button>\n ))}\n </div>\n {/* Typography Preview */}\n <div className=\"text-xs opacity-60 space-y-1\">\n <div>\n <span className=\"font-heading\">Heading:</span> {\n theme === 'studio' ? 'Outfit' :\n theme === 'sage' ? 'Lora' :\n 'Space Grotesk'\n }\n </div>\n <div>\n <span className=\"font-body\">Body:</span> {\n theme === 'studio' ? 'Manrope' :\n theme === 'sage' ? 'Instrument Sans' :\n 'Space Grotesk'\n }\n </div>\n </div>\n </div>\n )}\n\n {/* Mode Selector - Always visible */}\n <div>\n <label className=\"block text-sm font-medium opacity-80 mb-3\">Mode</label>\n <div className=\"grid grid-cols-2 gap-2\">\n {[\n { id: 'light', label: 'Light', icon: <Sun className=\"w-4 h-4\" /> },\n { id: 'dark', label: 'Dark', icon: <Moon className=\"w-4 h-4\" /> },\n ].map((m) => (\n <button\n key={m.id}\n onClick={() => setMode(m.id as any)}\n className={`\n px-3 py-2.5 rounded-lg text-sm font-medium transition-all flex items-center justify-center gap-2 border\n ${colorMode === m.id\n ? 'shadow-md'\n : 'bg-background-secondary text-foreground opacity-60 hover:opacity-100 border-[var(--color-glass-border)]'\n }\n `}\n style={colorMode === m.id ? {\n backgroundColor: 'var(--color-primary)',\n color: 'var(--color-primary-foreground)',\n borderColor: 'var(--color-primary)'\n } : {}}\n >\n <span>{m.icon}</span>\n <span>{m.label}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Color Customizer - Full mode only */}\n {mode === 'full' && (\n <div className=\"pt-4 border-t border-[var(--color-border)]\">\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-2\">\n <Palette className=\"w-4 h-4 opacity-80\" />\n <label className=\"text-sm font-medium opacity-80\">Color Customization</label>\n </div>\n {/* Mode Toggle */}\n <div className=\"flex gap-1 bg-[var(--color-surface)] rounded-md p-0.5\">\n <button\n onClick={() => setCustomizationMode('simple')}\n className={`\n px-2 py-1 text-xs rounded transition-all\n ${customizationMode === 'simple'\n ? 'bg-[var(--color-primary)] text-[var(--color-primary-foreground)]'\n : 'opacity-60 hover:opacity-100'\n }\n `}\n >\n Simple\n </button>\n <button\n onClick={() => setCustomizationMode('advanced')}\n className={`\n px-2 py-1 text-xs rounded transition-all\n ${customizationMode === 'advanced'\n ? 'bg-[var(--color-primary)] text-[var(--color-primary-foreground)]'\n : 'opacity-60 hover:opacity-100'\n }\n `}\n >\n Advanced\n </button>\n </div>\n </div>\n\n <div className=\"space-y-4\">\n {/* Primary Color */}\n <div>\n <label className=\"text-xs font-medium opacity-70 mb-2 block\">Primary Color</label>\n <ColorPicker\n value={tempPrimaryColor}\n onChange={setTempPrimaryColor}\n />\n </div>\n\n {/* Secondary Color - Advanced mode only */}\n {customizationMode === 'advanced' && (\n <div>\n <label className=\"text-xs font-medium opacity-70 mb-2 block\">Secondary Color</label>\n <ColorPicker\n value={tempSecondaryColor}\n onChange={setTempSecondaryColor}\n />\n </div>\n )}\n\n {/* Accent Color - Advanced mode only */}\n {customizationMode === 'advanced' && (\n <div>\n <label className=\"text-xs font-medium opacity-70 mb-2 block\">Accent Color</label>\n <ColorPicker\n value={tempAccentColor}\n onChange={setTempAccentColor}\n />\n </div>\n )}\n </div>\n\n {/* Action Buttons */}\n <div className=\"flex gap-2 mt-4\">\n <Button\n onClick={handleApplyColor}\n size=\"sm\"\n className=\"flex-1\"\n disabled={currentPalette?.primary === tempPrimaryColor &&\n (customizationMode === 'simple' ||\n (currentPalette?.secondary === tempSecondaryColor &&\n currentPalette?.accent === tempAccentColor))}\n >\n Apply Colors\n </Button>\n {currentPalette && (\n <Button\n onClick={handleResetColors}\n variant=\"outline\"\n size=\"sm\"\n >\n Reset\n </Button>\n )}\n </div>\n\n {/* Status Indicator */}\n {currentPalette && (\n <p className=\"text-xs opacity-60 mt-2\">\n Custom colors active for {theme} {colorMode} mode\n </p>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n","\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { Calendar as CalendarIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../actions/Button\"\nimport { Calendar } from \"../data-display/Calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../overlays/Popover\"\n\nexport interface DatePickerProps {\n date?: Date\n onDateChange?: (date: Date | undefined) => void\n placeholder?: string\n className?: string\n disabled?: boolean\n}\n\nexport function DatePicker({\n date,\n onDateChange,\n placeholder = \"Pick a date\",\n className,\n disabled = false,\n}: DatePickerProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !date && \"text-muted-foreground\",\n className\n )}\n disabled={disabled}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {date ? format(date, \"PPP\") : <span>{placeholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <Calendar\n mode=\"single\"\n selected={date}\n onSelect={onDateChange}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )\n}\n","'use client';\n\nimport React from 'react';\nimport { GitHubIcon } from '../../data-display/GitHubIcon';\n\nexport interface FooterLink {\n label: string;\n href: string;\n external?: boolean;\n}\n\nexport interface FooterSection {\n title: string;\n links: FooterLink[];\n}\n\nexport interface FooterProps {\n /**\n * Brand/logo element or text\n */\n logo?: React.ReactNode;\n /**\n * Sections with links organized in columns\n */\n sections?: FooterSection[];\n /**\n * Social links (will be displayed with icons)\n */\n socialLinks?: {\n github?: string;\n linkedin?: string;\n email?: string;\n };\n /**\n * Copyright text\n */\n copyright?: string;\n /**\n * Additional className for customization\n */\n className?: string;\n}\n\n/**\n * Footer Organism\n *\n * Inspired by Swiss Grid design principles:\n * - 8px base unit spacing system\n * - Clear typographic hierarchy with structured columns\n * - Generous whitespace for breathing room\n * - Grid-based layout with precise alignment\n * - Minimal, functional aesthetic\n *\n * Features:\n * - Responsive multi-column layout\n * - Social links with icons\n * - Organized content sections\n * - Clean typography and spacing\n */\nexport const Footer = React.forwardRef<HTMLElement, FooterProps>(\n (\n {\n logo,\n sections = [],\n socialLinks,\n copyright,\n className = '',\n },\n ref\n ) => {\n const currentYear = new Date().getFullYear();\n\n return (\n <footer\n ref={ref}\n className={`\n border-t border-[var(--color-border)]\n bg-[var(--color-background)]\n ${className}\n `}\n >\n {/* Main Footer Content - Swiss Grid: 8px base units */}\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 sm:py-20 lg:py-24\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-12 lg:gap-8\">\n {/* Brand Section - Swiss Grid: Takes 4 columns on large screens */}\n <div className=\"lg:col-span-4\">\n {logo && (\n <div className=\"mb-6 text-2xl font-bold text-[var(--color-text-primary)]\">\n {logo}\n </div>\n )}\n </div>\n\n {/* Navigation Sections - Swiss Grid: Evenly distributed columns */}\n {sections.map((section, index) => (\n <div key={section.title} className=\"lg:col-span-2\">\n <h3 className=\"text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4\">\n {section.title}\n </h3>\n <ul className=\"space-y-3\">\n {section.links.map((link) => (\n <li key={link.label}>\n <a\n href={link.href}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n className=\"text-[var(--color-text-secondary)] hover:text-[var(--color-primary)] transition-colors duration-200 text-sm\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n\n {/* Social Links - Swiss Grid: Takes remaining columns */}\n {socialLinks && (\n <div className=\"lg:col-span-2\">\n <h3 className=\"text-sm font-semibold text-[var(--color-text-primary)] uppercase tracking-wider mb-4\">\n Connect\n </h3>\n <ul className=\"space-y-3\">\n {socialLinks.github && (\n <li>\n <a\n href={socialLinks.github}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-[var(--color-text-secondary)] hover:text-[var(--color-primary)] transition-colors duration-200 text-sm flex items-center gap-2\"\n >\n <GitHubIcon size={16} />\n GitHub\n </a>\n </li>\n )}\n {socialLinks.linkedin && (\n <li>\n <a\n href={socialLinks.linkedin}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-[var(--color-text-secondary)] hover:text-[var(--color-primary)] transition-colors duration-200 text-sm\"\n >\n LinkedIn\n </a>\n </li>\n )}\n {socialLinks.email && (\n <li>\n <a\n href={`mailto:${socialLinks.email}`}\n className=\"text-[var(--color-text-secondary)] hover:text-[var(--color-primary)] transition-colors duration-200 text-sm\"\n >\n Email\n </a>\n </li>\n )}\n </ul>\n </div>\n )}\n </div>\n </div>\n\n {/* Bottom Bar - Swiss Grid: 8px base unit spacing */}\n <div className=\"border-t border-[var(--color-border)]\">\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6\">\n <p className=\"text-sm text-[var(--color-text-secondary)] text-center\">\n {copyright || `© ${currentYear} All rights reserved.`}\n </p>\n </div>\n </div>\n </footer>\n );\n }\n);\n\nFooter.displayName = 'Footer';\n","import React from 'react';\n\ntype ResponsiveValue<T> = T | { base?: T; sm?: T; md?: T; lg?: T; xl?: T };\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /**\n * Number of columns. Supports responsive object.\n * @example columns={3} or columns={{ base: 1, md: 3 }}\n */\n columns?: ResponsiveValue<number>;\n /**\n * Gap between items. Supports responsive object.\n * Maps to Tailwind gap scale.\n */\n gap?: ResponsiveValue<number>;\n /**\n * HTML element to render as\n */\n as?: any;\n}\n\nconst mapResponsive = (prop: ResponsiveValue<number>, prefix: string, mapFunc: (v: number) => string) => {\n if (typeof prop === 'number') {\n return mapFunc(prop);\n }\n const classes = [];\n if (prop.base) classes.push(mapFunc(prop.base));\n if (prop.sm) classes.push(`sm:${mapFunc(prop.sm)}`);\n if (prop.md) classes.push(`md:${mapFunc(prop.md)}`);\n if (prop.lg) classes.push(`lg:${mapFunc(prop.lg)}`);\n if (prop.xl) classes.push(`xl:${mapFunc(prop.xl)}`);\n return classes.join(' ');\n};\n\nexport const Grid = React.forwardRef<HTMLDivElement, GridProps>(\n ({ children, columns = 1, gap = 4, as: Component = 'div', className = '', ...props }, ref) => {\n\n // Safe mapping for Tailwind scanner\n const getColClass = (n: number) => {\n const map: Record<number, string> = {\n 1: 'grid-cols-1', 2: 'grid-cols-2', 3: 'grid-cols-3', 4: 'grid-cols-4',\n 5: 'grid-cols-5', 6: 'grid-cols-6', 7: 'grid-cols-7', 8: 'grid-cols-8',\n 9: 'grid-cols-9', 10: 'grid-cols-10', 11: 'grid-cols-11', 12: 'grid-cols-12'\n };\n return map[n] || 'grid-cols-1';\n };\n\n const getGapClass = (n: number) => `gap-${n}`;\n\n const colClasses = mapResponsive(columns, 'grid-cols', getColClass);\n const gapClasses = mapResponsive(gap, 'gap', getGapClass);\n\n return (\n <Component\n ref={ref}\n className={`grid ${colClasses} ${gapClasses} ${className}`}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nGrid.displayName = 'Grid';\n\nexport interface GridItemProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n colSpan?: ResponsiveValue<number>;\n rowSpan?: ResponsiveValue<number>;\n colStart?: ResponsiveValue<number>;\n as?: any;\n}\n\nexport const GridItem = React.forwardRef<HTMLDivElement, GridItemProps>(\n ({ children, colSpan, rowSpan, colStart, as: Component = 'div', className = '', ...props }, ref) => {\n\n const getSpanClass = (n: number) => {\n const map: Record<number, string> = {\n 1: 'col-span-1', 2: 'col-span-2', 3: 'col-span-3', 4: 'col-span-4',\n 5: 'col-span-5', 6: 'col-span-6', 7: 'col-span-7', 8: 'col-span-8',\n 9: 'col-span-9', 10: 'col-span-10', 11: 'col-span-11', 12: 'col-span-12'\n };\n return map[n] || '';\n };\n\n const getRowSpanClass = (n: number) => {\n const map: Record<number, string> = {\n 1: 'row-span-1', 2: 'row-span-2', 3: 'row-span-3', 4: 'row-span-4',\n 5: 'row-span-5', 6: 'row-span-6'\n };\n return map[n] || '';\n };\n\n const getColStartClass = (n: number) => `col-start-${n}`;\n\n const classes = [\n colSpan ? mapResponsive(colSpan, 'col-span', getSpanClass) : '',\n rowSpan ? mapResponsive(rowSpan, 'row-span', getRowSpanClass) : '',\n colStart ? mapResponsive(colStart, 'col-start', getColStartClass) : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <Component ref={ref} className={classes} {...props}>\n {children}\n </Component>\n );\n }\n);\n\nGridItem.displayName = 'GridItem';\n","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { useMotionPreference } from '../../../hooks/useMotionPreference';\nimport { NavLink } from '../../navigation/NavLink';\nimport { Menu, X, ChevronDown } from 'lucide-react';\n\nexport interface HeaderNavLink {\n label: string;\n href?: string;\n /**\n * Whether this link represents the current/active page\n * @default false\n */\n active?: boolean;\n /**\n * Nested links for dropdown menus\n */\n children?: Array<{\n label: string;\n href: string;\n active?: boolean;\n }>;\n}\n\nexport interface HeaderProps {\n /**\n * Brand/logo element or text\n */\n logo?: React.ReactNode;\n /**\n * Array of navigation links\n */\n navLinks?: HeaderNavLink[];\n /**\n * Content for the right side (e.g., Sign In, CTA buttons)\n */\n actions?: React.ReactNode;\n /**\n * Whether to apply glass morphism effect on scroll\n * @default true\n */\n glassOnScroll?: boolean;\n /**\n * Scroll threshold in pixels before applying glass effect\n * @default 10\n */\n scrollThreshold?: number;\n /**\n * Whether the header is sticky (fixed position)\n * @default true\n */\n sticky?: boolean;\n /**\n * Font size for desktop navigation links\n * @default 'text-sm' (14px)\n */\n navLinkSize?: 'text-xs' | 'text-sm' | 'text-base' | 'text-lg';\n /**\n * Font family for navigation links\n * Uses CSS variable --font-header-nav by default\n * Logo font is controlled by the logo ReactNode itself or --font-header-logo\n * @default 'var(--font-header-nav)'\n */\n fontFamily?: string;\n /**\n * Maximum width for header content\n * @default 'max-w-7xl' (1280px)\n */\n maxWidth?: 'max-w-7xl' | 'max-w-[1440px]' | 'max-w-4xl';\n /**\n * Alignment of the navigation links\n * @default 'center'\n */\n navAlignment?: 'center' | 'left' | 'right';\n /**\n * Additional className for customization\n */\n className?: string;\n}\n\nexport const Header = React.forwardRef<HTMLElement, HeaderProps>(\n (\n {\n logo,\n navLinks = [],\n actions,\n glassOnScroll = true,\n scrollThreshold = 10,\n sticky = true,\n navLinkSize = 'text-sm',\n navAlignment = 'center',\n fontFamily = 'var(--font-header-nav)',\n maxWidth = 'max-w-7xl',\n className = '',\n },\n ref\n ) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [hasScrolled, setHasScrolled] = useState(false);\n const [openDropdown, setOpenDropdown] = useState<string | null>(null);\n const [expandedMobileSection, setExpandedMobileSection] = useState<string | null>(null);\n const { shouldAnimate, scale } = useMotionPreference();\n\n // Calculate motion factors\n const motionFactor = shouldAnimate && scale > 0 ? (5 / scale) : 0;\n const transitionDuration = `${300 * motionFactor}ms`;\n\n // Handle scroll detection\n useEffect(() => {\n if (!glassOnScroll) return;\n\n const handleScroll = () => {\n setHasScrolled(window.scrollY > scrollThreshold);\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [glassOnScroll, scrollThreshold]);\n\n // Lock body scroll when mobile menu is open\n useEffect(() => {\n if (isMenuOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [isMenuOpen]);\n\n const baseStyles = 'top-0 left-0 right-0 z-50';\n const positionStyles = sticky ? 'fixed' : 'relative';\n const transitionStyles = shouldAnimate ? 'transition-all' : '';\n\n // Liquid Glass Effect\n // Unscrolled: Transparent & Borderless (looks printed on background), but with blur for \"liquid\" feel over Orb\n // Scrolled: Wetter glass, more opaque, shadow for depth, no harsh borders\n const backgroundStyles = hasScrolled && glassOnScroll\n ? 'backdrop-blur-3xl bg-[var(--color-surface)]/60 border-b border-transparent shadow-sm supports-[backdrop-filter]:bg-[var(--color-surface)]/50'\n : 'bg-transparent border-b border-transparent backdrop-blur-xl';\n\n // Nav Alignment Classes\n const getNavClasses = () => {\n switch (navAlignment) {\n case 'left':\n return 'ml-8 mr-auto';\n case 'right':\n return 'ml-auto mr-8';\n case 'center':\n default:\n return 'absolute left-1/2 -translate-x-1/2';\n }\n };\n\n return (\n <>\n <header\n ref={ref}\n className={`${baseStyles} ${positionStyles} ${transitionStyles} ${backgroundStyles} ${className}`}\n style={{ transitionDuration }}\n >\n <div className={`${maxWidth} mx-auto px-4 sm:px-6 lg:px-8`}>\n <div className=\"flex items-center justify-between h-16 lg:h-20 relative\">\n {/* Logo */}\n {logo && (\n <div className=\"flex-shrink-0 z-10\">\n {logo}\n </div>\n )}\n\n {/* Desktop Navigation */}\n {navLinks.length > 0 && (\n <nav\n className={`hidden lg:flex items-center gap-8 ${getNavClasses()}`}\n aria-label=\"Main navigation\"\n >\n {navLinks.map((link) => {\n const hasDropdown = link.children && link.children.length > 0;\n const isOpen = openDropdown === link.label;\n\n if (hasDropdown) {\n return (\n <div\n key={link.label}\n className=\"relative group\"\n onMouseEnter={() => setOpenDropdown(link.label)}\n onMouseLeave={() => setOpenDropdown(null)}\n >\n <button\n className={`\n ${navLinkSize}\n relative\n pb-1\n flex items-center gap-1\n focus-visible:outline\n focus-visible:outline-2\n focus-visible:outline-offset-4\n focus-visible:outline-[var(--color-focus)]\n rounded-sm\n ${shouldAnimate ? 'transition-colors' : ''}\n ${link.active\n ? 'text-[var(--color-text-primary)] font-medium after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-[var(--color-primary)] after:rounded-full'\n : 'text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)]'\n }\n `}\n style={{ fontFamily, transitionDuration }}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n >\n {link.label}\n <ChevronDown className={`w-3 h-3 ${shouldAnimate ? 'transition-transform' : ''} ${isOpen ? 'rotate-180' : ''}`} style={{ transitionDuration }} />\n </button>\n {/* Invisible bridge to prevent dropdown from closing */}\n {isOpen && <div className=\"absolute top-full left-1/2 -translate-x-1/2 w-[200px] h-2\" />}\n {isOpen && (\n <div className={`\n absolute top-full left-1/2 -translate-x-1/2 mt-2 min-w-[200px] z-50\n bg-[var(--color-surface)] border border-[var(--color-border)]\n rounded-lg shadow-xl py-1 p-1\n backdrop-blur-3xl bg-[var(--color-surface)]/95\n ${shouldAnimate ? 'animate-fade-in' : ''}\n `} style={{ animationDuration: `${0.2 * motionFactor}s` }}>\n {link.children?.map((child) => (\n <NavLink\n key={child.label}\n href={child.href}\n active={child.active}\n variant=\"pill\"\n className=\"w-full\"\n >\n {child.label}\n </NavLink>\n ))}\n </div>\n )}\n </div>\n );\n }\n\n return (\n <NavLink\n key={link.label}\n href={link.href}\n active={link.active}\n variant=\"minimal\"\n className={navLinkSize}\n style={{ fontFamily }}\n >\n {link.label}\n </NavLink>\n );\n })}\n </nav>\n )}\n\n {/* Desktop Actions */}\n {actions && (\n <div className=\"hidden lg:flex items-center gap-4 z-10\">\n {actions}\n </div>\n )}\n\n {/* Mobile Menu Button */}\n <button\n onClick={() => setIsMenuOpen(!isMenuOpen)}\n className={`\n lg:hidden\n p-2\n text-[var(--color-text-primary)]\n hover:bg-[var(--color-surface)]\n rounded-lg\n focus-visible:outline\n focus-visible:outline-2\n focus-visible:outline-offset-2\n focus-visible:outline-[var(--color-focus)]\n ${shouldAnimate ? 'transition-colors' : ''}\n `}\n style={{ transitionDuration }}\n aria-label={isMenuOpen ? 'Close menu' : 'Open menu'}\n aria-expanded={isMenuOpen}\n >\n {isMenuOpen ? (\n <X className=\"w-6 h-6\" />\n ) : (\n <Menu className=\"w-6 h-6\" />\n )}\n </button>\n </div>\n </div>\n </header>\n\n {/* Mobile Full-Screen Menu */}\n <div\n className={`\n fixed inset-0 z-[100] lg:hidden\n ${shouldAnimate ? 'transition-all' : ''}\n ${isMenuOpen\n ? 'opacity-100 pointer-events-auto'\n : 'opacity-0 pointer-events-none'\n }\n `}\n style={{ transitionDuration }}\n aria-hidden={!isMenuOpen}\n >\n <div className=\"absolute inset-0 bg-[var(--color-background)]\">\n <div className=\"flex flex-col items-center justify-center h-full gap-8 px-4\">\n {/* Mobile Navigation Links */}\n {navLinks.map((link, index) => {\n const hasDropdown = link.children && link.children.length > 0;\n const isExpanded = expandedMobileSection === link.label;\n\n if (hasDropdown) {\n return (\n <div key={link.label} className=\"w-full max-w-xs\">\n <button\n onClick={() => setExpandedMobileSection(isExpanded ? null : link.label)}\n className={`\n text-3xl w-full text-center\n focus-visible:outline\n focus-visible:outline-2\n focus-visible:outline-offset-4\n focus-visible:outline-[var(--color-focus)]\n rounded-sm\n ${shouldAnimate ? 'transition-all' : ''}\n ${link.active\n ? 'text-[var(--color-primary)] font-semibold'\n : 'text-[var(--color-text-primary)] hover:text-[var(--color-text-secondary)]'\n }\n `}\n style={\n shouldAnimate && isMenuOpen\n ? {\n animation: `fadeInUp ${0.5 * motionFactor}s ease-out ${index * 0.1 * motionFactor}s forwards`,\n opacity: 0,\n fontFamily,\n transitionDuration\n }\n : { opacity: 1, fontFamily }\n }\n aria-expanded={isExpanded}\n >\n {link.label}\n </button>\n {isExpanded && (\n <div className=\"flex flex-col gap-3 mt-4\">\n {link.children?.map((child) => (\n <a\n key={child.label}\n href={child.href}\n onClick={() => setIsMenuOpen(false)}\n className={`\n text-xl text-center block\n focus-visible:outline\n focus-visible:outline-2\n focus-visible:outline-offset-4\n focus-visible:outline-[var(--color-focus)]\n rounded-sm\n ${shouldAnimate ? 'transition-colors' : ''}\n ${child.active\n ? 'text-[var(--color-primary)] font-medium'\n : 'text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)]'\n }\n `}\n style={{ transitionDuration }}\n aria-current={child.active ? 'page' : undefined}\n >\n {child.label}\n </a>\n ))}\n </div>\n )}\n </div>\n );\n }\n\n return (\n <a\n key={link.label}\n href={link.href}\n onClick={() => setIsMenuOpen(false)}\n aria-current={link.active ? 'page' : undefined}\n className={`\n text-3xl\n focus-visible:outline\n focus-visible:outline-2\n focus-visible:outline-offset-4\n focus-visible:outline-[var(--color-focus)]\n rounded-sm\n ${shouldAnimate ? 'transition-all' : ''}\n ${link.active\n ? 'text-[var(--color-primary)] font-semibold'\n : 'text-[var(--color-text-primary)] hover:text-[var(--color-text-secondary)]'\n }\n `}\n style={\n shouldAnimate && isMenuOpen\n ? {\n animation: `fadeInUp ${0.5 * motionFactor}s ease-out ${index * 0.1 * motionFactor}s forwards`,\n opacity: 0,\n fontFamily,\n transitionDuration\n }\n : { opacity: 1, fontFamily }\n }\n >\n {link.label}\n </a>\n );\n })}\n\n {/* Mobile Actions */}\n {actions && (\n <div\n className=\"flex flex-col gap-4 mt-8 w-full max-w-xs\"\n style={\n shouldAnimate && isMenuOpen\n ? {\n animation: `fadeInUp ${0.5 * motionFactor}s ease-out ${navLinks.length * 0.1 * motionFactor}s forwards`,\n opacity: 0,\n }\n : { opacity: 1 }\n }\n >\n {actions}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Animation keyframes - only added if motion is enabled */}\n {shouldAnimate && (\n <style>{`\n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `}</style>\n )}\n </>\n );\n }\n);\n\nHeader.displayName = 'Header';\n","import React from 'react';\n\nexport interface PageLayoutProps {\n /** Optional header configuration */\n header?: React.ReactNode;\n\n /** Whether the header is sticky (adds top padding to first content element) */\n stickyHeader?: boolean;\n\n /** Optional breadcrumbs */\n breadcrumbs?: React.ReactNode;\n\n /** Breadcrumbs position: 'top' (sticky below header) or 'below-title' (static below title+subtitle) */\n breadcrumbsPosition?: 'top' | 'below-title';\n\n /** Optional page title - rendered in content-width container */\n title?: React.ReactNode;\n\n /** Optional page subtitle - rendered below title */\n subtitle?: React.ReactNode;\n\n /** Apply Swiss Grid Design spacing to title/subtitle area */\n swissGridSpacing?: boolean;\n\n /** Maximum width for title/subtitle area - should match content width for alignment */\n contentMaxWidth?: 'max-w-7xl' | 'max-w-[1440px]' | 'max-w-4xl';\n\n /** Optional secondary navigation (first stack) */\n secondaryNav?: React.ReactNode;\n\n /** Optional tertiary navigation (second stack) */\n tertiaryNav?: React.ReactNode;\n\n /** Optional footer */\n footer?: React.ReactNode;\n\n /** Main content */\n children: React.ReactNode;\n\n /** Optional className for main content */\n className?: string;\n}\n\n/**\n * PageLayout Component\n *\n * A flexible layout organism that composes Header, Breadcrumbs, SecondaryNav,\n * TertiaryNav, and Footer with automatic z-index and sticky positioning management.\n *\n * Features:\n * - Automatic z-index stacking (50 → 45 → 40 → 30)\n * - Dynamic sticky positioning calculations\n * - Optional title/subtitle slots with Swiss Grid spacing\n * - Flexible breadcrumb positioning (sticky top or static below title)\n * - Optional composition (all props optional)\n * - Handles full-height layouts\n * - Theme-aware styling\n *\n * Z-Index Stack:\n * - Header: z-50, h-16 lg:h-20\n * - Breadcrumbs (if position='top'): z-45, sticky below header\n * - SecondaryNav: z-40, first navigation stack\n * - TertiaryNav: z-30, second navigation stack\n *\n * Swiss Grid Design:\n * - Title/subtitle area uses structured spacing (48-96px sections)\n * - Typography hierarchy: text-4xl/5xl title, text-lg subtitle\n * - Content-width container (max-w-7xl) for proper alignment\n *\n * Example:\n * ```tsx\n * <PageLayout\n * header={<Header logo={logo} navLinks={links} />}\n * title={<h1>Page Title</h1>}\n * subtitle={<p>Page subtitle</p>}\n * breadcrumbs={<Breadcrumbs items={breadcrumbItems} />}\n * breadcrumbsPosition=\"below-title\"\n * swissGridSpacing\n * secondaryNav={<SecondaryNav items={sections} />}\n * >\n * <article>Your content here</article>\n * </PageLayout>\n * ```\n */\nexport function PageLayout({\n header,\n stickyHeader = false,\n breadcrumbs,\n breadcrumbsPosition = 'top',\n title,\n subtitle,\n swissGridSpacing = false,\n contentMaxWidth = 'max-w-7xl',\n secondaryNav,\n tertiaryNav,\n footer,\n children,\n className = '',\n}: PageLayoutProps) {\n // Determine if breadcrumbs should be at the top (sticky) or below title (static)\n const showBreadcrumbsAtTop = breadcrumbsPosition === 'top';\n const showBreadcrumbsBelowTitle = breadcrumbsPosition === 'below-title';\n\n // Sticky header spacing - add top padding to first content element\n const stickyHeaderSpacing = stickyHeader ? 'pt-16 lg:pt-20' : '';\n\n // Swiss Grid spacing classes\n // When breadcrumbs are below title, reduce bottom padding on title area to avoid excessive space\n const titleAreaTopSpacing = swissGridSpacing ? 'pt-12 lg:pt-16' : 'pt-8';\n const titleAreaBottomSpacing = swissGridSpacing && showBreadcrumbsBelowTitle ? 'pb-3' : swissGridSpacing ? 'pb-12 lg:pb-16' : 'pb-8';\n const titleBottomMargin = swissGridSpacing ? 'mb-4' : 'mb-3';\n const breadcrumbsAreaSpacing = swissGridSpacing ? 'pt-4 pb-8' : 'pt-3 pb-6';\n\n return (\n <div className=\"min-h-screen flex flex-col w-full min-w-0\">\n {/* Header - z-50, h-16 lg:h-20 */}\n {header}\n\n {/* Breadcrumbs - z-45, sticky below header (only if position='top') */}\n {breadcrumbs && showBreadcrumbsAtTop && (\n <div\n className={`\n sticky bg-[var(--color-background)]/95 backdrop-blur-sm\n border-b border-[var(--color-border)]\n transition-all duration-300\n top-16 lg:top-20\n ${stickyHeaderSpacing}\n `}\n style={{ zIndex: 45 }}\n >\n <div className={`${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-3`}>\n {breadcrumbs}\n </div>\n </div>\n )}\n\n {/* Title/Subtitle Area - Swiss Grid Design */}\n {(title || subtitle) && (\n <div className={`${titleAreaTopSpacing} ${titleAreaBottomSpacing} ${!showBreadcrumbsAtTop ? stickyHeaderSpacing : ''} bg-[var(--color-background)]`}>\n <div className={`${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`}>\n {/* Title */}\n {title && (\n <div className={titleBottomMargin}>\n {title}\n </div>\n )}\n\n {/* Subtitle */}\n {subtitle && <div>{subtitle}</div>}\n </div>\n </div>\n )}\n\n {/* Breadcrumbs below title+subtitle (only if position='below-title') */}\n {breadcrumbs && showBreadcrumbsBelowTitle && (\n <div className={`${breadcrumbsAreaSpacing} bg-[var(--color-background)]`}>\n <div className={`${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8`}>\n {breadcrumbs}\n </div>\n </div>\n )}\n\n {/* Secondary Nav - z-40, first navigation stack */}\n {secondaryNav}\n\n {/* Tertiary Nav - z-30, second navigation stack */}\n {tertiaryNav}\n\n {/* Main Content - flexible, fills remaining space */}\n <main className={`flex-1 ${className}`}>\n <div className={`${contentMaxWidth} mx-auto px-4 sm:px-6 lg:px-8 py-12`}>\n {children}\n </div>\n </main>\n\n {/* Footer */}\n {footer}\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { Header, type HeaderNavLink } from './Header/Header';\nimport { Breadcrumbs, type BreadcrumbItemLegacy } from '../navigation/Breadcrumbs';\nimport { SecondaryNav, type SecondaryNavItem } from '../navigation/SecondaryNav';\nimport { PageLayout } from './PageLayout';\nimport { CustomizerPanel } from './CustomizerPanel';\nimport { Heading } from '../data-display/Heading';\nimport { Text } from '../data-display/Text';\n\nexport interface PageTemplateHeaderConfig {\n /** Logo or brand element */\n logo: React.ReactNode;\n /** Navigation links with optional dropdowns */\n navLinks?: HeaderNavLink[];\n /** Actions (e.g., Sign In button, CTA) */\n actions?: React.ReactNode;\n /** Whether header should be sticky (default: true) */\n sticky?: boolean;\n}\n\nexport interface PageTemplateSecondaryNavConfig {\n /** Secondary navigation items */\n items: SecondaryNavItem[];\n /** Currently active item ID */\n activeId: string;\n /** Callback when item changes */\n onItemChange: (id: string) => void;\n}\n\nexport interface PageTemplateProps {\n /** Header configuration */\n header: PageTemplateHeaderConfig;\n\n /** Page title (required) */\n title: string;\n\n /** Optional page subtitle */\n subtitle?: string;\n\n /** Breadcrumb navigation items */\n breadcrumbs: BreadcrumbItemLegacy[];\n\n /** Optional secondary navigation */\n secondaryNav?: PageTemplateSecondaryNavConfig;\n\n /** Main page content */\n children: React.ReactNode;\n\n /** Optional footer */\n footer?: React.ReactNode;\n\n /** Show customizer panel (default: true) */\n showCustomizer?: boolean;\n\n /** Content width variant */\n variant?: 'standard' | 'wide' | 'narrow';\n}\n\n/**\n * PageTemplate Component\n *\n * An opinionated page layout template based on Swiss Grid Design principles.\n * This template provides a structured, clean layout with sensible defaults for\n * standard pages (blogs, docs, app pages).\n *\n * Swiss Grid Design Principles:\n * - Structured spacing: 48-96px between major sections\n * - Clear typography hierarchy: 36-48px title, 18px subtitle\n * - Grid-based alignment with consistent content widths\n * - Generous whitespace for breathing room\n * - Minimal, functional aesthetic\n *\n * Features:\n * - Sticky header with glass morphism effect\n * - Breadcrumbs positioned below page title (static)\n * - Always-sticky secondary navigation\n * - Optional customizer panel\n * - Three width variants: standard (1280px), wide (1440px), narrow (896px)\n * - Automatic Swiss Grid spacing\n *\n * Example:\n * ```tsx\n * <PageTemplate\n * header={{\n * logo: <Link href=\"/\">Brand</Link>,\n * navLinks: navigationItems,\n * sticky: true\n * }}\n * title=\"Welcome to Our Platform\"\n * subtitle=\"Build amazing experiences with our tools\"\n * breadcrumbs={[\n * { label: 'Home', href: '/' },\n * { label: 'Platform' }\n * ]}\n * >\n * <article>Your content here</article>\n * </PageTemplate>\n * ```\n */\nexport function PageTemplate({\n header,\n title,\n subtitle,\n breadcrumbs,\n secondaryNav,\n children,\n footer,\n showCustomizer = true,\n variant = 'standard',\n}: PageTemplateProps) {\n // Determine content width based on variant\n const maxWidthClass = {\n standard: 'max-w-7xl', // 1280px - default, matches most pages\n wide: 'max-w-[1440px]', // 1440px - for dashboard-like pages\n narrow: 'max-w-4xl', // 896px - for reading-focused pages\n }[variant] as 'max-w-7xl' | 'max-w-[1440px]' | 'max-w-4xl';\n\n return (\n <>\n <PageLayout\n header={\n <Header\n logo={header.logo}\n navLinks={header.navLinks}\n actions={header.actions}\n sticky={header.sticky ?? true}\n maxWidth={maxWidthClass}\n />\n }\n stickyHeader={header.sticky ?? true}\n breadcrumbsPosition=\"below-title\"\n breadcrumbs={<Breadcrumbs items={breadcrumbs} variant=\"subtle\" />}\n title={<Heading level={1}>{title}</Heading>}\n subtitle={subtitle ? <Text size=\"lg\" variant=\"secondary\">{subtitle}</Text> : undefined}\n secondaryNav={\n secondaryNav ? (\n <SecondaryNav\n items={secondaryNav.items}\n activeId={secondaryNav.activeId}\n onItemChange={secondaryNav.onItemChange}\n maxWidth={maxWidthClass}\n />\n ) : undefined\n }\n footer={footer}\n swissGridSpacing\n contentMaxWidth={maxWidthClass}\n >\n {children}\n </PageLayout>\n\n {/* Customizer - Swiss Grid: sticky overlay, bottom right */}\n {showCustomizer && <CustomizerPanel />}\n </>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { GripVertical } from \"lucide-react\"\nimport { Group as PanelGroup, Panel, Separator as PanelResizeHandle } from \"react-resizable-panels\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst ResizablePanelGroup = ({\n className,\n ...props\n}: React.ComponentProps<typeof PanelGroup>) => {\n return (\n <PanelGroup\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst ResizablePanel = Panel\n\nconst ResizableHandle = ({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof PanelResizeHandle> & { withHandle?: boolean }) => {\n return (\n <PanelResizeHandle\n className={cn(\n \"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border\">\n <GripVertical className=\"h-2.5 w-2.5\" />\n </div>\n )}\n </PanelResizeHandle>\n )\n}\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Scrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.Scrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.Scrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\nimport { Slot } from \"@radix-ui/react-slot\"\n\nconst Sidebar = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { isOpen?: boolean }\n>(({ className, children, isOpen = true, ...props }, ref) => (\n <aside\n ref={ref}\n className={cn(\n \"fixed top-0 left-0 h-full w-[280px] bg-background border-r border-border z-40 transition-transform duration-300 transform\",\n isOpen ? \"translate-x-0\" : \"-translate-x-full lg:translate-x-0\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-col h-full\">{children}</div>\n </aside>\n))\nSidebar.displayName = \"Sidebar\"\n\nconst SidebarOverlay = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { isOpen?: boolean; onDismiss?: () => void }\n>(({ className, isOpen, onDismiss, ...props }, ref) => {\n if (!isOpen) return null\n\n return (\n <div\n ref={ref}\n className={cn(\n \"fixed inset-0 bg-black/50 z-40 lg:hidden\",\n className\n )}\n onClick={onDismiss}\n {...props}\n />\n )\n})\nSidebarOverlay.displayName = \"SidebarOverlay\"\n\nconst SidebarHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center justify-between px-4 py-4 border-b border-border\", className)}\n {...props}\n />\n))\nSidebarHeader.displayName = \"SidebarHeader\"\n\nconst SidebarContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex-1 min-h-0 overflow-y-auto py-4 px-3\", className)}\n {...props}\n />\n))\nSidebarContent.displayName = \"SidebarContent\"\n\nconst SidebarFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-4 py-4 space-y-3\", className)}\n {...props}\n />\n))\nSidebarFooter.displayName = \"SidebarFooter\"\n\ninterface SidebarItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isActive?: boolean\n icon?: React.ReactNode\n showIcon?: boolean\n depth?: number\n hasChildren?: boolean\n isExpanded?: boolean\n asChild?: boolean\n}\n\nconst SidebarItem = React.forwardRef<HTMLButtonElement, SidebarItemProps>(\n ({\n className,\n isActive,\n icon,\n showIcon = true,\n depth = 0,\n hasChildren,\n isExpanded,\n children,\n asChild = false,\n ...props\n }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n className={cn(\n \"w-full flex items-center gap-2 px-3 py-2 text-sm transition-colors rounded-md sage-interactive\",\n isActive\n ? \"bg-primary text-primary-foreground font-medium\"\n : \"text-muted-foreground hover:text-foreground\",\n depth === 0 && !isActive ? \"font-medium text-foreground\" : \"\",\n className\n )}\n style={{ paddingLeft: `${12 + depth * 16}px` }}\n {...props}\n >\n {hasChildren && (\n <svg\n className={cn(\n \"w-4 h-4 flex-shrink-0 transition-transform\",\n isExpanded ? \"rotate-90\" : \"\"\n )}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n )}\n {!hasChildren && depth > 0 && <span className=\"w-4 flex-shrink-0\" />}\n {showIcon && icon && <span className=\"flex-shrink-0\">{icon}</span>}\n <span className=\"flex-1 text-left truncate\">{children}</span>\n </Comp>\n )\n }\n)\nSidebarItem.displayName = \"SidebarItem\"\n\nexport {\n Sidebar,\n SidebarOverlay,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarItem,\n}\n","import React from 'react';\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Content to arrange\n */\n children: React.ReactNode;\n /**\n * Direction of flow\n * @default 'column'\n */\n direction?: 'row' | 'column' | 'row-reverse' | 'column-reverse';\n /**\n * Spacing between items (scale: 0-12, or px values)\n * Maps to Tailwind gap utility (e.g. 4 -> gap-4)\n * @default 4\n */\n gap?: number;\n /**\n * Alignment on the cross axis (align-items)\n */\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\n /**\n * Distribution on the main axis (justify-content)\n */\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';\n /**\n * Whether to allow wrapping (for row layouts)\n */\n wrap?: boolean;\n /**\n * HTML element to render as\n * @default 'div'\n */\n as?: any;\n}\n\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\n ({\n children,\n direction = 'column',\n gap = 4,\n align = 'stretch',\n justify = 'start',\n wrap = false,\n as: Component = 'div',\n className = '',\n ...props\n }, ref) => {\n\n const styles = {\n direction: {\n row: 'flex-row',\n column: 'flex-col',\n 'row-reverse': 'flex-row-reverse',\n 'column-reverse': 'flex-col-reverse',\n },\n align: {\n start: 'items-start',\n end: 'items-end',\n center: 'items-center',\n baseline: 'items-baseline',\n stretch: 'items-stretch',\n },\n justify: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n }\n };\n\n return (\n <Component\n ref={ref}\n className={`flex ${styles.direction[direction]} ${styles.align[align]} ${styles.justify[justify]} ${wrap ? 'flex-wrap' : 'flex-nowrap'\n } gap-${gap} ${className}`}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nStack.displayName = 'Stack';\n","'use client';\n\nimport { Renderer, Program, Mesh, Color, Triangle } from 'ogl';\nimport { useEffect, useRef } from 'react';\n\nconst vertexShader = `\nattribute vec2 uv;\nattribute vec2 position;\n\nvarying vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = vec4(position, 0, 1);\n}\n`;\n\nconst fragmentShader = `\nprecision highp float;\n\nuniform float uTime;\nuniform vec3 uResolution;\nuniform vec2 uFocal;\nuniform vec2 uRotation;\nuniform float uStarSpeed;\nuniform float uDensity;\nuniform float uHueShift;\nuniform float uSpeed;\nuniform vec2 uMouse;\nuniform float uGlowIntensity;\nuniform float uSaturation;\nuniform bool uMouseRepulsion;\nuniform float uTwinkleIntensity;\nuniform float uRotationSpeed;\nuniform float uRepulsionStrength;\nuniform float uMouseActiveFactor;\nuniform float uAutoCenterRepulsion;\nuniform bool uTransparent;\n\nvarying vec2 vUv;\n\n#define NUM_LAYER 4.0\n#define STAR_COLOR_CUTOFF 0.2\n#define MAT45 mat2(0.7071, -0.7071, 0.7071, 0.7071)\n#define PERIOD 3.0\n\nfloat Hash21(vec2 p) {\n p = fract(p * vec2(123.34, 456.21));\n p += dot(p, p + 45.32);\n return fract(p.x * p.y);\n}\n\nfloat tri(float x) {\n return abs(fract(x) * 2.0 - 1.0);\n}\n\nfloat tris(float x) {\n float t = fract(x);\n return 1.0 - smoothstep(0.0, 1.0, abs(2.0 * t - 1.0));\n}\n\nfloat trisn(float x) {\n float t = fract(x);\n return 2.0 * (1.0 - smoothstep(0.0, 1.0, abs(2.0 * t - 1.0))) - 1.0;\n}\n\nvec3 hsv2rgb(vec3 c) {\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\nfloat Star(vec2 uv, float flare) {\n float d = length(uv);\n float m = (0.05 * uGlowIntensity) / d;\n float rays = smoothstep(0.0, 1.0, 1.0 - abs(uv.x * uv.y * 1000.0));\n m += rays * flare * uGlowIntensity;\n uv *= MAT45;\n rays = smoothstep(0.0, 1.0, 1.0 - abs(uv.x * uv.y * 1000.0));\n m += rays * 0.3 * flare * uGlowIntensity;\n m *= smoothstep(1.0, 0.2, d);\n return m;\n}\n\nvec3 StarLayer(vec2 uv) {\n vec3 col = vec3(0.0);\n\n vec2 gv = fract(uv) - 0.5; \n vec2 id = floor(uv);\n\n for (int y = -1; y <= 1; y++) {\n for (int x = -1; x <= 1; x++) {\n vec2 offset = vec2(float(x), float(y));\n vec2 si = id + vec2(float(x), float(y));\n float seed = Hash21(si);\n float size = fract(seed * 345.32);\n float glossLocal = tri(uStarSpeed / (PERIOD * seed + 1.0));\n float flareSize = smoothstep(0.9, 1.0, size) * glossLocal;\n\n float red = smoothstep(STAR_COLOR_CUTOFF, 1.0, Hash21(si + 1.0)) + STAR_COLOR_CUTOFF;\n float blu = smoothstep(STAR_COLOR_CUTOFF, 1.0, Hash21(si + 3.0)) + STAR_COLOR_CUTOFF;\n float grn = min(red, blu) * seed;\n vec3 base = vec3(red, grn, blu);\n \n float hue = atan(base.g - base.r, base.b - base.r) / (2.0 * 3.14159) + 0.5;\n hue = fract(hue + uHueShift / 360.0);\n float sat = length(base - vec3(dot(base, vec3(0.299, 0.587, 0.114)))) * uSaturation;\n float val = max(max(base.r, base.g), base.b);\n base = hsv2rgb(vec3(hue, sat, val));\n\n vec2 pad = vec2(tris(seed * 34.0 + uTime * uSpeed / 10.0), tris(seed * 38.0 + uTime * uSpeed / 30.0)) - 0.5;\n\n float star = Star(gv - offset - pad, flareSize);\n vec3 color = base;\n\n float twinkle = trisn(uTime * uSpeed + seed * 6.2831) * 0.5 + 1.0;\n twinkle = mix(1.0, twinkle, uTwinkleIntensity);\n star *= twinkle;\n \n col += star * size * color;\n }\n }\n\n return col;\n}\n\nvoid main() {\n vec2 focalPx = uFocal * uResolution.xy;\n vec2 uv = (vUv * uResolution.xy - focalPx) / uResolution.y;\n\n vec2 mouseNorm = uMouse - vec2(0.5);\n \n if (uAutoCenterRepulsion > 0.0) {\n vec2 centerUV = vec2(0.0, 0.0);\n float centerDist = length(uv - centerUV);\n vec2 repulsion = normalize(uv - centerUV) * (uAutoCenterRepulsion / (centerDist + 0.1));\n uv += repulsion * 0.05;\n } else if (uMouseRepulsion) {\n vec2 mousePosUV = (uMouse * uResolution.xy - focalPx) / uResolution.y;\n float mouseDist = length(uv - mousePosUV);\n vec2 repulsion = normalize(uv - mousePosUV) * (uRepulsionStrength / (mouseDist + 0.1));\n uv += repulsion * 0.05 * uMouseActiveFactor;\n } else {\n vec2 mouseOffset = mouseNorm * 0.1 * uMouseActiveFactor;\n uv += mouseOffset;\n }\n\n float autoRotAngle = uTime * uRotationSpeed;\n mat2 autoRot = mat2(cos(autoRotAngle), -sin(autoRotAngle), sin(autoRotAngle), cos(autoRotAngle));\n uv = autoRot * uv;\n\n uv = mat2(uRotation.x, -uRotation.y, uRotation.y, uRotation.x) * uv;\n\n vec3 col = vec3(0.0);\n\n for (float i = 0.0; i < 1.0; i += 1.0 / NUM_LAYER) {\n float depth = fract(i + uStarSpeed * uSpeed);\n float scale = mix(20.0 * uDensity, 0.5 * uDensity, depth);\n float fade = depth * smoothstep(1.0, 0.9, depth);\n col += StarLayer(uv * scale + i * 453.32) * fade;\n }\n\n if (uTransparent) {\n float alpha = length(col);\n alpha = smoothstep(0.0, 0.3, alpha);\n alpha = min(alpha, 1.0);\n gl_FragColor = vec4(col, alpha);\n } else {\n gl_FragColor = vec4(col, 1.0);\n }\n}\n`;\n\ninterface WarpBackgroundProps {\n focal?: [number, number];\n rotation?: [number, number];\n starSpeed?: number;\n density?: number;\n hueShift?: number;\n disableAnimation?: boolean;\n speed?: number;\n mouseInteraction?: boolean;\n glowIntensity?: number;\n saturation?: number;\n mouseRepulsion?: boolean;\n repulsionStrength?: number;\n twinkleIntensity?: number;\n rotationSpeed?: number;\n autoCenterRepulsion?: number;\n transparent?: boolean;\n className?: string;\n [key: string]: any;\n}\n\nexport function WarpBackground({\n focal = [0.5, 0.5],\n rotation = [1.0, 0.0],\n starSpeed = 0.5,\n density = 1,\n hueShift = 140,\n disableAnimation = false,\n speed = 1.0,\n mouseInteraction = true,\n glowIntensity = 0.3,\n saturation = 0.0,\n mouseRepulsion = true,\n repulsionStrength = 2,\n twinkleIntensity = 0.3,\n rotationSpeed = 0.1,\n autoCenterRepulsion = 0,\n transparent = true,\n className = '',\n ...rest\n}: WarpBackgroundProps) {\n const ctnDom = useRef<HTMLDivElement>(null);\n const targetMousePos = useRef({ x: 0.5, y: 0.5 });\n const smoothMousePos = useRef({ x: 0.5, y: 0.5 });\n const targetMouseActive = useRef(0.0);\n const smoothMouseActive = useRef(0.0);\n\n useEffect(() => {\n if (!ctnDom.current) return;\n const ctn = ctnDom.current;\n const renderer = new Renderer({\n alpha: transparent,\n premultipliedAlpha: false\n });\n const gl = renderer.gl;\n\n if (transparent) {\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n gl.clearColor(0, 0, 0, 0);\n } else {\n gl.clearColor(0, 0, 0, 1);\n }\n\n let program: Program;\n\n function resize() {\n const scale = 1;\n renderer.setSize(ctn.offsetWidth * scale, ctn.offsetHeight * scale);\n if (program) {\n program.uniforms.uResolution.value = new Color(\n gl.canvas.width,\n gl.canvas.height,\n gl.canvas.width / gl.canvas.height\n );\n }\n }\n window.addEventListener('resize', resize, false);\n resize();\n\n const geometry = new Triangle(gl);\n program = new Program(gl, {\n vertex: vertexShader,\n fragment: fragmentShader,\n uniforms: {\n uTime: { value: 0 },\n uResolution: {\n value: new Color(gl.canvas.width, gl.canvas.height, gl.canvas.width / gl.canvas.height)\n },\n uFocal: { value: new Float32Array(focal) },\n uRotation: { value: new Float32Array(rotation) },\n uStarSpeed: { value: starSpeed },\n uDensity: { value: density },\n uHueShift: { value: hueShift },\n uSpeed: { value: speed },\n uMouse: {\n value: new Float32Array([smoothMousePos.current.x, smoothMousePos.current.y])\n },\n uGlowIntensity: { value: glowIntensity },\n uSaturation: { value: saturation },\n uMouseRepulsion: { value: mouseRepulsion },\n uTwinkleIntensity: { value: twinkleIntensity },\n uRotationSpeed: { value: rotationSpeed },\n uRepulsionStrength: { value: repulsionStrength },\n uMouseActiveFactor: { value: 0.0 },\n uAutoCenterRepulsion: { value: autoCenterRepulsion },\n uTransparent: { value: transparent }\n }\n });\n\n const mesh = new Mesh(gl, { geometry, program });\n let animateId: number;\n\n function update(t: number) {\n animateId = requestAnimationFrame(update);\n if (!disableAnimation) {\n program.uniforms.uTime.value = t * 0.001;\n program.uniforms.uStarSpeed.value = (t * 0.001 * starSpeed) / 10.0;\n }\n\n const lerpFactor = 0.05;\n smoothMousePos.current.x += (targetMousePos.current.x - smoothMousePos.current.x) * lerpFactor;\n smoothMousePos.current.y += (targetMousePos.current.y - smoothMousePos.current.y) * lerpFactor;\n\n smoothMouseActive.current += (targetMouseActive.current - smoothMouseActive.current) * lerpFactor;\n\n program.uniforms.uMouse.value[0] = smoothMousePos.current.x;\n program.uniforms.uMouse.value[1] = smoothMousePos.current.y;\n program.uniforms.uMouseActiveFactor.value = smoothMouseActive.current;\n\n renderer.render({ scene: mesh });\n }\n animateId = requestAnimationFrame(update);\n ctn.appendChild(gl.canvas);\n\n function handleMouseMove(e: MouseEvent) {\n const rect = ctn.getBoundingClientRect();\n const x = (e.clientX - rect.left) / rect.width;\n const y = 1.0 - (e.clientY - rect.top) / rect.height;\n targetMousePos.current = { x, y };\n targetMouseActive.current = 1.0;\n }\n\n function handleMouseLeave() {\n targetMouseActive.current = 0.0;\n }\n\n if (mouseInteraction) {\n ctn.addEventListener('mousemove', handleMouseMove);\n ctn.addEventListener('mouseleave', handleMouseLeave);\n }\n\n return () => {\n cancelAnimationFrame(animateId);\n window.removeEventListener('resize', resize);\n if (mouseInteraction) {\n ctn.removeEventListener('mousemove', handleMouseMove);\n ctn.removeEventListener('mouseleave', handleMouseLeave);\n }\n if (ctn.contains(gl.canvas)) {\n ctn.removeChild(gl.canvas);\n }\n gl.getExtension('WEBGL_lose_context')?.loseContext();\n };\n }, [\n focal,\n rotation,\n starSpeed,\n density,\n hueShift,\n disableAnimation,\n speed,\n mouseInteraction,\n glowIntensity,\n saturation,\n mouseRepulsion,\n twinkleIntensity,\n rotationSpeed,\n repulsionStrength,\n autoCenterRepulsion,\n transparent\n ]);\n\n return <div ref={ctnDom} className={`w-full h-full relative ${className}`} {...rest} />;\n}\n","'use client';\n\nimport { Renderer, Program, Mesh, Color, Triangle } from 'ogl';\nimport { useEffect, useRef, useMemo, useCallback } from 'react';\n\nconst vertexShader = `\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUv;\nvoid main() {\n vUv = uv;\n gl_Position = vec4(position, 0.0, 1.0);\n}\n`;\n\nconst fragmentShader = `\nprecision mediump float;\n\nvarying vec2 vUv;\n\nuniform float iTime;\nuniform vec3 iResolution;\nuniform float uScale;\n\nuniform vec2 uGridMul;\nuniform float uDigitSize;\nuniform float uScanlineIntensity;\nuniform float uGlitchAmount;\nuniform float uFlickerAmount;\nuniform float uNoiseAmp;\nuniform float uChromaticAberration;\nuniform float uDither;\nuniform float uCurvature;\nuniform vec3 uTint;\nuniform vec2 uMouse;\nuniform float uMouseStrength;\nuniform float uUseMouse;\nuniform float uPageLoadProgress;\nuniform float uUsePageLoadAnimation;\nuniform float uBrightness;\n\nfloat time;\n\nfloat hash21(vec2 p){\n p = fract(p * 234.56);\n p += dot(p, p + 34.56);\n return fract(p.x * p.y);\n}\n\nfloat noise(vec2 p)\n{\n return sin(p.x * 10.0) * sin(p.y * (3.0 + sin(time * 0.090909))) + 0.2; \n}\n\nmat2 rotate(float angle)\n{\n float c = cos(angle);\n float s = sin(angle);\n return mat2(c, -s, s, c);\n}\n\nfloat fbm(vec2 p)\n{\n p *= 1.1;\n float f = 0.0;\n float amp = 0.5 * uNoiseAmp;\n \n mat2 modify0 = rotate(time * 0.02);\n f += amp * noise(p);\n p = modify0 * p * 2.0;\n amp *= 0.454545;\n \n mat2 modify1 = rotate(time * 0.02);\n f += amp * noise(p);\n p = modify1 * p * 2.0;\n amp *= 0.454545;\n \n mat2 modify2 = rotate(time * 0.08);\n f += amp * noise(p);\n \n return f;\n}\n\nfloat pattern(vec2 p, out vec2 q, out vec2 r) {\n vec2 offset1 = vec2(1.0);\n vec2 offset0 = vec2(0.0);\n mat2 rot01 = rotate(0.1 * time);\n mat2 rot1 = rotate(0.1);\n \n q = vec2(fbm(p + offset1), fbm(rot01 * p + offset1));\n r = vec2(fbm(rot1 * q + offset0), fbm(q + offset0));\n return fbm(p + r);\n}\n\nfloat digit(vec2 p){\n vec2 grid = uGridMul * 15.0;\n vec2 s = floor(p * grid) / grid;\n p = p * grid;\n vec2 q, r;\n float intensity = pattern(s * 0.1, q, r) * 1.3 - 0.03;\n \n if(uUseMouse > 0.5){\n vec2 mouseWorld = uMouse * uScale;\n float distToMouse = distance(s, mouseWorld);\n float mouseInfluence = exp(-distToMouse * 8.0) * uMouseStrength * 10.0;\n intensity += mouseInfluence;\n \n float ripple = sin(distToMouse * 20.0 - iTime * 5.0) * 0.1 * mouseInfluence;\n intensity += ripple;\n }\n \n if(uUsePageLoadAnimation > 0.5){\n float cellRandom = fract(sin(dot(s, vec2(12.9898, 78.233))) * 43758.5453);\n float cellDelay = cellRandom * 0.8;\n float cellProgress = clamp((uPageLoadProgress - cellDelay) / 0.2, 0.0, 1.0);\n \n float fadeAlpha = smoothstep(0.0, 1.0, cellProgress);\n intensity *= fadeAlpha;\n }\n \n p = fract(p);\n p *= uDigitSize;\n \n float px5 = p.x * 5.0;\n float py5 = (1.0 - p.y) * 5.0;\n float x = fract(px5);\n float y = fract(py5);\n \n float i = floor(py5) - 2.0;\n float j = floor(px5) - 2.0;\n float n = i * i + j * j;\n float f = n * 0.0625;\n \n float isOn = step(0.1, intensity - f);\n float brightness = isOn * (0.2 + y * 0.8) * (0.75 + x * 0.25);\n \n return step(0.0, p.x) * step(p.x, 1.0) * step(0.0, p.y) * step(p.y, 1.0) * brightness;\n}\n\nfloat onOff(float a, float b, float c)\n{\n return step(c, sin(iTime + a * cos(iTime * b))) * uFlickerAmount;\n}\n\nfloat displace(vec2 look)\n{\n float y = look.y - mod(iTime * 0.25, 1.0);\n float window = 1.0 / (1.0 + 50.0 * y * y);\n return sin(look.y * 20.0 + iTime) * 0.0125 * onOff(4.0, 2.0, 0.8) * (1.0 + cos(iTime * 60.0)) * window;\n}\n\nvec3 getColor(vec2 p){\n \n float bar = step(mod(p.y + time * 20.0, 1.0), 0.2) * 0.4 + 1.0;\n bar *= uScanlineIntensity;\n \n float displacement = displace(p);\n p.x += displacement;\n\n if (uGlitchAmount != 1.0) {\n float extra = displacement * (uGlitchAmount - 1.0);\n p.x += extra;\n }\n\n float middle = digit(p);\n \n const float off = 0.002;\n float sum = digit(p + vec2(-off, -off)) + digit(p + vec2(0.0, -off)) + digit(p + vec2(off, -off)) +\n digit(p + vec2(-off, 0.0)) + digit(p + vec2(0.0, 0.0)) + digit(p + vec2(off, 0.0)) +\n digit(p + vec2(-off, off)) + digit(p + vec2(0.0, off)) + digit(p + vec2(off, off));\n \n vec3 baseColor = vec3(0.9) * middle + sum * 0.1 * vec3(1.0) * bar;\n return baseColor;\n}\n\nvec2 barrel(vec2 uv){\n vec2 c = uv * 2.0 - 1.0;\n float r2 = dot(c, c);\n c *= 1.0 + uCurvature * r2;\n return c * 0.5 + 0.5;\n}\n\nvoid main() {\n time = iTime * 0.333333;\n vec2 uv = vUv;\n\n if(uCurvature != 0.0){\n uv = barrel(uv);\n }\n \n vec2 p = uv * uScale;\n vec3 col = getColor(p);\n\n if(uChromaticAberration != 0.0){\n vec2 ca = vec2(uChromaticAberration) / iResolution.xy;\n col.r = getColor(p + ca).r;\n col.b = getColor(p - ca).b;\n }\n\n col *= uTint;\n col *= uBrightness;\n\n if(uDither > 0.0){\n float rnd = hash21(gl_FragCoord.xy);\n col += (rnd - 0.5) * (uDither * 0.003922);\n }\n\n gl_FragColor = vec4(col, 1.0);\n}\n`;\n\nfunction hexToRgb(hex: string) {\n let h = hex.replace('#', '').trim();\n if (h.length === 3)\n h = h\n .split('')\n .map(c => c + c)\n .join('');\n const num = parseInt(h, 16);\n return [((num >> 16) & 255) / 255, ((num >> 8) & 255) / 255, (num & 255) / 255];\n}\n\ninterface FaultyTerminalProps {\n scale?: number;\n gridMul?: [number, number];\n digitSize?: number;\n timeScale?: number;\n pause?: boolean;\n scanlineIntensity?: number;\n glitchAmount?: number;\n flickerAmount?: number;\n noiseAmp?: number;\n chromaticAberration?: number;\n dither?: number | boolean;\n curvature?: number;\n tint?: string;\n mouseReact?: boolean;\n mouseStrength?: number;\n dpr?: number;\n pageLoadAnimation?: boolean;\n brightness?: number;\n className?: string;\n style?: React.CSSProperties;\n [key: string]: any;\n}\n\nexport function FaultyTerminal({\n scale = 1,\n gridMul = [2, 1],\n digitSize = 1.5,\n timeScale = 0.3,\n pause = false,\n scanlineIntensity = 0.3,\n glitchAmount = 1,\n flickerAmount = 1,\n noiseAmp = 0,\n chromaticAberration = 0,\n dither = 0,\n curvature = 0.2,\n tint = '#ffffff',\n mouseReact = true,\n mouseStrength = 0.2,\n dpr = 1, // Defaulting loosely, avoid window access in default param if SSR\n pageLoadAnimation = true,\n brightness = 1,\n className = '',\n style,\n ...rest\n}: FaultyTerminalProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const programRef = useRef<Program>(null);\n const rendererRef = useRef<Renderer>(null);\n const mouseRef = useRef({ x: 0.5, y: 0.5 });\n const smoothMouseRef = useRef({ x: 0.5, y: 0.5 });\n const frozenTimeRef = useRef(0);\n const rafRef = useRef(0);\n const loadAnimationStartRef = useRef(0);\n const timeOffsetRef = useRef(Math.random() * 100);\n\n const tintVec = useMemo(() => hexToRgb(tint), [tint]);\n\n const ditherValue = useMemo(() => (typeof dither === 'boolean' ? (dither ? 1 : 0) : dither), [dither]);\n\n const handleMouseMove = useCallback((e: MouseEvent) => {\n const ctn = containerRef.current;\n if (!ctn) return;\n const rect = ctn.getBoundingClientRect();\n const x = (e.clientX - rect.left) / rect.width;\n const y = 1 - (e.clientY - rect.top) / rect.height;\n mouseRef.current = { x, y };\n }, []);\n\n useEffect(() => {\n const ctn = containerRef.current;\n if (!ctn) return;\n\n const renderer = new Renderer({ dpr });\n rendererRef.current = renderer;\n const gl = renderer.gl;\n gl.clearColor(0, 0, 0, 1);\n\n const geometry = new Triangle(gl);\n\n const program = new Program(gl, {\n vertex: vertexShader,\n fragment: fragmentShader,\n uniforms: {\n iTime: { value: 0 },\n iResolution: {\n value: new Color(gl.canvas.width, gl.canvas.height, gl.canvas.width / gl.canvas.height)\n },\n uScale: { value: scale },\n\n uGridMul: { value: new Float32Array(gridMul) },\n uDigitSize: { value: digitSize },\n uScanlineIntensity: { value: scanlineIntensity },\n uGlitchAmount: { value: glitchAmount },\n uFlickerAmount: { value: flickerAmount },\n uNoiseAmp: { value: noiseAmp },\n uChromaticAberration: { value: chromaticAberration },\n uDither: { value: ditherValue },\n uCurvature: { value: curvature },\n uTint: { value: new Color(tintVec[0], tintVec[1], tintVec[2]) },\n uMouse: {\n value: new Float32Array([smoothMouseRef.current.x, smoothMouseRef.current.y])\n },\n uMouseStrength: { value: mouseStrength },\n uUseMouse: { value: mouseReact ? 1 : 0 },\n uPageLoadProgress: { value: pageLoadAnimation ? 0 : 1 },\n uUsePageLoadAnimation: { value: 1 },\n uBrightness: { value: brightness }\n }\n });\n // @ts-ignore\n programRef.current = program;\n\n const mesh = new Mesh(gl, { geometry, program });\n\n function resize() {\n if (!ctn || !renderer) return;\n renderer.setSize(ctn.offsetWidth, ctn.offsetHeight);\n program.uniforms.iResolution.value = new Color(\n gl.canvas.width,\n gl.canvas.height,\n gl.canvas.width / gl.canvas.height\n );\n }\n\n const resizeObserver = new ResizeObserver(() => resize());\n resizeObserver.observe(ctn);\n resize();\n\n const update = (t: number) => {\n rafRef.current = requestAnimationFrame(update);\n\n if (pageLoadAnimation) {\n if (loadAnimationStartRef.current === 0) {\n loadAnimationStartRef.current = t;\n }\n const animationDuration = 2000;\n const animationElapsed = t - loadAnimationStartRef.current;\n const progress = Math.min(animationElapsed / animationDuration, 1);\n program.uniforms.uPageLoadProgress.value = progress;\n } else {\n program.uniforms.uPageLoadProgress.value = 1.0;\n }\n\n if (!pause) {\n const elapsed = (t * 0.001 + timeOffsetRef.current) * timeScale;\n program.uniforms.iTime.value = elapsed;\n frozenTimeRef.current = elapsed;\n } else {\n program.uniforms.iTime.value = frozenTimeRef.current;\n }\n\n if (mouseReact) {\n const dampingFactor = 0.08;\n const smoothMouse = smoothMouseRef.current;\n const mouse = mouseRef.current;\n smoothMouse.x += (mouse.x - smoothMouse.x) * dampingFactor;\n smoothMouse.y += (mouse.y - smoothMouse.y) * dampingFactor;\n\n const mouseUniform = program.uniforms.uMouse.value;\n mouseUniform[0] = smoothMouse.x;\n mouseUniform[1] = smoothMouse.y;\n }\n\n renderer.render({ scene: mesh });\n };\n rafRef.current = requestAnimationFrame(update);\n ctn.appendChild(gl.canvas);\n\n // @ts-ignore\n if (mouseReact) ctn.addEventListener('mousemove', handleMouseMove);\n\n return () => {\n cancelAnimationFrame(rafRef.current);\n resizeObserver.disconnect();\n // @ts-ignore\n if (mouseReact) ctn.removeEventListener('mousemove', handleMouseMove);\n if (gl.canvas.parentElement === ctn) ctn.removeChild(gl.canvas);\n gl.getExtension('WEBGL_lose_context')?.loseContext();\n loadAnimationStartRef.current = 0;\n timeOffsetRef.current = Math.random() * 100;\n };\n }, [\n dpr,\n pause,\n timeScale,\n scale,\n gridMul,\n digitSize,\n scanlineIntensity,\n glitchAmount,\n flickerAmount,\n noiseAmp,\n chromaticAberration,\n ditherValue,\n curvature,\n tintVec,\n mouseReact,\n mouseStrength,\n pageLoadAnimation,\n brightness,\n handleMouseMove\n ]);\n\n return <div ref={containerRef} className={`w-full h-full relative overflow-hidden ${className}`} style={style} {...rest} />;\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { useId } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface AnimatedBeamProps {\n className?: string;\n containerRef: React.RefObject<HTMLElement | null>;\n fromRef?: React.RefObject<HTMLElement | null>;\n toRef?: React.RefObject<HTMLElement | null>;\n curvature?: number;\n reverse?: boolean;\n pathColor?: string;\n pathWidth?: number;\n pathOpacity?: number;\n gradientStartColor?: string;\n gradientStopColor?: string;\n delay?: number;\n duration?: number;\n startX?: number;\n startY?: number;\n endX?: number;\n endY?: number;\n}\n\nimport { useMotionPreference } from '../../hooks/useMotionPreference';\n\nexport const AnimatedBeam = ({\n className,\n containerRef,\n fromRef,\n toRef,\n curvature = 0,\n reverse = false,\n duration = Math.random() * 3 + 4,\n delay = 0,\n pathColor = \"gray\",\n pathWidth = 2,\n pathOpacity = 0.2,\n gradientStartColor = \"#ffaa40\",\n gradientStopColor = \"#9c40ff\",\n startX,\n startY,\n endX,\n endY,\n}: AnimatedBeamProps) => {\n const { shouldAnimate, scale } = useMotionPreference();\n const id = useId();\n const pathId = `beam-path-${id}`;\n const gradientId = `beam-gradient-${id}`;\n const maskId = `beam-mask-${id}`;\n\n // Calculate effective duration based on intensity\n const durationMultiplier = scale > 0 ? (5 / scale) : 1;\n const effectiveDuration = duration * durationMultiplier;\n\n // ... (refs logic omitted as in original)\n\n const x1 = startX || 0;\n const y1 = startY || 0;\n const x2 = endX || 0;\n const y2 = endY || 0;\n\n // Calculate Bezier control points\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n\n const controlY = y1;\n const controlX = x2;\n\n const path = `M ${x1},${y1} C ${x1 + curvature},${y1} ${x2 - curvature},${y2} ${x2},${y2}`;\n\n return (\n <svg\n fill=\"none\"\n width=\"100%\"\n height=\"100%\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"pointer-events-none absolute inset-0 transform-gpu overflow-visible\", className)}\n >\n <defs>\n <linearGradient id={gradientId} gradientUnits=\"userSpaceOnUse\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop stopColor={gradientStartColor} stopOpacity=\"0\" />\n <stop stopColor={gradientStartColor} />\n <stop offset=\"32.5%\" stopColor={gradientStopColor} />\n <stop offset=\"100%\" stopColor={gradientStopColor} stopOpacity=\"0\" />\n </linearGradient>\n\n <marker id={`arrow-${id}`} markerWidth=\"5\" markerHeight=\"5\" refX=\"2.5\" refY=\"2.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill={gradientStopColor} />\n </marker>\n </defs>\n\n {/* Base Path (faint line) */}\n <path\n d={path}\n stroke={pathColor}\n strokeWidth={pathWidth}\n strokeOpacity={pathOpacity}\n strokeLinecap=\"round\"\n />\n\n {/* Animated Path Mask */}\n {shouldAnimate && (\n <path\n d={path}\n stroke={`url(#${gradientId})`}\n strokeWidth={pathWidth}\n strokeLinecap=\"round\"\n fill=\"none\"\n >\n <animate\n attributeName=\"stroke-dasharray\"\n values={`0, 1000; 1000, 0`}\n dur={`${effectiveDuration}s`}\n repeatCount=\"indefinite\"\n />\n </path>\n )}\n\n {/* Framer Motion Particle */}\n {shouldAnimate && (\n <motion.circle\n r={pathWidth * 1.5}\n fill={gradientStartColor}\n initial={{ offsetDistance: \"0%\" }}\n animate={{ offsetDistance: \"100%\" }}\n transition={{\n duration: effectiveDuration,\n delay: delay,\n ease: \"easeInOut\",\n repeat: Infinity,\n repeatDelay: 0.5\n }}\n style={{ offsetPath: `path('${path}')` }}\n />\n )}\n\n {/* Secondary Particle for \"Tail\" effect */}\n {shouldAnimate && (\n <motion.circle\n r={pathWidth}\n fill={gradientStopColor}\n initial={{ offsetDistance: \"0%\", opacity: 0 }}\n animate={{ offsetDistance: \"100%\", opacity: [0, 1, 0] }}\n transition={{\n duration: effectiveDuration,\n delay: delay + 0.05,\n ease: \"easeInOut\",\n repeat: Infinity,\n repeatDelay: 0.5\n }}\n style={{ offsetPath: `path('${path}')` }}\n />\n )}\n </svg>\n );\n};\n","'use client';\n\nimport { Mesh, Program, Renderer, Triangle, Vec3 } from 'ogl';\nimport { useEffect, useRef } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface OrbBackgroundProps {\n className?: string;\n hue?: number;\n hoverIntensity?: number;\n rotateOnHover?: boolean;\n forceHoverState?: boolean;\n backgroundColor?: string;\n}\n\nexport function OrbBackground({\n className,\n hue = 0,\n hoverIntensity = 0.2,\n rotateOnHover = true,\n forceHoverState = false,\n backgroundColor = '#000000'\n}: OrbBackgroundProps) {\n const ctnDom = useRef<HTMLDivElement>(null);\n\n const vert = /* glsl */ `\n precision highp float;\n attribute vec2 position;\n attribute vec2 uv;\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = vec4(position, 0.0, 1.0);\n }\n `;\n\n const frag = /* glsl */ `\n precision highp float;\n\n uniform float iTime;\n uniform vec3 iResolution;\n uniform float hue;\n uniform float hover;\n uniform float rot;\n uniform float hoverIntensity;\n uniform vec3 backgroundColor;\n varying vec2 vUv;\n\n vec3 rgb2yiq(vec3 c) {\n float y = dot(c, vec3(0.299, 0.587, 0.114));\n float i = dot(c, vec3(0.596, -0.274, -0.322));\n float q = dot(c, vec3(0.211, -0.523, 0.312));\n return vec3(y, i, q);\n }\n \n vec3 yiq2rgb(vec3 c) {\n float r = c.x + 0.956 * c.y + 0.621 * c.z;\n float g = c.x - 0.272 * c.y - 0.647 * c.z;\n float b = c.x - 1.106 * c.y + 1.703 * c.z;\n return vec3(r, g, b);\n }\n \n vec3 adjustHue(vec3 color, float hueDeg) {\n float hueRad = hueDeg * 3.14159265 / 180.0;\n vec3 yiq = rgb2yiq(color);\n float cosA = cos(hueRad);\n float sinA = sin(hueRad);\n float i = yiq.y * cosA - yiq.z * sinA;\n float q = yiq.y * sinA + yiq.z * cosA;\n yiq.y = i;\n yiq.z = q;\n return yiq2rgb(yiq);\n }\n \n vec3 hash33(vec3 p3) {\n p3 = fract(p3 * vec3(0.1031, 0.11369, 0.13787));\n p3 += dot(p3, p3.yxz + 19.19);\n return -1.0 + 2.0 * fract(vec3(\n p3.x + p3.y,\n p3.x + p3.z,\n p3.y + p3.z\n ) * p3.zyx);\n }\n \n float snoise3(vec3 p) {\n const float K1 = 0.333333333;\n const float K2 = 0.166666667;\n vec3 i = floor(p + (p.x + p.y + p.z) * K1);\n vec3 d0 = p - (i - (i.x + i.y + i.z) * K2);\n vec3 e = step(vec3(0.0), d0 - d0.yzx);\n vec3 i1 = e * (1.0 - e.zxy);\n vec3 i2 = 1.0 - e.zxy * (1.0 - e);\n vec3 d1 = d0 - (i1 - K2);\n vec3 d2 = d0 - (i2 - K1);\n vec3 d3 = d0 - 0.5;\n vec4 h = max(0.6 - vec4(\n dot(d0, d0),\n dot(d1, d1),\n dot(d2, d2),\n dot(d3, d3)\n ), 0.0);\n vec4 n = h * h * h * h * vec4(\n dot(d0, hash33(i)),\n dot(d1, hash33(i + i1)),\n dot(d2, hash33(i + i2)),\n dot(d3, hash33(i + 1.0))\n );\n return dot(vec4(31.316), n);\n }\n \n vec4 extractAlpha(vec3 colorIn) {\n float a = max(max(colorIn.r, colorIn.g), colorIn.b);\n return vec4(colorIn.rgb / (a + 1e-5), a);\n }\n \n const vec3 baseColor1 = vec3(0.611765, 0.262745, 0.996078);\n const vec3 baseColor2 = vec3(0.298039, 0.760784, 0.913725);\n const vec3 baseColor3 = vec3(0.062745, 0.078431, 0.600000);\n const float innerRadius = 0.6;\n const float noiseScale = 0.65;\n \n float light1(float intensity, float attenuation, float dist) {\n return intensity / (1.0 + dist * attenuation);\n }\n \n float light2(float intensity, float attenuation, float dist) {\n return intensity / (1.0 + dist * dist * attenuation);\n }\n \n vec4 draw(vec2 uv) {\n vec3 color1 = adjustHue(baseColor1, hue);\n vec3 color2 = adjustHue(baseColor2, hue);\n vec3 color3 = adjustHue(baseColor3, hue);\n \n float ang = atan(uv.y, uv.x);\n float len = length(uv);\n float invLen = len > 0.0 ? 1.0 / len : 0.0;\n \n float bgLuminance = dot(backgroundColor, vec3(0.299, 0.587, 0.114));\n \n float n0 = snoise3(vec3(uv * noiseScale, iTime * 0.5)) * 0.5 + 0.5;\n float r0 = mix(mix(innerRadius, 1.0, 0.4), mix(innerRadius, 1.0, 0.6), n0);\n float d0 = distance(uv, (r0 * invLen) * uv);\n float v0 = light1(1.0, 10.0, d0);\n\n v0 *= smoothstep(r0 * 1.05, r0, len);\n float innerFade = smoothstep(r0 * 0.8, r0 * 0.95, len);\n v0 *= mix(innerFade, 1.0, bgLuminance * 0.7);\n float cl = cos(ang + iTime * 2.0) * 0.5 + 0.5;\n \n float a = iTime * -1.0;\n vec2 pos = vec2(cos(a), sin(a)) * r0;\n float d = distance(uv, pos);\n float v1 = light2(1.5, 5.0, d);\n v1 *= light1(1.0, 50.0, d0);\n \n float v2 = smoothstep(1.0, mix(innerRadius, 1.0, n0 * 0.5), len);\n float v3 = smoothstep(innerRadius, mix(innerRadius, 1.0, 0.5), len);\n \n vec3 colBase = mix(color1, color2, cl);\n float fadeAmount = mix(1.0, 0.1, bgLuminance);\n \n vec3 darkCol = mix(color3, colBase, v0);\n darkCol = (darkCol + v1) * v2 * v3;\n darkCol = clamp(darkCol, 0.0, 1.0);\n \n vec3 lightCol = (colBase + v1) * mix(1.0, v2 * v3, fadeAmount);\n lightCol = mix(backgroundColor, lightCol, v0);\n lightCol = clamp(lightCol, 0.0, 1.0);\n \n vec3 finalCol = mix(darkCol, lightCol, bgLuminance);\n \n return extractAlpha(finalCol);\n }\n \n vec4 mainImage(vec2 fragCoord) {\n vec2 center = iResolution.xy * 0.5;\n float size = min(iResolution.x, iResolution.y);\n vec2 uv = (fragCoord - center) / size * 2.0;\n \n float angle = rot;\n float s = sin(angle);\n float c = cos(angle);\n uv = vec2(c * uv.x - s * uv.y, s * uv.x + c * uv.y);\n \n uv.x += hover * hoverIntensity * 0.1 * sin(uv.y * 10.0 + iTime);\n uv.y += hover * hoverIntensity * 0.1 * sin(uv.x * 10.0 + iTime);\n \n return draw(uv);\n }\n \n void main() {\n vec2 fragCoord = vUv * iResolution.xy;\n vec4 col = mainImage(fragCoord);\n gl_FragColor = vec4(col.rgb * col.a, col.a);\n }\n `;\n\n useEffect(() => {\n const container = ctnDom.current;\n if (!container) return;\n\n const renderer = new Renderer({ alpha: true, premultipliedAlpha: false });\n const gl = renderer.gl;\n gl.clearColor(0, 0, 0, 0);\n container.appendChild(gl.canvas);\n\n const geometry = new Triangle(gl);\n const program = new Program(gl, {\n vertex: vert,\n fragment: frag,\n uniforms: {\n iTime: { value: 0 },\n iResolution: {\n value: new Vec3(gl.canvas.width, gl.canvas.height, gl.canvas.width / gl.canvas.height)\n },\n hue: { value: hue },\n hover: { value: 0 },\n rot: { value: 0 },\n hoverIntensity: { value: hoverIntensity },\n backgroundColor: { value: hexToVec3(backgroundColor) }\n }\n });\n\n const mesh = new Mesh(gl, { geometry, program });\n\n function resize() {\n if (!container) return;\n const dpr = window.devicePixelRatio || 1;\n const width = container.clientWidth;\n const height = container.clientHeight;\n renderer.setSize(width * dpr, height * dpr);\n gl.canvas.style.width = width + 'px';\n gl.canvas.style.height = height + 'px';\n program.uniforms.iResolution.value.set(gl.canvas.width, gl.canvas.height, gl.canvas.width / gl.canvas.height);\n }\n window.addEventListener('resize', resize);\n resize();\n\n let targetHover = 0;\n let lastTime = 0;\n let currentRot = 0;\n const rotationSpeed = 0.3;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!container) return;\n const rect = container.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const width = rect.width;\n const height = rect.height;\n const size = Math.min(width, height);\n const centerX = width / 2;\n const centerY = height / 2;\n const uvX = ((x - centerX) / size) * 2.0;\n const uvY = ((y - centerY) / size) * 2.0;\n\n if (Math.sqrt(uvX * uvX + uvY * uvY) < 1.0) {\n targetHover = 1;\n } else {\n targetHover = 0;\n }\n };\n\n const handleMouseLeave = () => {\n targetHover = 0;\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseleave', handleMouseLeave);\n\n let rafId: number;\n const update = (t: number) => {\n rafId = requestAnimationFrame(update);\n const dt = (t - lastTime) * 0.001;\n lastTime = t;\n program.uniforms.iTime.value = t * 0.001;\n program.uniforms.hue.value = hue;\n program.uniforms.hoverIntensity.value = hoverIntensity;\n\n const effectiveHover = forceHoverState ? 1 : targetHover;\n program.uniforms.hover.value += (effectiveHover - program.uniforms.hover.value) * 0.1;\n\n if (rotateOnHover && effectiveHover > 0.5) {\n currentRot += dt * rotationSpeed;\n }\n program.uniforms.rot.value = currentRot;\n program.uniforms.backgroundColor.value = hexToVec3(backgroundColor);\n\n renderer.render({ scene: mesh });\n };\n rafId = requestAnimationFrame(update);\n\n return () => {\n cancelAnimationFrame(rafId);\n window.removeEventListener('resize', resize);\n window.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseleave', handleMouseLeave);\n if (container && gl.canvas.parentNode === container) {\n container.removeChild(gl.canvas);\n }\n // container.removeChild(gl.canvas); // Handled above more safely\n gl.getExtension('WEBGL_lose_context')?.loseContext();\n };\n }, [hue, hoverIntensity, rotateOnHover, forceHoverState, backgroundColor]);\n\n return <div ref={ctnDom} className={cn(\"w-full h-full pointer-events-auto\", className)} />;\n}\n\nfunction hslToRgb(h: number, s: number, l: number) {\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return new Vec3(r, g, b);\n}\n\nfunction hexToVec3(color: string) {\n if (color.startsWith('#')) {\n const r = parseInt(color.slice(1, 3), 16) / 255;\n const g = parseInt(color.slice(3, 5), 16) / 255;\n const b = parseInt(color.slice(5, 7), 16) / 255;\n return new Vec3(r, g, b);\n }\n\n const rgbMatch = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n if (rgbMatch) {\n return new Vec3(parseInt(rgbMatch[1]) / 255, parseInt(rgbMatch[2]) / 255, parseInt(rgbMatch[3]) / 255);\n }\n\n const hslMatch = color.match(/hsla?\\((\\d+),\\s*(\\d+)%,\\s*(\\d+)%/);\n if (hslMatch) {\n const h = parseInt(hslMatch[1]) / 360;\n const s = parseInt(hslMatch[2]) / 100;\n const l = parseInt(hslMatch[3]) / 100;\n return hslToRgb(h, s, l);\n }\n\n return new Vec3(0, 0, 0);\n}\n","'use client';\n\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../data-display/Badge';\nimport { Button } from '../actions/Button';\nimport { Text } from '../data-display/Text';\nimport { ArrowRight } from 'lucide-react';\nimport { motion, Variants } from 'framer-motion';\nimport { useMotionPreference } from '../../hooks/useMotionPreference';\n\nexport interface HeroBlockProps {\n className?: string;\n badge?: string;\n headline: string | React.ReactNode;\n description: string;\n primaryCta?: {\n label: string;\n onClick?: () => void;\n href?: string;\n variant?: \"default\" | \"secondary\" | \"outline\" | \"ghost\" | \"link\" | \"destructive\";\n };\n secondaryCta?: {\n label: string;\n onClick?: () => void;\n href?: string;\n };\n background?: React.ReactNode;\n children?: React.ReactNode; // For extra slots like animations\n}\n\nexport function HeroBlock({\n className,\n badge,\n headline,\n description,\n primaryCta,\n secondaryCta,\n background,\n children,\n}: HeroBlockProps) {\n const { shouldAnimate, scale } = useMotionPreference();\n const durationMultiplier = shouldAnimate && scale > 0 ? (5 / scale) : 0;\n\n const containerVariants: Variants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: shouldAnimate ? 0.1 * durationMultiplier : 0,\n delayChildren: shouldAnimate ? 0.2 * durationMultiplier : 0\n },\n },\n };\n\n const itemVariants: Variants = {\n hidden: { opacity: 0, y: shouldAnimate ? 20 : 0 },\n visible: {\n opacity: 1,\n y: 0,\n transition: shouldAnimate ? {\n type: 'spring',\n stiffness: 100,\n // Adjust mass/damping if we really want to speed up spring based on intensity,\n // but usually spring stiffness is enough. \n // To obey strictly the speed:\n duration: 0.5 * durationMultiplier\n } : { duration: 0 }\n },\n };\n\n return (\n <div className={cn(\"relative min-h-[80vh] flex flex-col items-center justify-center overflow-hidden w-full\", className)}>\n {/* Background with Full-Frame & Smooth Falloff */}\n {background && (\n <div className=\"absolute inset-0 z-0 select-none pointer-events-none\">\n {/* The Background Layer */}\n <div className=\"absolute inset-0\">\n {background}\n </div>\n\n {/* Smooth Falloff Gradient (Bottom Fade) */}\n <div className=\"absolute inset-0 bg-gradient-to-b from-transparent via-transparent to-[var(--color-background)] z-10\" />\n </div>\n )}\n\n {/* Content */}\n <motion.div\n className=\"relative z-20 container max-w-4xl px-4 text-center space-y-8\"\n variants={containerVariants}\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once: true }}\n >\n {/* Badge Slot */}\n {badge && (\n <motion.div variants={itemVariants} className=\"flex justify-center\">\n <Badge variant=\"outline\" className=\"backdrop-blur-md bg-[var(--color-surface)]/30 border-[var(--color-border)] px-4 py-1.5\">\n {badge}\n </Badge>\n </motion.div>\n )}\n\n {/* Headline Slot */}\n <motion.h1\n variants={itemVariants}\n className=\"text-5xl md:text-7xl font-bold tracking-tight text-[var(--color-text-primary)]\"\n >\n {headline}\n </motion.h1>\n\n {/* Description Slot */}\n <motion.div variants={itemVariants}>\n <Text variant=\"secondary\" className=\"text-xl md:text-2xl max-w-2xl mx-auto\">\n {description}\n </Text>\n </motion.div>\n\n {/* Extra Slot (e.g. Typewriter) */}\n {children && (\n <motion.div variants={itemVariants} className=\"flex justify-center\">\n {children}\n </motion.div>\n )}\n\n {/* CTAs */}\n <motion.div variants={itemVariants} className=\"flex flex-col sm:flex-row gap-4 justify-center items-center pt-4\">\n {primaryCta && (\n <Button size=\"lg\" variant={primaryCta.variant || \"default\"} onClick={primaryCta.onClick}>\n {primaryCta.label}\n <ArrowRight className=\"w-4 h-4 ml-2\" />\n </Button>\n )}\n {secondaryCta && (\n <Button size=\"lg\" variant=\"outline\" className=\"bg-[var(--color-surface)]/50 backdrop-blur-md\" onClick={secondaryCta.onClick}>\n {secondaryCta.label}\n </Button>\n )}\n </motion.div>\n </motion.div>\n </div>\n );\n}\n","'use client';\nimport React, { useEffect, useRef } from 'react';\n\ninterface ColorRGB {\n r: number;\n g: number;\n b: number;\n}\n\ninterface SplashCursorProps {\n SIM_RESOLUTION?: number;\n DYE_RESOLUTION?: number;\n CAPTURE_RESOLUTION?: number;\n DENSITY_DISSIPATION?: number;\n VELOCITY_DISSIPATION?: number;\n PRESSURE?: number;\n PRESSURE_ITERATIONS?: number;\n CURL?: number;\n SPLAT_RADIUS?: number;\n SPLAT_FORCE?: number;\n SHADING?: boolean;\n COLOR_UPDATE_SPEED?: number;\n BACK_COLOR?: ColorRGB;\n TRANSPARENT?: boolean;\n className?: string; // Additional prop\n style?: React.CSSProperties; // Additional prop\n}\n\ninterface Pointer {\n id: number;\n texcoordX: number;\n texcoordY: number;\n prevTexcoordX: number;\n prevTexcoordY: number;\n deltaX: number;\n deltaY: number;\n down: boolean;\n moved: boolean;\n color: ColorRGB;\n}\n\nfunction pointerPrototype(): Pointer {\n return {\n id: -1,\n texcoordX: 0,\n texcoordY: 0,\n prevTexcoordX: 0,\n prevTexcoordY: 0,\n deltaX: 0,\n deltaY: 0,\n down: false,\n moved: false,\n color: { r: 0, g: 0, b: 0 }\n };\n}\n\nexport function SplashCursor({\n SIM_RESOLUTION = 128,\n DYE_RESOLUTION = 1440,\n CAPTURE_RESOLUTION = 512,\n DENSITY_DISSIPATION = 3.5,\n VELOCITY_DISSIPATION = 2,\n PRESSURE = 0.1,\n PRESSURE_ITERATIONS = 20,\n CURL = 3,\n SPLAT_RADIUS = 0.2,\n SPLAT_FORCE = 6000,\n SHADING = true,\n COLOR_UPDATE_SPEED = 10,\n BACK_COLOR = { r: 0.5, g: 0, b: 0 },\n TRANSPARENT = true,\n className,\n style\n}: SplashCursorProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n let pointers: Pointer[] = [pointerPrototype()];\n\n let config = {\n SIM_RESOLUTION: SIM_RESOLUTION!,\n DYE_RESOLUTION: DYE_RESOLUTION!,\n CAPTURE_RESOLUTION: CAPTURE_RESOLUTION!,\n DENSITY_DISSIPATION: DENSITY_DISSIPATION!,\n VELOCITY_DISSIPATION: VELOCITY_DISSIPATION!,\n PRESSURE: PRESSURE!,\n PRESSURE_ITERATIONS: PRESSURE_ITERATIONS!,\n CURL: CURL!,\n SPLAT_RADIUS: SPLAT_RADIUS!,\n SPLAT_FORCE: SPLAT_FORCE!,\n SHADING,\n COLOR_UPDATE_SPEED: COLOR_UPDATE_SPEED!,\n PAUSED: false,\n BACK_COLOR,\n TRANSPARENT\n };\n\n const { gl, ext } = getWebGLContext(canvas);\n if (!gl || !ext) return;\n\n if (!ext.supportLinearFiltering) {\n config.DYE_RESOLUTION = 256;\n config.SHADING = false;\n }\n\n function getWebGLContext(canvas: HTMLCanvasElement) {\n const params = {\n alpha: true,\n depth: false,\n stencil: false,\n antialias: false,\n preserveDrawingBuffer: false\n };\n\n let gl = canvas.getContext('webgl2', params) as WebGL2RenderingContext | null;\n\n if (!gl) {\n gl = (canvas.getContext('webgl', params) ||\n canvas.getContext('experimental-webgl', params)) as WebGL2RenderingContext | null;\n }\n\n if (!gl) {\n throw new Error('Unable to initialize WebGL.');\n }\n\n const isWebGL2 = 'drawBuffers' in gl;\n\n let supportLinearFiltering = false;\n let halfFloat = null;\n\n if (isWebGL2) {\n (gl as WebGL2RenderingContext).getExtension('EXT_color_buffer_float');\n supportLinearFiltering = !!(gl as WebGL2RenderingContext).getExtension('OES_texture_float_linear');\n } else {\n halfFloat = gl.getExtension('OES_texture_half_float');\n supportLinearFiltering = !!gl.getExtension('OES_texture_half_float_linear');\n }\n\n gl.clearColor(0, 0, 0, 1);\n\n const halfFloatTexType = isWebGL2\n ? (gl as WebGL2RenderingContext).HALF_FLOAT\n : (halfFloat && (halfFloat as any).HALF_FLOAT_OES) || 0;\n\n let formatRGBA: any;\n let formatRG: any;\n let formatR: any;\n\n if (isWebGL2) {\n formatRGBA = getSupportedFormat(gl, (gl as WebGL2RenderingContext).RGBA16F, gl.RGBA, halfFloatTexType);\n formatRG = getSupportedFormat(\n gl,\n (gl as WebGL2RenderingContext).RG16F,\n (gl as WebGL2RenderingContext).RG,\n halfFloatTexType\n );\n formatR = getSupportedFormat(\n gl,\n (gl as WebGL2RenderingContext).R16F,\n (gl as WebGL2RenderingContext).RED,\n halfFloatTexType\n );\n } else {\n formatRGBA = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType);\n formatRG = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType);\n formatR = getSupportedFormat(gl, gl.RGBA, gl.RGBA, halfFloatTexType);\n }\n\n return {\n gl,\n ext: {\n formatRGBA,\n formatRG,\n formatR,\n halfFloatTexType,\n supportLinearFiltering\n }\n };\n }\n\n function getSupportedFormat(\n gl: WebGLRenderingContext | WebGL2RenderingContext,\n internalFormat: number,\n format: number,\n type: number\n ): { internalFormat: number; format: number } | null {\n if (!supportRenderTextureFormat(gl, internalFormat, format, type)) {\n if ('drawBuffers' in gl) {\n const gl2 = gl as WebGL2RenderingContext;\n switch (internalFormat) {\n case gl2.R16F:\n return getSupportedFormat(gl2, gl2.RG16F, gl2.RG, type);\n case gl2.RG16F:\n return getSupportedFormat(gl2, gl2.RGBA16F, gl2.RGBA, type);\n default:\n return null;\n }\n }\n return null;\n }\n return { internalFormat, format };\n }\n\n function supportRenderTextureFormat(\n gl: WebGLRenderingContext | WebGL2RenderingContext,\n internalFormat: number,\n format: number,\n type: number\n ) {\n const texture = gl.createTexture();\n if (!texture) return false;\n\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, 4, 4, 0, format, type, null);\n\n const fbo = gl.createFramebuffer();\n if (!fbo) return false;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\n return status === gl.FRAMEBUFFER_COMPLETE;\n }\n\n function hashCode(s: string) {\n if (!s.length) return 0;\n let hash = 0;\n for (let i = 0; i < s.length; i++) {\n hash = (hash << 5) - hash + s.charCodeAt(i);\n hash |= 0;\n }\n return hash;\n }\n\n function addKeywords(source: string, keywords: string[] | null) {\n if (!keywords) return source;\n let keywordsString = '';\n for (const keyword of keywords) {\n keywordsString += `#define ${keyword}\\n`;\n }\n return keywordsString + source;\n }\n\n function compileShader(type: number, source: string, keywords: string[] | null = null): WebGLShader | null {\n const shaderSource = addKeywords(source, keywords);\n const shader = gl.createShader(type);\n if (!shader) return null;\n gl.shaderSource(shader, shaderSource);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.trace(gl.getShaderInfoLog(shader));\n }\n return shader;\n }\n\n function createProgram(vertexShader: WebGLShader | null, fragmentShader: WebGLShader | null): WebGLProgram | null {\n if (!vertexShader || !fragmentShader) return null;\n const program = gl.createProgram();\n if (!program) return null;\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.trace(gl.getProgramInfoLog(program));\n }\n return program;\n }\n\n function getUniforms(program: WebGLProgram) {\n let uniforms: Record<string, WebGLUniformLocation | null> = {};\n const uniformCount = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n for (let i = 0; i < uniformCount; i++) {\n const uniformInfo = gl.getActiveUniform(program, i);\n if (uniformInfo) {\n uniforms[uniformInfo.name] = gl.getUniformLocation(program, uniformInfo.name);\n }\n }\n return uniforms;\n }\n\n class Program {\n program: WebGLProgram | null;\n uniforms: Record<string, WebGLUniformLocation | null>;\n\n constructor(vertexShader: WebGLShader | null, fragmentShader: WebGLShader | null) {\n this.program = createProgram(vertexShader, fragmentShader);\n this.uniforms = this.program ? getUniforms(this.program) : {};\n }\n\n bind() {\n if (this.program) gl.useProgram(this.program);\n }\n }\n\n class Material {\n vertexShader: WebGLShader | null;\n fragmentShaderSource: string;\n programs: Record<number, WebGLProgram | null>;\n activeProgram: WebGLProgram | null;\n uniforms: Record<string, WebGLUniformLocation | null>;\n\n constructor(vertexShader: WebGLShader | null, fragmentShaderSource: string) {\n this.vertexShader = vertexShader;\n this.fragmentShaderSource = fragmentShaderSource;\n this.programs = {};\n this.activeProgram = null;\n this.uniforms = {};\n }\n\n setKeywords(keywords: string[]) {\n let hash = 0;\n for (const kw of keywords) {\n hash += hashCode(kw);\n }\n let program = this.programs[hash];\n if (program == null) {\n const fragmentShader = compileShader(gl.FRAGMENT_SHADER, this.fragmentShaderSource, keywords);\n program = createProgram(this.vertexShader, fragmentShader);\n this.programs[hash] = program;\n }\n if (program === this.activeProgram) return;\n if (program) {\n this.uniforms = getUniforms(program);\n }\n this.activeProgram = program;\n }\n\n bind() {\n if (this.activeProgram) {\n gl.useProgram(this.activeProgram);\n }\n }\n }\n\n const baseVertexShader = compileShader(\n gl.VERTEX_SHADER,\n `\n precision highp float;\n attribute vec2 aPosition;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform vec2 texelSize;\n\n void main () {\n vUv = aPosition * 0.5 + 0.5;\n vL = vUv - vec2(texelSize.x, 0.0);\n vR = vUv + vec2(texelSize.x, 0.0);\n vT = vUv + vec2(0.0, texelSize.y);\n vB = vUv - vec2(0.0, texelSize.y);\n gl_Position = vec4(aPosition, 0.0, 1.0);\n }\n `\n );\n\n const copyShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n uniform sampler2D uTexture;\n\n void main () {\n gl_FragColor = texture2D(uTexture, vUv);\n }\n `\n );\n\n const clearShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n uniform sampler2D uTexture;\n uniform float value;\n\n void main () {\n gl_FragColor = value * texture2D(uTexture, vUv);\n }\n `\n );\n\n const displayShaderSource = `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform sampler2D uTexture;\n uniform sampler2D uDithering;\n uniform vec2 ditherScale;\n uniform vec2 texelSize;\n\n vec3 linearToGamma (vec3 color) {\n color = max(color, vec3(0));\n return max(1.055 * pow(color, vec3(0.416666667)) - 0.055, vec3(0));\n }\n\n void main () {\n vec3 c = texture2D(uTexture, vUv).rgb;\n #ifdef SHADING\n vec3 lc = texture2D(uTexture, vL).rgb;\n vec3 rc = texture2D(uTexture, vR).rgb;\n vec3 tc = texture2D(uTexture, vT).rgb;\n vec3 bc = texture2D(uTexture, vB).rgb;\n\n float dx = length(rc) - length(lc);\n float dy = length(tc) - length(bc);\n\n vec3 n = normalize(vec3(dx, dy, length(texelSize)));\n vec3 l = vec3(0.0, 0.0, 1.0);\n\n float diffuse = clamp(dot(n, l) + 0.7, 0.7, 1.0);\n c *= diffuse;\n #endif\n\n float a = max(c.r, max(c.g, c.b));\n gl_FragColor = vec4(c, a);\n }\n `;\n\n const splatShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n uniform sampler2D uTarget;\n uniform float aspectRatio;\n uniform vec3 color;\n uniform vec2 point;\n uniform float radius;\n\n void main () {\n vec2 p = vUv - point.xy;\n p.x *= aspectRatio;\n vec3 splat = exp(-dot(p, p) / radius) * color;\n vec3 base = texture2D(uTarget, vUv).xyz;\n gl_FragColor = vec4(base + splat, 1.0);\n }\n `\n );\n\n const advectionShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n uniform sampler2D uVelocity;\n uniform sampler2D uSource;\n uniform vec2 texelSize;\n uniform vec2 dyeTexelSize;\n uniform float dt;\n uniform float dissipation;\n\n vec4 bilerp (sampler2D sam, vec2 uv, vec2 tsize) {\n vec2 st = uv / tsize - 0.5;\n vec2 iuv = floor(st);\n vec2 fuv = fract(st);\n\n vec4 a = texture2D(sam, (iuv + vec2(0.5, 0.5)) * tsize);\n vec4 b = texture2D(sam, (iuv + vec2(1.5, 0.5)) * tsize);\n vec4 c = texture2D(sam, (iuv + vec2(0.5, 1.5)) * tsize);\n vec4 d = texture2D(sam, (iuv + vec2(1.5, 1.5)) * tsize);\n\n return mix(mix(a, b, fuv.x), mix(c, d, fuv.x), fuv.y);\n }\n\n void main () {\n #ifdef MANUAL_FILTERING\n vec2 coord = vUv - dt * bilerp(uVelocity, vUv, texelSize).xy * texelSize;\n vec4 result = bilerp(uSource, coord, dyeTexelSize);\n #else\n vec2 coord = vUv - dt * texture2D(uVelocity, vUv).xy * texelSize;\n vec4 result = texture2D(uSource, coord);\n #endif\n float decay = 1.0 + dissipation * dt;\n gl_FragColor = result / decay;\n }\n `,\n ext.supportLinearFiltering ? null : ['MANUAL_FILTERING']\n );\n\n const divergenceShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uVelocity, vL).x;\n float R = texture2D(uVelocity, vR).x;\n float T = texture2D(uVelocity, vT).y;\n float B = texture2D(uVelocity, vB).y;\n\n vec2 C = texture2D(uVelocity, vUv).xy;\n if (vL.x < 0.0) { L = -C.x; }\n if (vR.x > 1.0) { R = -C.x; }\n if (vT.y > 1.0) { T = -C.y; }\n if (vB.y < 0.0) { B = -C.y; }\n\n float div = 0.5 * (R - L + T - B);\n gl_FragColor = vec4(div, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const curlShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uVelocity, vL).y;\n float R = texture2D(uVelocity, vR).y;\n float T = texture2D(uVelocity, vT).x;\n float B = texture2D(uVelocity, vB).x;\n float vorticity = R - L - T + B;\n gl_FragColor = vec4(0.5 * vorticity, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const vorticityShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision highp float;\n precision highp sampler2D;\n varying vec2 vUv;\n varying vec2 vL;\n varying vec2 vR;\n varying vec2 vT;\n varying vec2 vB;\n uniform sampler2D uVelocity;\n uniform sampler2D uCurl;\n uniform float curl;\n uniform float dt;\n\n void main () {\n float L = texture2D(uCurl, vL).x;\n float R = texture2D(uCurl, vR).x;\n float T = texture2D(uCurl, vT).x;\n float B = texture2D(uCurl, vB).x;\n float C = texture2D(uCurl, vUv).x;\n\n vec2 force = 0.5 * vec2(abs(T) - abs(B), abs(R) - abs(L));\n force /= length(force) + 0.0001;\n force *= curl * C;\n force.y *= -1.0;\n\n vec2 velocity = texture2D(uVelocity, vUv).xy;\n velocity += force * dt;\n velocity = min(max(velocity, -1000.0), 1000.0);\n gl_FragColor = vec4(velocity, 0.0, 1.0);\n }\n `\n );\n\n const pressureShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uPressure;\n uniform sampler2D uDivergence;\n\n void main () {\n float L = texture2D(uPressure, vL).x;\n float R = texture2D(uPressure, vR).x;\n float T = texture2D(uPressure, vT).x;\n float B = texture2D(uPressure, vB).x;\n float C = texture2D(uPressure, vUv).x;\n float divergence = texture2D(uDivergence, vUv).x;\n float pressure = (L + R + B + T - divergence) * 0.25;\n gl_FragColor = vec4(pressure, 0.0, 0.0, 1.0);\n }\n `\n );\n\n const gradientSubtractShader = compileShader(\n gl.FRAGMENT_SHADER,\n `\n precision mediump float;\n precision mediump sampler2D;\n varying highp vec2 vUv;\n varying highp vec2 vL;\n varying highp vec2 vR;\n varying highp vec2 vT;\n varying highp vec2 vB;\n uniform sampler2D uPressure;\n uniform sampler2D uVelocity;\n\n void main () {\n float L = texture2D(uPressure, vL).x;\n float R = texture2D(uPressure, vR).x;\n float T = texture2D(uPressure, vT).x;\n float B = texture2D(uPressure, vB).x;\n vec2 velocity = texture2D(uVelocity, vUv).xy;\n velocity.xy -= vec2(R - L, T - B);\n gl_FragColor = vec4(velocity, 0.0, 1.0);\n }\n `\n );\n\n const blit = (() => {\n const buffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, -1, 1, 1, 1, 1, -1]), gl.STATIC_DRAW);\n const elemBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elemBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 0, 2, 3]), gl.STATIC_DRAW);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(0);\n\n return (target: FBO | null, doClear = false) => {\n if (!gl) return;\n if (!target) {\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n } else {\n gl.viewport(0, 0, target.width, target.height);\n gl.bindFramebuffer(gl.FRAMEBUFFER, target.fbo);\n }\n if (doClear) {\n gl.clearColor(0, 0, 0, 1);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);\n };\n })();\n\n interface FBO {\n texture: WebGLTexture;\n fbo: WebGLFramebuffer;\n width: number;\n height: number;\n texelSizeX: number;\n texelSizeY: number;\n attach: (id: number) => number;\n }\n\n interface DoubleFBO {\n width: number;\n height: number;\n texelSizeX: number;\n texelSizeY: number;\n read: FBO;\n write: FBO;\n swap: () => void;\n }\n\n let dye: DoubleFBO;\n let velocity: DoubleFBO;\n let divergence: FBO;\n let curl: FBO;\n let pressure: DoubleFBO;\n\n const copyProgram = new Program(baseVertexShader, copyShader);\n const clearProgram = new Program(baseVertexShader, clearShader);\n const splatProgram = new Program(baseVertexShader, splatShader);\n const advectionProgram = new Program(baseVertexShader, advectionShader);\n const divergenceProgram = new Program(baseVertexShader, divergenceShader);\n const curlProgram = new Program(baseVertexShader, curlShader);\n const vorticityProgram = new Program(baseVertexShader, vorticityShader);\n const pressureProgram = new Program(baseVertexShader, pressureShader);\n const gradienSubtractProgram = new Program(baseVertexShader, gradientSubtractShader);\n const displayMaterial = new Material(baseVertexShader, displayShaderSource);\n\n function createFBO(w: number, h: number, internalFormat: number, format: number, type: number, param: number): FBO {\n gl.activeTexture(gl.TEXTURE0);\n const texture = gl.createTexture()!;\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, param);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, param);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, w, h, 0, format, type, null);\n const fbo = gl.createFramebuffer()!;\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n gl.viewport(0, 0, w, h);\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n const texelSizeX = 1 / w;\n const texelSizeY = 1 / h;\n\n return {\n texture,\n fbo,\n width: w,\n height: h,\n texelSizeX,\n texelSizeY,\n attach(id: number) {\n gl.activeTexture(gl.TEXTURE0 + id);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n return id;\n }\n };\n }\n\n function createDoubleFBO(\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ): DoubleFBO {\n const fbo1 = createFBO(w, h, internalFormat, format, type, param);\n const fbo2 = createFBO(w, h, internalFormat, format, type, param);\n return {\n width: w,\n height: h,\n texelSizeX: fbo1.texelSizeX,\n texelSizeY: fbo1.texelSizeY,\n read: fbo1,\n write: fbo2,\n swap() {\n const tmp = this.read;\n this.read = this.write;\n this.write = tmp;\n }\n };\n }\n\n function resizeFBO(\n target: FBO,\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ) {\n const newFBO = createFBO(w, h, internalFormat, format, type, param);\n copyProgram.bind();\n if (copyProgram.uniforms.uTexture) gl.uniform1i(copyProgram.uniforms.uTexture, target.attach(0));\n blit(newFBO, false);\n return newFBO;\n }\n\n function resizeDoubleFBO(\n target: DoubleFBO,\n w: number,\n h: number,\n internalFormat: number,\n format: number,\n type: number,\n param: number\n ) {\n if (target.width === w && target.height === h) return target;\n target.read = resizeFBO(target.read, w, h, internalFormat, format, type, param);\n target.write = createFBO(w, h, internalFormat, format, type, param);\n target.width = w;\n target.height = h;\n target.texelSizeX = 1 / w;\n target.texelSizeY = 1 / h;\n return target;\n }\n\n function initFramebuffers() {\n const simRes = getResolution(config.SIM_RESOLUTION!);\n const dyeRes = getResolution(config.DYE_RESOLUTION!);\n\n const texType = ext.halfFloatTexType;\n const rgba = ext.formatRGBA;\n const rg = ext.formatRG;\n const r = ext.formatR;\n const filtering = ext.supportLinearFiltering ? gl.LINEAR : gl.NEAREST;\n gl.disable(gl.BLEND);\n\n if (!dye) {\n dye = createDoubleFBO(dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering);\n } else {\n dye = resizeDoubleFBO(dye, dyeRes.width, dyeRes.height, rgba.internalFormat, rgba.format, texType, filtering);\n }\n\n if (!velocity) {\n velocity = createDoubleFBO(simRes.width, simRes.height, rg.internalFormat, rg.format, texType, filtering);\n } else {\n velocity = resizeDoubleFBO(\n velocity,\n simRes.width,\n simRes.height,\n rg.internalFormat,\n rg.format,\n texType,\n filtering\n );\n }\n\n divergence = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n curl = createFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n pressure = createDoubleFBO(simRes.width, simRes.height, r.internalFormat, r.format, texType, gl.NEAREST);\n }\n\n function updateKeywords() {\n const displayKeywords: string[] = [];\n if (config.SHADING) displayKeywords.push('SHADING');\n displayMaterial.setKeywords(displayKeywords);\n }\n\n function getResolution(resolution: number) {\n const w = gl.drawingBufferWidth;\n const h = gl.drawingBufferHeight;\n const aspectRatio = w / h;\n let aspect = aspectRatio < 1 ? 1 / aspectRatio : aspectRatio;\n const min = Math.round(resolution);\n const max = Math.round(resolution * aspect);\n if (w > h) {\n return { width: max, height: min };\n }\n return { width: min, height: max };\n }\n\n function scaleByPixelRatio(input: number) {\n const pixelRatio = window.devicePixelRatio || 1;\n return Math.floor(input * pixelRatio);\n }\n\n updateKeywords();\n initFramebuffers();\n\n let lastUpdateTime = Date.now();\n let colorUpdateTimer = 0.0;\n\n function updateFrame() {\n const dt = calcDeltaTime();\n if (resizeCanvas()) initFramebuffers();\n updateColors(dt);\n applyInputs();\n step(dt);\n render(null);\n requestAnimationFrame(updateFrame);\n }\n\n function calcDeltaTime() {\n const now = Date.now();\n let dt = (now - lastUpdateTime) / 1000;\n dt = Math.min(dt, 0.016666);\n lastUpdateTime = now;\n return dt;\n }\n\n function resizeCanvas() {\n const width = scaleByPixelRatio(canvas!.clientWidth);\n const height = scaleByPixelRatio(canvas!.clientHeight);\n if (canvas!.width !== width || canvas!.height !== height) {\n canvas!.width = width;\n canvas!.height = height;\n return true;\n }\n return false;\n }\n\n function updateColors(dt: number) {\n colorUpdateTimer += dt * config.COLOR_UPDATE_SPEED;\n if (colorUpdateTimer >= 1) {\n colorUpdateTimer = wrap(colorUpdateTimer, 0, 1);\n pointers.forEach(p => {\n p.color = generateColor();\n });\n }\n }\n\n function applyInputs() {\n for (const p of pointers) {\n if (p.moved) {\n p.moved = false;\n splatPointer(p);\n }\n }\n }\n\n function step(dt: number) {\n gl.disable(gl.BLEND);\n\n curlProgram.bind();\n if (curlProgram.uniforms.texelSize) {\n gl.uniform2f(curlProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY);\n }\n if (curlProgram.uniforms.uVelocity) {\n gl.uniform1i(curlProgram.uniforms.uVelocity, velocity.read.attach(0));\n }\n blit(curl);\n\n vorticityProgram.bind();\n if (vorticityProgram.uniforms.texelSize) {\n gl.uniform2f(vorticityProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY);\n }\n if (vorticityProgram.uniforms.uVelocity) {\n gl.uniform1i(vorticityProgram.uniforms.uVelocity, velocity.read.attach(0));\n }\n if (vorticityProgram.uniforms.uCurl) {\n gl.uniform1i(vorticityProgram.uniforms.uCurl, curl.attach(1));\n }\n if (vorticityProgram.uniforms.curl) {\n gl.uniform1f(vorticityProgram.uniforms.curl, config.CURL);\n }\n if (vorticityProgram.uniforms.dt) {\n gl.uniform1f(vorticityProgram.uniforms.dt, dt);\n }\n blit(velocity.write);\n velocity.swap();\n\n divergenceProgram.bind();\n if (divergenceProgram.uniforms.texelSize) {\n gl.uniform2f(divergenceProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY);\n }\n if (divergenceProgram.uniforms.uVelocity) {\n gl.uniform1i(divergenceProgram.uniforms.uVelocity, velocity.read.attach(0));\n }\n blit(divergence);\n\n clearProgram.bind();\n if (clearProgram.uniforms.uTexture) {\n gl.uniform1i(clearProgram.uniforms.uTexture, pressure.read.attach(0));\n }\n if (clearProgram.uniforms.value) {\n gl.uniform1f(clearProgram.uniforms.value, config.PRESSURE);\n }\n blit(pressure.write);\n pressure.swap();\n\n pressureProgram.bind();\n if (pressureProgram.uniforms.texelSize) {\n gl.uniform2f(pressureProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY);\n }\n if (pressureProgram.uniforms.uDivergence) {\n gl.uniform1i(pressureProgram.uniforms.uDivergence, divergence.attach(0));\n }\n for (let i = 0; i < config.PRESSURE_ITERATIONS; i++) {\n if (pressureProgram.uniforms.uPressure) {\n gl.uniform1i(pressureProgram.uniforms.uPressure, pressure.read.attach(1));\n }\n blit(pressure.write);\n pressure.swap();\n }\n\n gradienSubtractProgram.bind();\n if (gradienSubtractProgram.uniforms.texelSize) {\n gl.uniform2f(gradienSubtractProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY);\n }\n if (gradienSubtractProgram.uniforms.uPressure) {\n gl.uniform1i(gradienSubtractProgram.uniforms.uPressure, pressure.read.attach(0));\n }\n if (gradienSubtractProgram.uniforms.uVelocity) {\n gl.uniform1i(gradienSubtractProgram.uniforms.uVelocity, velocity.read.attach(1));\n }\n blit(velocity.write);\n velocity.swap();\n\n advectionProgram.bind();\n if (advectionProgram.uniforms.texelSize) {\n gl.uniform2f(advectionProgram.uniforms.texelSize, velocity.texelSizeX, velocity.texelSizeY);\n }\n if (!ext.supportLinearFiltering && advectionProgram.uniforms.dyeTexelSize) {\n gl.uniform2f(advectionProgram.uniforms.dyeTexelSize, velocity.texelSizeX, velocity.texelSizeY);\n }\n const velocityId = velocity.read.attach(0);\n if (advectionProgram.uniforms.uVelocity) {\n gl.uniform1i(advectionProgram.uniforms.uVelocity, velocityId);\n }\n if (advectionProgram.uniforms.uSource) {\n gl.uniform1i(advectionProgram.uniforms.uSource, velocityId);\n }\n if (advectionProgram.uniforms.dt) {\n gl.uniform1f(advectionProgram.uniforms.dt, dt);\n }\n if (advectionProgram.uniforms.dissipation) {\n gl.uniform1f(advectionProgram.uniforms.dissipation, config.VELOCITY_DISSIPATION);\n }\n blit(velocity.write);\n velocity.swap();\n\n if (!ext.supportLinearFiltering && advectionProgram.uniforms.dyeTexelSize) {\n gl.uniform2f(advectionProgram.uniforms.dyeTexelSize, dye.texelSizeX, dye.texelSizeY);\n }\n if (advectionProgram.uniforms.uVelocity) {\n gl.uniform1i(advectionProgram.uniforms.uVelocity, velocity.read.attach(0));\n }\n if (advectionProgram.uniforms.uSource) {\n gl.uniform1i(advectionProgram.uniforms.uSource, dye.read.attach(1));\n }\n if (advectionProgram.uniforms.dissipation) {\n gl.uniform1f(advectionProgram.uniforms.dissipation, config.DENSITY_DISSIPATION);\n }\n blit(dye.write);\n dye.swap();\n }\n\n function render(target: FBO | null) {\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.enable(gl.BLEND);\n drawDisplay(target);\n }\n\n function drawDisplay(target: FBO | null) {\n const width = target ? target.width : gl.drawingBufferWidth;\n const height = target ? target.height : gl.drawingBufferHeight;\n displayMaterial.bind();\n if (config.SHADING && displayMaterial.uniforms.texelSize) {\n gl.uniform2f(displayMaterial.uniforms.texelSize, 1 / width, 1 / height);\n }\n if (displayMaterial.uniforms.uTexture) {\n gl.uniform1i(displayMaterial.uniforms.uTexture, dye.read.attach(0));\n }\n blit(target, false);\n }\n\n function splatPointer(pointer: Pointer) {\n const dx = pointer.deltaX * config.SPLAT_FORCE;\n const dy = pointer.deltaY * config.SPLAT_FORCE;\n splat(pointer.texcoordX, pointer.texcoordY, dx, dy, pointer.color);\n }\n\n function clickSplat(pointer: Pointer) {\n const color = generateColor();\n color.r *= 10;\n color.g *= 10;\n color.b *= 10;\n const dx = 10 * (Math.random() - 0.5);\n const dy = 30 * (Math.random() - 0.5);\n splat(pointer.texcoordX, pointer.texcoordY, dx, dy, color);\n }\n\n function splat(x: number, y: number, dx: number, dy: number, color: ColorRGB) {\n splatProgram.bind();\n if (splatProgram.uniforms.uTarget) {\n gl.uniform1i(splatProgram.uniforms.uTarget, velocity.read.attach(0));\n }\n if (splatProgram.uniforms.aspectRatio) {\n gl.uniform1f(splatProgram.uniforms.aspectRatio, canvas!.width / canvas!.height);\n }\n if (splatProgram.uniforms.point) {\n gl.uniform2f(splatProgram.uniforms.point, x, y);\n }\n if (splatProgram.uniforms.color) {\n gl.uniform3f(splatProgram.uniforms.color, dx, dy, 0);\n }\n if (splatProgram.uniforms.radius) {\n gl.uniform1f(splatProgram.uniforms.radius, correctRadius(config.SPLAT_RADIUS / 100)!);\n }\n blit(velocity.write);\n velocity.swap();\n\n if (splatProgram.uniforms.uTarget) {\n gl.uniform1i(splatProgram.uniforms.uTarget, dye.read.attach(0));\n }\n if (splatProgram.uniforms.color) {\n gl.uniform3f(splatProgram.uniforms.color, color.r, color.g, color.b);\n }\n blit(dye.write);\n dye.swap();\n }\n\n function correctRadius(radius: number) {\n const aspectRatio = canvas!.width / canvas!.height;\n if (aspectRatio > 1) radius *= aspectRatio;\n return radius;\n }\n\n function updatePointerDownData(pointer: Pointer, id: number, posX: number, posY: number) {\n pointer.id = id;\n pointer.down = true;\n pointer.moved = false;\n pointer.texcoordX = posX / canvas!.width;\n pointer.texcoordY = 1 - posY / canvas!.height;\n pointer.prevTexcoordX = pointer.texcoordX;\n pointer.prevTexcoordY = pointer.texcoordY;\n pointer.deltaX = 0;\n pointer.deltaY = 0;\n pointer.color = generateColor();\n }\n\n function updatePointerMoveData(pointer: Pointer, posX: number, posY: number, color: ColorRGB) {\n pointer.prevTexcoordX = pointer.texcoordX;\n pointer.prevTexcoordY = pointer.texcoordY;\n pointer.texcoordX = posX / canvas!.width;\n pointer.texcoordY = 1 - posY / canvas!.height;\n pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX)!;\n pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY)!;\n pointer.moved = Math.abs(pointer.deltaX) > 0 || Math.abs(pointer.deltaY) > 0;\n pointer.color = color;\n }\n\n function updatePointerUpData(pointer: Pointer) {\n pointer.down = false;\n }\n\n function correctDeltaX(delta: number) {\n const aspectRatio = canvas!.width / canvas!.height;\n if (aspectRatio < 1) delta *= aspectRatio;\n return delta;\n }\n\n function correctDeltaY(delta: number) {\n const aspectRatio = canvas!.width / canvas!.height;\n if (aspectRatio > 1) delta /= aspectRatio;\n return delta;\n }\n\n function generateColor(): ColorRGB {\n const c = HSVtoRGB(Math.random(), 1.0, 1.0);\n c.r *= 0.15;\n c.g *= 0.15;\n c.b *= 0.15;\n return c;\n }\n\n function HSVtoRGB(h: number, s: number, v: number): ColorRGB {\n let r = 0,\n g = 0,\n b = 0;\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n return { r, g, b };\n }\n\n function wrap(value: number, min: number, max: number) {\n const range = max - min;\n if (range === 0) return min;\n return ((value - min) % range) + min;\n }\n\n function getMousePos(e: MouseEvent | Touch, canvas: HTMLCanvasElement | null) {\n if (!canvas) return { x: 0, y: 0 };\n const rect = canvas.getBoundingClientRect();\n return {\n x: scaleByPixelRatio(e.clientX - rect.left),\n y: scaleByPixelRatio(e.clientY - rect.top)\n };\n }\n\n window.addEventListener('mousedown', e => {\n const pointer = pointers[0];\n const pos = getMousePos(e, canvas);\n updatePointerDownData(pointer, -1, pos.x, pos.y);\n clickSplat(pointer);\n });\n\n function handleFirstMouseMove(e: MouseEvent) {\n const pointer = pointers[0];\n const pos = getMousePos(e, canvas);\n const color = generateColor();\n updateFrame();\n updatePointerMoveData(pointer, pos.x, pos.y, color);\n document.body.removeEventListener('mousemove', handleFirstMouseMove);\n }\n document.body.addEventListener('mousemove', handleFirstMouseMove);\n\n window.addEventListener('mousemove', e => {\n const pointer = pointers[0];\n const pos = getMousePos(e, canvas);\n const color = pointer.color;\n updatePointerMoveData(pointer, pos.x, pos.y, color);\n });\n\n function handleFirstTouchStart(e: TouchEvent) {\n const touches = e.targetTouches;\n const pointer = pointers[0];\n for (let i = 0; i < touches.length; i++) {\n const pos = getMousePos(touches[i], canvas);\n updateFrame();\n updatePointerDownData(pointer, touches[i].identifier, pos.x, pos.y);\n }\n document.body.removeEventListener('touchstart', handleFirstTouchStart);\n }\n document.body.addEventListener('touchstart', handleFirstTouchStart);\n\n window.addEventListener(\n 'touchstart',\n e => {\n const touches = e.targetTouches;\n const pointer = pointers[0];\n for (let i = 0; i < touches.length; i++) {\n const pos = getMousePos(touches[i], canvas);\n updatePointerDownData(pointer, touches[i].identifier, pos.x, pos.y);\n }\n },\n false\n );\n\n window.addEventListener(\n 'touchmove',\n e => {\n const touches = e.targetTouches;\n const pointer = pointers[0];\n for (let i = 0; i < touches.length; i++) {\n const pos = getMousePos(touches[i], canvas);\n updatePointerMoveData(pointer, pos.x, pos.y, pointer.color);\n }\n },\n false\n );\n\n window.addEventListener('touchend', e => {\n const touches = e.changedTouches;\n const pointer = pointers[0];\n for (let i = 0; i < touches.length; i++) {\n updatePointerUpData(pointer);\n }\n });\n }, [\n SIM_RESOLUTION,\n DYE_RESOLUTION,\n CAPTURE_RESOLUTION,\n DENSITY_DISSIPATION,\n VELOCITY_DISSIPATION,\n PRESSURE,\n PRESSURE_ITERATIONS,\n CURL,\n SPLAT_RADIUS,\n SPLAT_FORCE,\n SHADING,\n COLOR_UPDATE_SPEED,\n BACK_COLOR,\n TRANSPARENT\n ]);\n\n return (\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n zIndex: 50,\n pointerEvents: 'none',\n width: '100%',\n height: '100%',\n ...style\n }}\n className={className}\n >\n <canvas\n ref={canvasRef}\n id=\"fluid\"\n style={{\n width: '100%',\n height: '100%',\n display: 'block'\n }}\n />\n </div>\n );\n}\n","'use client';\nimport React, { useEffect, useRef, useState } from 'react';\n\ninterface TargetCursorProps {\n color?: string;\n outerSize?: number;\n innerSize?: number;\n outerAlpha?: number;\n innerScale?: number;\n outerScale?: number;\n clickScale?: number;\n blendMode?: boolean;\n}\n\nexport function TargetCursor({\n color = '255, 255, 255',\n outerSize = 40,\n innerSize = 8,\n outerAlpha = 0.4,\n innerScale = 0.7,\n outerScale = 4,\n clickScale = 0.7,\n blendMode = true\n}: TargetCursorProps) {\n const cursorOuterRef = useRef<HTMLDivElement>(null);\n const cursorInnerRef = useRef<HTMLDivElement>(null);\n const requestRef = useRef<number | null>(null);\n const previousTimeRef = useRef<number | null>(null);\n\n // Mouse position\n const endX = useRef(0);\n const endY = useRef(0);\n // Current interpolated position for outer circle\n const _x = useRef(0);\n const _y = useRef(0);\n\n const [isActive, setIsActive] = useState(false);\n const [isActiveClickable, setIsActiveClickable] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n\n // Initial positioning\n useEffect(() => {\n const onMouseMove = (e: MouseEvent) => {\n endX.current = e.clientX;\n endY.current = e.clientY;\n\n // Direct DOM update for performance\n if (cursorInnerRef.current) {\n cursorInnerRef.current.style.top = `${e.clientY}px`;\n cursorInnerRef.current.style.left = `${e.clientX}px`;\n }\n\n if (!isVisible) {\n _x.current = e.clientX;\n _y.current = e.clientY;\n setIsVisible(true);\n }\n\n // Check for clickable targets using DOM traversal (lighter than getComputedStyle)\n // Note: getComputedStyle causes reflow, so avoid if possible.\n // Using tagName and common patterns is preferred for performance.\n const target = e.target as HTMLElement;\n // Simple heuristics\n if (\n target.tagName.toLowerCase() === 'a' ||\n target.tagName.toLowerCase() === 'button' ||\n target.closest('a') ||\n target.closest('button') ||\n target.onclick ||\n target.getAttribute('role') === 'button'\n ) {\n setIsActiveClickable(true);\n } else {\n setIsActiveClickable(false);\n }\n };\n\n const onMouseDown = () => setIsActive(true);\n const onMouseUp = () => setIsActive(false);\n const onMouseEnter = () => setIsVisible(true);\n const onMouseLeave = () => setIsVisible(false);\n\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mousedown', onMouseDown);\n window.addEventListener('mouseup', onMouseUp);\n window.addEventListener('mouseenter', onMouseEnter);\n window.addEventListener('mouseleave', onMouseLeave);\n\n return () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mousedown', onMouseDown);\n window.removeEventListener('mouseup', onMouseUp);\n window.removeEventListener('mouseenter', onMouseEnter);\n window.removeEventListener('mouseleave', onMouseLeave);\n };\n }, [isVisible]);\n\n // Animation Loop\n const animateCursor = (time: number) => {\n if (previousTimeRef.current !== undefined) {\n _x.current += (endX.current - _x.current) / 8;\n _y.current += (endY.current - _y.current) / 8;\n\n if (cursorOuterRef.current) {\n // translate3d for position, translate(-50%, -50%) for centering\n cursorOuterRef.current.style.transform = `translate3d(${_x.current}px, ${_y.current}px, 0) translate(-50%, -50%)`;\n }\n }\n previousTimeRef.current = time;\n requestRef.current = requestAnimationFrame(animateCursor);\n };\n\n useEffect(() => {\n requestRef.current = requestAnimationFrame(animateCursor);\n return () => cancelAnimationFrame(requestRef.current!);\n }, []);\n\n useEffect(() => {\n if (isVisible) {\n const style = document.createElement('style');\n style.innerHTML = `body, a, button, input, [role=\"button\"] { cursor: none !important; }`;\n document.head.appendChild(style);\n return () => {\n if (document.head.contains(style)) {\n document.head.removeChild(style);\n }\n };\n }\n }, [isVisible]);\n\n // Inline styles for dynamic props\n const styles = {\n cursorInner: {\n width: innerSize,\n height: innerSize,\n backgroundColor: `rgba(${color}, 1)`,\n // transform handles centering and scale\n transform: `translate(-50%, -50%) scale(${isActive || isActiveClickable ? innerScale : 1})`,\n transition: 'transform 0.15s ease-out, opacity 0.15s ease-out',\n },\n cursorOuter: {\n width: outerSize,\n height: outerSize,\n backgroundColor: `rgba(${color}, ${outerAlpha})`,\n transition: 'width 0.3s, height 0.3s, background-color 0.3s',\n ...(isActiveClickable && {\n width: outerSize * 1.5,\n height: outerSize * 1.5,\n backgroundColor: `rgba(${color}, ${outerAlpha - 0.1})`,\n })\n }\n };\n\n if (!isVisible) return null;\n\n return (\n <>\n <div\n ref={cursorOuterRef}\n style={{\n position: 'fixed',\n borderRadius: '50%',\n pointerEvents: 'none',\n zIndex: 9999,\n left: 0,\n top: 0,\n willChange: 'transform',\n mixBlendMode: blendMode ? 'difference' : 'normal',\n ...styles.cursorOuter\n }}\n />\n <div\n ref={cursorInnerRef}\n style={{\n position: 'fixed',\n borderRadius: '50%',\n pointerEvents: 'none',\n zIndex: 9999,\n willChange: 'left, top, transform',\n mixBlendMode: blendMode ? 'difference' : 'normal',\n ...styles.cursorInner\n }}\n />\n {/* Default cursor hidden via useEffect */}\n </>\n );\n}\n","'use client';\n\n/**\n * Theme Provider\n * Applies theme tokens as CSS variables and manages transitions\n */\n\nimport { useEffect, useState } from 'react';\nimport { useThemeStore } from '../lib/store/theme';\nimport { useCustomizer, type ColorPalette } from '../lib/store/customizer';\nimport { studioTokens, sageTokens, voltTokens, syntaxColors, codeColors } from '@sage/tokens';\nimport type { ThemeName, ColorMode } from '@sage/tokens';\n\n// Theme token map\nconst themeTokens = {\n studio: studioTokens,\n sage: sageTokens,\n volt: voltTokens,\n};\n\n// Font family map (CSS variables defined in layout)\nconst fontFamilies = {\n studio: {\n heading: 'var(--font-studio-heading)',\n body: 'var(--font-studio-body)',\n mono: 'var(--font-mono)',\n },\n sage: {\n sans: 'var(--font-sage-body)',\n serif: 'var(--font-sage-heading)',\n mono: 'var(--font-mono)',\n },\n volt: {\n sans: 'var(--font-volt-heading)',\n mono: 'var(--font-mono)',\n },\n};\n\n/**\n * Convert theme tokens to CSS variables\n */\nfunction getThemeVars(theme: ThemeName, mode: ColorMode): Record<string, string> {\n const tokens = themeTokens[theme];\n const colors = tokens[mode]?.colors as any;\n const effects = tokens[mode]?.effects as any;\n const fonts = fontFamilies[theme] as any;\n\n return {\n // Colors - Base\n '--color-background': colors?.background || '#ffffff',\n '--color-background-secondary': colors?.backgroundSecondary || colors?.background || '#fafafa',\n '--color-background-tertiary': colors?.backgroundTertiary || colors?.backgroundSecondary || colors?.background || '#f5f5f5',\n '--color-foreground': colors?.foreground || '#0a0a0a',\n '--color-primary': colors?.primary || '#0a0a0a',\n '--color-primary-foreground': colors?.primaryForeground || '#ffffff',\n '--color-secondary': colors?.secondary || '#f5f5f5',\n '--color-secondary-foreground': colors?.secondaryForeground || '#0a0a0a',\n '--color-accent': colors?.accent || colors?.primary || '#0070f3',\n '--color-accent-foreground': colors?.accentForeground || '#ffffff',\n '--color-success': colors?.success || '#00a86b',\n '--color-success-foreground': colors?.successForeground || '#ffffff',\n '--color-warning': colors?.warning || '#f59e0b',\n '--color-warning-foreground': colors?.warningForeground || '#ffffff',\n '--color-error': colors?.error || '#ef4444',\n '--color-error-foreground': colors?.errorForeground || '#ffffff',\n '--color-info': colors?.info || colors?.accent || '#0070f3',\n '--color-info-foreground': colors?.infoForeground || '#ffffff',\n '--color-glass': colors?.glass || 'rgba(255, 255, 255, 0.7)',\n '--color-glass-border': colors?.glassBorder || 'rgba(0, 0, 0, 0.1)',\n\n // Semantic color aliases (matching README examples)\n '--color-text-primary': colors?.foreground || '#0a0a0a',\n '--color-text-secondary': colors?.foregroundSecondary || '#525252',\n '--color-text-muted': colors?.foregroundTertiary || '#a3a3a3',\n '--color-surface': colors?.backgroundSecondary || colors?.background || '#fafafa',\n '--color-border': colors?.border || colors?.glassBorder || 'rgba(0, 0, 0, 0.1)',\n '--color-focus': colors?.accent || colors?.primary || '#0070f3',\n\n // Links and focus rings (can be overridden by derived tokens)\n '--color-link': colors?.link || colors?.primary || '#0a0a0a',\n '--color-ring': colors?.ring || colors?.primary || '#0a0a0a',\n\n // Interactive states\n '--color-hover': colors?.hover || colors?.backgroundSecondary || '#fafafa',\n '--color-active': colors?.active || colors?.backgroundTertiary || '#f0f0f0',\n '--color-link-hover': colors?.linkHover || colors?.primary || '#0a0a0a',\n '--color-link-hover-foreground': colors?.linkHoverForeground || colors?.background || '#ffffff',\n\n // Effects - Blur\n '--effect-blur-sm': effects?.blur?.sm || 'blur(4px)',\n '--effect-blur-md': effects?.blur?.md || 'blur(8px)',\n '--effect-blur-lg': effects?.blur?.lg || 'blur(16px)',\n '--effect-blur-xl': effects?.blur?.xl || effects?.blur?.lg || 'blur(24px)',\n\n // Effects - Shadow\n '--effect-shadow-sm': effects?.shadow?.sm || '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n '--effect-shadow-md': effects?.shadow?.md || effects?.shadow?.sm || '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n '--effect-shadow-lg': effects?.shadow?.lg || effects?.shadow?.md || effects?.shadow?.sm || '0 10px 15px -3px rgba(0, 0, 0, 0.1)',\n\n // Typography - Font Families\n '--font-heading': fonts?.heading || (theme === 'sage' && fonts?.serif ? fonts.serif : fonts?.sans) || 'var(--font-studio-heading)',\n '--font-body': fonts?.body || fonts?.sans || 'var(--font-studio-body)',\n '--font-mono': fonts?.mono || 'var(--font-studio-mono)',\n\n // Motion - These are accessed programmatically via tokens\n // but we can set defaults for CSS animations\n '--ease-default': tokens?.motion?.ease?.default || 'cubic-bezier(0.4, 0, 0.2, 1)',\n '--ease-spring': tokens?.motion?.ease?.spring || tokens?.motion?.ease?.default || 'cubic-bezier(0.16, 1, 0.3, 1)',\n\n // Syntax Highlighting - Based on VS Code Dark+ theme\n '--syntax-comment': mode === 'light' ? syntaxColors.light.comment : syntaxColors.dark.comment,\n '--syntax-keyword': mode === 'light' ? syntaxColors.light.keyword : syntaxColors.dark.keyword,\n '--syntax-function': mode === 'light' ? syntaxColors.light.function : syntaxColors.dark.function,\n '--syntax-string': mode === 'light' ? syntaxColors.light.string : syntaxColors.dark.string,\n '--syntax-number': mode === 'light' ? syntaxColors.light.number : syntaxColors.dark.number,\n '--syntax-boolean': mode === 'light' ? syntaxColors.light.boolean : syntaxColors.dark.boolean,\n '--syntax-operator': mode === 'light' ? syntaxColors.light.operator : syntaxColors.dark.operator,\n '--syntax-property': mode === 'light' ? syntaxColors.light.property : syntaxColors.dark.property,\n '--syntax-className': mode === 'light' ? syntaxColors.light.className : syntaxColors.dark.className,\n '--syntax-tag': mode === 'light' ? syntaxColors.light.tag : syntaxColors.dark.tag,\n '--syntax-attribute': mode === 'light' ? syntaxColors.light.attribute : syntaxColors.dark.attribute,\n '--syntax-variable': mode === 'light' ? syntaxColors.light.variable : syntaxColors.dark.variable,\n '--syntax-punctuation': mode === 'light' ? syntaxColors.light.punctuation : syntaxColors.dark.punctuation,\n '--syntax-plain': mode === 'light' ? syntaxColors.light.plain : syntaxColors.dark.plain,\n\n // Code Block Backgrounds and Borders - Accessible contrast (WCAG AA 4.5:1)\n '--code-block-bg': mode === 'light' ? codeColors.light.blockBackground : codeColors.dark.blockBackground,\n '--code-inline-bg': mode === 'light' ? codeColors.light.inlineBackground : codeColors.dark.inlineBackground,\n '--code-border': mode === 'light' ? codeColors.light.border : codeColors.dark.border,\n };\n}\n\n/**\n * Merge custom color palette with base theme tokens\n * This is where \"change once, ripple everywhere\" happens!\n */\nfunction mergeCustomColorTokens(\n baseTokens: Record<string, string>,\n customPalette: ColorPalette\n): Record<string, string> {\n return {\n ...baseTokens,\n\n // Override primary color\n '--color-primary': customPalette.primary,\n '--color-primary-foreground': customPalette.primaryForeground,\n\n // Apply color scale (for utilities like bg-primary/50)\n '--color-primary-50': customPalette.scale[50],\n '--color-primary-100': customPalette.scale[100],\n '--color-primary-200': customPalette.scale[200],\n '--color-primary-300': customPalette.scale[300],\n '--color-primary-400': customPalette.scale[400],\n '--color-primary-500': customPalette.scale[500],\n '--color-primary-600': customPalette.scale[600],\n '--color-primary-700': customPalette.scale[700],\n '--color-primary-800': customPalette.scale[800],\n '--color-primary-900': customPalette.scale[900],\n\n // Override secondary color if provided (advanced mode)\n ...(customPalette.secondary && {\n '--color-secondary': customPalette.secondary,\n '--color-secondary-foreground': customPalette.secondaryForeground || baseTokens['--color-secondary-foreground'],\n }),\n\n // Override accent color if provided (advanced mode)\n ...(customPalette.accent && {\n '--color-accent': customPalette.accent,\n '--color-accent-foreground': customPalette.accentForeground || baseTokens['--color-accent-foreground'],\n }),\n\n // Apply ALL derived tokens from dependency graph\n // This automatically updates:\n // - Links (--color-link, --color-link-hover)\n // - Focus rings (--color-ring)\n // - Charts (--chart-1, --chart-2, --chart-3, --chart-4, --chart-5)\n // - Buttons, badges, and any other dependent tokens\n ...customPalette.derivedTokens,\n };\n}\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const { theme, mode } = useThemeStore();\n // Use specific selector to get the exact palette for current theme/mode\n // This fixes the issue where full object subscription might miss updates or cause hydration issues\n const customPalette = useCustomizer((state) => state.customColors?.[theme]?.[mode]);\n\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [mounted, setMounted] = useState(false);\n\n // Prevent hydration mismatch\n useEffect(() => {\n setMounted(true);\n }, []);\n\n // Apply theme variables with transition\n useEffect(() => {\n if (!mounted) return;\n\n // Start transition\n setIsTransitioning(true);\n\n // Apply theme vars to :root\n const root = document.documentElement;\n\n // 1. Get base theme tokens\n const baseTokens = getThemeVars(theme, mode);\n\n // 2. Custom palette is now derived directly from store selector\n\n // DEBUG: Log the values to diagnose mismatch\n console.log('[ThemeProvider] Update:', {\n theme,\n mode,\n hasCustomPalette: !!customPalette,\n customPrimary: customPalette?.primary,\n timestamp: new Date().toISOString()\n });\n\n // 3. Merge tokens (custom overrides base)\n const finalTokens = customPalette\n ? mergeCustomColorTokens(baseTokens, customPalette)\n : baseTokens;\n\n // Apply transition class\n root.classList.add('theme-transitioning');\n\n // Apply CSS variables IMMEDIATELY (no requestAnimationFrame delay)\n Object.entries(finalTokens).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n\n // Set data attributes for theme and mode\n root.setAttribute('data-theme', theme);\n root.setAttribute('data-mode', mode);\n root.setAttribute('data-custom-colors', customPalette ? 'active' : 'default');\n\n // Toggle 'dark' class for Tailwind dark: modifier support\n if (mode === 'dark') {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n\n // End transition after animation completes\n const timeout = setTimeout(() => {\n root.classList.remove('theme-transitioning');\n setIsTransitioning(false);\n }, 400); // 400ms = 300ms transition + 100ms buffer\n\n return () => clearTimeout(timeout);\n }, [theme, mode, mounted, customPalette]);\n\n // Don't render children until mounted (prevents flash)\n if (!mounted) {\n return null;\n }\n\n return <>{children}</>;\n}\n","/**\n * Animation Presets\n *\n * Reusable animation configurations for consistent motion throughout the design system.\n * Works with Framer Motion and respects user motion preferences.\n */\n\n// Type definitions (compatible with Framer Motion)\nexport type Variant = {\n [key: string]: any;\n};\n\nexport type Variants = {\n [key: string]: Variant;\n};\n\nexport type Transition = {\n duration?: number;\n ease?: readonly number[] | number[] | string;\n type?: 'spring' | 'tween' | 'inertia';\n damping?: number;\n stiffness?: number;\n [key: string]: any;\n};\n\n/**\n * Animation Duration Presets\n * Based on Material Design motion guidelines\n */\nexport const durations = {\n instant: 0,\n fast: 0.15,\n normal: 0.3,\n slow: 0.5,\n slower: 0.7,\n} as const;\n\n/**\n * Easing Presets\n * Common easing curves for smooth animations\n */\nexport const easings = {\n // Standard easing - default for most transitions\n standard: [0.4, 0.0, 0.2, 1],\n\n // Deceleration - use when objects enter screen\n decelerate: [0.0, 0.0, 0.2, 1],\n\n // Acceleration - use when objects exit screen\n accelerate: [0.4, 0.0, 1, 1],\n\n // Sharp - use for very quick transitions\n sharp: [0.4, 0.0, 0.6, 1],\n\n // Bounce - playful animation\n bounce: [0.68, -0.55, 0.265, 1.55],\n} as const;\n\n/**\n * Common transition presets\n */\nexport const transitions = {\n default: {\n duration: durations.normal,\n ease: easings.standard,\n } as Transition,\n\n fast: {\n duration: durations.fast,\n ease: easings.standard,\n } as Transition,\n\n slow: {\n duration: durations.slow,\n ease: easings.standard,\n } as Transition,\n\n bounce: {\n duration: durations.normal,\n ease: easings.bounce,\n } as Transition,\n\n spring: {\n type: 'spring' as const,\n damping: 20,\n stiffness: 300,\n } as Transition,\n\n springBouncy: {\n type: 'spring' as const,\n damping: 10,\n stiffness: 100,\n } as Transition,\n} as const;\n\n/**\n * Fade Animation Variants\n */\nexport const fadeVariants: Variants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n exit: { opacity: 0 },\n};\n\n/**\n * Slide Animation Variants\n */\nexport const slideVariants = {\n fromLeft: {\n hidden: { x: -20, opacity: 0 },\n visible: { x: 0, opacity: 1 },\n exit: { x: -20, opacity: 0 },\n },\n fromRight: {\n hidden: { x: 20, opacity: 0 },\n visible: { x: 0, opacity: 1 },\n exit: { x: 20, opacity: 0 },\n },\n fromTop: {\n hidden: { y: -20, opacity: 0 },\n visible: { y: 0, opacity: 1 },\n exit: { y: -20, opacity: 0 },\n },\n fromBottom: {\n hidden: { y: 20, opacity: 0 },\n visible: { y: 0, opacity: 1 },\n exit: { y: 20, opacity: 0 },\n },\n} as const;\n\n/**\n * Scale Animation Variants\n */\nexport const scaleVariants = {\n default: {\n hidden: { scale: 0.95, opacity: 0 },\n visible: { scale: 1, opacity: 1 },\n exit: { scale: 0.95, opacity: 0 },\n },\n grow: {\n hidden: { scale: 0.8, opacity: 0 },\n visible: { scale: 1, opacity: 1 },\n exit: { scale: 0.8, opacity: 0 },\n },\n pop: {\n hidden: { scale: 0 },\n visible: { scale: 1 },\n exit: { scale: 0 },\n },\n} as const;\n\n/**\n * Rotate Animation Variants\n */\nexport const rotateVariants = {\n default: {\n hidden: { rotate: -10, opacity: 0 },\n visible: { rotate: 0, opacity: 1 },\n exit: { rotate: 10, opacity: 0 },\n },\n flip: {\n hidden: { rotateX: 90, opacity: 0 },\n visible: { rotateX: 0, opacity: 1 },\n exit: { rotateX: -90, opacity: 0 },\n },\n} as const;\n\n/**\n * List/Stagger Animation Variants\n */\nexport const listVariants = {\n container: {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.1,\n },\n },\n },\n item: {\n hidden: { y: 20, opacity: 0 },\n visible: {\n y: 0,\n opacity: 1,\n },\n },\n} as const;\n\n/**\n * Modal/Overlay Animation Variants\n */\nexport const modalVariants = {\n overlay: {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n exit: { opacity: 0 },\n },\n content: {\n hidden: { scale: 0.95, opacity: 0, y: 20 },\n visible: { scale: 1, opacity: 1, y: 0 },\n exit: { scale: 0.95, opacity: 0, y: 20 },\n },\n} as const;\n\n/**\n * Drawer/Sheet Animation Variants\n */\nexport const drawerVariants = {\n fromLeft: {\n hidden: { x: '-100%' },\n visible: { x: 0 },\n exit: { x: '-100%' },\n },\n fromRight: {\n hidden: { x: '100%' },\n visible: { x: 0 },\n exit: { x: '100%' },\n },\n fromTop: {\n hidden: { y: '-100%' },\n visible: { y: 0 },\n exit: { y: '-100%' },\n },\n fromBottom: {\n hidden: { y: '100%' },\n visible: { y: 0 },\n exit: { y: '100%' },\n },\n} as const;\n\n/**\n * Collapse/Expand Animation Variants\n */\nexport const collapseVariants = {\n collapsed: {\n height: 0,\n opacity: 0,\n transition: { duration: durations.fast },\n },\n expanded: {\n height: 'auto',\n opacity: 1,\n transition: { duration: durations.normal },\n },\n} as const;\n\n/**\n * Preset Animations\n * Complete animation configurations ready to use\n */\nexport const presets = {\n /**\n * Fade in/out animation\n */\n fade: {\n initial: 'hidden',\n animate: 'visible',\n exit: 'exit',\n variants: fadeVariants,\n transition: transitions.default,\n },\n\n /**\n * Slide from bottom animation\n */\n slideUp: {\n initial: 'hidden',\n animate: 'visible',\n exit: 'exit',\n variants: slideVariants.fromBottom,\n transition: transitions.default,\n },\n\n /**\n * Scale animation\n */\n scale: {\n initial: 'hidden',\n animate: 'visible',\n exit: 'exit',\n variants: scaleVariants.default,\n transition: transitions.default,\n },\n\n /**\n * Modal animation (overlay + content)\n */\n modal: {\n overlay: {\n initial: 'hidden',\n animate: 'visible',\n exit: 'exit',\n variants: modalVariants.overlay,\n transition: transitions.fast,\n },\n content: {\n initial: 'hidden',\n animate: 'visible',\n exit: 'exit',\n variants: modalVariants.content,\n transition: transitions.default,\n },\n },\n\n /**\n * List stagger animation\n */\n list: {\n container: {\n initial: 'hidden',\n animate: 'visible',\n variants: listVariants.container,\n },\n item: {\n variants: listVariants.item,\n },\n },\n} as const;\n\n/**\n * Helper to create a custom animation preset\n *\n * @example\n * ```tsx\n * const customFade = createAnimation({\n * hidden: { opacity: 0, scale: 0.8 },\n * visible: { opacity: 1, scale: 1 },\n * }, transitions.bounce);\n * ```\n */\nexport function createAnimation(\n variants: Variants,\n transition: Transition = transitions.default\n) {\n return {\n initial: 'hidden',\n animate: 'visible',\n exit: 'exit',\n variants,\n transition,\n };\n}\n\n/**\n * Helper to scale transition duration based on motion preference\n *\n * @example\n * ```tsx\n * const { scale } = useMotionPreference();\n * const duration = scaleDuration(durations.normal, scale);\n * ```\n */\nexport function scaleDuration(duration: number, scale: number): number {\n return duration * (scale / 10);\n}\n","import type { BreadcrumbItemLegacy } from '../components/navigation/Breadcrumbs';\n\nexport interface RouteConfig {\n [key: string]: {\n label: string;\n children?: RouteConfig;\n };\n}\n\n/**\n * Generates breadcrumb items from hash-based routing\n *\n * @param hash - Current window.location.hash (e.g., '#atoms/button')\n * @param routeConfig - Configuration mapping routes to labels\n * @param baseUrl - Base URL for href generation (default: '#')\n * @returns Array of breadcrumb items with the last item having no href\n *\n * @example\n * ```ts\n * const routeConfig = {\n * atoms: {\n * label: 'Components',\n * children: {\n * button: { label: 'Button' }\n * }\n * }\n * };\n *\n * // With hash: '#atoms/button'\n * const breadcrumbs = generateBreadcrumbs('#atoms/button', routeConfig);\n * // Returns: [\n * // { label: 'Home', href: '#' },\n * // { label: 'Components', href: '#atoms' },\n * // { label: 'Button' } // No href for current page\n * // ]\n * ```\n */\nexport function generateBreadcrumbs(\n hash: string,\n routeConfig: RouteConfig,\n baseUrl: string = '#'\n): BreadcrumbItemLegacy[] {\n // Remove '#' prefix and clean up\n const cleanHash = hash.replace(/^#/, '').trim();\n\n // If no hash, return just home\n if (!cleanHash) {\n return [{ label: 'Home', href: baseUrl }];\n }\n\n // Split path into segments\n const segments = cleanHash.split('/').filter(Boolean);\n const breadcrumbs: BreadcrumbItemLegacy[] = [{ label: 'Home', href: baseUrl }];\n\n let currentPath = '';\n let currentConfig = routeConfig;\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const isLast = i === segments.length - 1;\n\n currentPath += (currentPath ? '/' : '') + segment;\n\n // Look up label in config\n const config = currentConfig[segment];\n\n if (!config) {\n // Fallback: convert kebab-case to Title Case\n const label = segment\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n breadcrumbs.push({\n label,\n // No href for the last item (current page)\n href: isLast ? undefined : `${baseUrl}${currentPath}`,\n });\n } else {\n breadcrumbs.push({\n label: config.label,\n // No href for the last item (current page)\n href: isLast ? undefined : `${baseUrl}${currentPath}`,\n });\n\n // Update config for next level of nesting\n if (config.children) {\n currentConfig = config.children;\n }\n }\n }\n\n return breadcrumbs;\n}\n","export * from './Button';\nexport * from './Link';\nexport * from './Toggle';\nexport * from './ToggleGroup';\nexport * from './Magnetic';\n","export * from './Checkbox';\nexport * from './ColorPicker';\nexport * from './Combobox';\nexport * from './DragDrop';\nexport * from './FilterButton';\nexport * from './Form';\nexport * from './Input';\nexport * from './InputOTP';\nexport * from './Label';\nexport * from './RadioGroup';\nexport * from './SearchBar';\nexport * from './Select';\nexport * from './Slider';\nexport * from './Switch';\nexport * from './TextField';\nexport * from './Textarea';\nexport * from './ThemeSwitcher';\nexport * from './ThemeToggle';\n","export * from './Breadcrumb';\nexport * from './Breadcrumbs';\nexport * from './Command';\nexport * from './Menubar';\nexport * from './NavLink';\nexport * from './NavigationMenu';\nexport * from './Pagination';\nexport * from './SecondaryNav';\nexport * from './Tabs';\nexport * from './TertiaryNav';\n","export * from './AlertDialog';\nexport * from './ContextMenu';\nexport * from './Dialog';\nexport * from './Drawer';\nexport * from './Dropdown';\nexport * from './DropdownMenu';\nexport * from './HoverCard';\nexport * from './Modal';\nexport * from './Popover';\nexport * from './Sheet';\nexport * from './Tooltip';\n","export * from './Alert';\nexport * from './Progress';\nexport * from './ProgressBar';\nexport * from './Skeleton';\nexport * from './Sonner';\nexport * from './Spinner';\nexport * from './Toast';\n\n","export * from './AspectImage';\nexport * from './Avatar';\nexport * from './Badge';\nexport * from './Brand';\nexport * from './Calendar';\nexport * from './Card';\nexport * from './Code';\nexport * from './CollapsibleCodeBlock';\nexport * from './DataTable';\nexport * from './DescriptionList';\nexport * from './GitHubIcon';\nexport * from './Heading';\nexport * from './Table';\nexport * from './Text';\nexport * from './VariableWeightText';\nexport * from './Typewriter';\n\n","export * from './Accordion';\nexport * from './AspectRatio';\nexport * from './Carousel';\nexport * from './Collapsible';\nexport * from './Container';\nexport * from './CustomizerPanel';\nexport * from './DatePicker';\nexport * from './Footer';\nexport * from './Grid';\nexport * from './Header';\nexport * from './PageLayout';\nexport * from './PageTemplate';\nexport * from './Resizable';\nexport * from './ScrollArea';\nexport * from './Separator';\nexport * from './Sidebar';\nexport * from './Stack';\n","export * from './WarpBackground';\nexport * from './FaultyTerminal';\nexport * from './OrbBackground';\n","export * from './SplashCursor';\nexport * from './TargetCursor';\n","/**\n * Providers subpath export\n * Allows: import { ... } from '@sage/ui/providers'\n */\n\n// Re-export all providers\nexport * from './providers/ThemeProvider';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAAA;AAAA,EAAA,0BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAAC;AAAA,EAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAAC;AAAA,EAAA,0BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;","names":["CollapsibleContent","CollapsibleTrigger","Header","Separator","TableRow","import_jsx_runtime","React","React","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","import_react","import_react","p","q","state","motion","import_jsx_runtime","React","import_jsx_runtime","import_react","React","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","React","import_lucide_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","CommandPrimitive","React","import_jsx_runtime","import_jsx_runtime","import_react","import_lucide_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","React","import_react_slot","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","React","React","import_lucide_react","import_jsx_runtime","SelectIcon","SelectSeparator","React","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","import_react","import_zustand","import_middleware","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","React","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","React","React","import_jsx_runtime","import_react","import_jsx_runtime","React","React","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","DrawerPrimitive","import_react","import_react","rules","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","React","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","Sonner","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","React","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","props","React","import_class_variance_authority","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_tokens","import_jsx_runtime","React","React","import_jsx_runtime","TableRow","import_jsx_runtime","TableRow","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","React","import_react","React","import_framer_motion","import_jsx_runtime","import_framer_motion","import_react","import_jsx_runtime","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","React","import_lucide_react","import_jsx_runtime","useEmblaCarousel","api","React","import_jsx_runtime","CollapsibleTrigger","CollapsibleContent","import_react","React","import_react","import_lucide_react","import_jsx_runtime","React","motion","import_lucide_react","import_jsx_runtime","CalendarIcon","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","import_react","import_lucide_react","import_jsx_runtime","Header","React","import_jsx_runtime","import_jsx_runtime","Header","import_lucide_react","import_jsx_runtime","PanelGroup","PanelResizeHandle","React","import_jsx_runtime","React","import_jsx_runtime","Separator","React","import_react_slot","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","import_ogl","import_react","import_jsx_runtime","vertexShader","fragmentShader","hexToRgb","import_framer_motion","import_react","import_jsx_runtime","import_ogl","import_react","import_jsx_runtime","p","q","import_lucide_react","import_framer_motion","import_jsx_runtime","import_react","import_jsx_runtime","canvas","gl","format","gl2","vertexShader","fragmentShader","Program","import_react","import_jsx_runtime","import_react","import_tokens","import_jsx_runtime","import_tokens","TableRow","CollapsibleContent","CollapsibleTrigger","Header","Separator"]}